Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-11-2009
pedrosan pedrosan is offline
Miembro
 
Registrado: nov 2009
Posts: 14
Poder: 0
pedrosan Va por buen camino
Agregar boton con imagen

Hola a todos, les comento un poco el problema que tengo a ver si alguien tiene info al respecto. Basicamente estoy agregando un boton en tiempo de ejecución de la siguiente manera :

CreateWindow('Button', ' ', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT or WS_CLIPSIBLINGS ,
205, 2, 30, 25, hw, HMENU(WM_BUTTON_50),0,nil);

Lo hago de esta manera ya que despues a traves de un HOOK identifico cuando hace click sobre este boton (wParam = WM_BUTTON_50).

Es posible agregarle una imagen a este boton? o alguien sabe de algun otro componente que pueda agregar con imagen y al que por supuesto pueda definirle HMENU(WM_BUTTON_50) de manera tal que pueda identificarlo a traves de HOOK cuando se haga click en el mismo?
Muchas gracias!
Responder Con Cita
  #2  
Antiguo 28-11-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
¿Porqué no usas un SpeedButton?. Puedes asignar su evento OnClick dinámicamete también.

Saludos.
Responder Con Cita
  #3  
Antiguo 30-11-2009
pedrosan pedrosan is offline
Miembro
 
Registrado: nov 2009
Posts: 14
Poder: 0
pedrosan Va por buen camino
Hola, gracias por la sugerencia. Habia probado hacer con un SpeedButton pero tuve problemas a la hora de asignarle un ParentWindow ya que no posee esa propiedad y lo necesito dentro de una determinada ventana. Trate con la funcion SetParent, pero tengo problemas a la hora de obtener el Handle del speedbutton. Alguna de idea de como puedo asignar el speedbutton en tiempo de ejecucion a una ventana? De todas maneras voy a seguir probando, a lo mejor algo esoty haciendo mal. Gracias!
Responder Con Cita
  #4  
Antiguo 30-11-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Un ejemplo con un TBitBtn:

Código:
    
    TBitBtn* B = new TBitBtn((void*)NULL);
    B->Left = 100;
    B->Top =  100;
    B->Width = 75;
    B->Height = 25;
    B->Parent = this;
    ::SetParent(B->Handle, Panel1->Handle);  // Lo pasa a otro ventana
Saludos.
Responder Con Cita
  #5  
Antiguo 01-12-2009
pedrosan pedrosan is offline
Miembro
 
Registrado: nov 2009
Posts: 14
Poder: 0
pedrosan Va por buen camino
Muchas gracias escafandra, excelente aporte como de costumbre Ahora bien, me esta costando un poco la equivalencia del código en DELPHI, sobre todo (void*)NULL, no se si lo estoy haciendo bien y parece me está trayendo problemas...si tenes a mano la equivalencia te lo agradecería,sino igual ya con la idea que me diste me va servir mucho... Muchas gracias nuevamente!
Responder Con Cita
  #6  
Antiguo 01-12-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
(void*)NULL es un puntero nulo, equivalente a nil.

Saludos.
Responder Con Cita
  #7  
Antiguo 03-12-2009
pedrosan pedrosan is offline
Miembro
 
Registrado: nov 2009
Posts: 14
Poder: 0
pedrosan Va por buen camino
Al final logré agregarle imagen al boton creado con la funcion windowcreate. Aqui dejo el código:

//Creo el boton
B1 := CreateWindow('Button', '', WS_CLIPSIBLINGS or WS_BORDER or WS_VISIBLE or BS_PUSHBUTTON or BS_HOLLOW or WS_CHILD or BS_ICON,205, 2, 30, 25, hw, HMENU(WM_BUTTON_50),0,nil);

//envío mensaje para cargar imagen en el boton SendMessage(B1,BM_SETIMAGE,IMAGE_ICON,LoadImage(0,'C:\Image48x48.ico',IMAGE_ICON,0,0,LR_LOADFROMFILE ));


Saludos!

Última edición por pedrosan fecha: 04-12-2009 a las 16:02:52.
Responder Con Cita
  #8  
Antiguo 04-12-2009
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
A pesar de que lo solucionaste, quiero ilustrar el ejemplo que puse en C++Builder:
Cita:
Empezado por escafandra Ver Mensaje
Un ejemplo con un TBitBtn:

Código:
    
    TBitBtn* B = new TBitBtn((void*)NULL);
    B->Left = 100;
    B->Top =  100;
    B->Width = 75;
    B->Height = 25;
    B->Parent = this;
    ::SetParent(B->Handle, Panel1->Handle);  // Lo pasa a otro ventana
Saludos.
Lo traduzco a delphi. Probado en delphi 6:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  B:  TBitBtn;
begin
    B:= TBitBtn.Create(nil);
    B.Left:= 10;
    B.Top:=  10;
    B.Width:=Image1.Picture.Width;
    B.Height:= Image1.Picture.Height;
    B.Parent:= self;
    B.Glyph:= Image1.Picture.Bitmap;

   // Lo pasa a otra ventana, en este caso un panel, pero podría ser cualquiera dado su Handle
    Windows.SetParent(B.Handle, Panel1.Handle);  
end;

Saludos.
Responder Con Cita
  #9  
Antiguo 04-12-2009
pedrosan pedrosan is offline
Miembro
 
Registrado: nov 2009
Posts: 14
Poder: 0
pedrosan Va por buen camino
Post Boton redondo??

Gracias por la respuesta escafandra, te comento que ya habia probado hacer algo como lo q indicas arriba, el tema es q el boton se me agregaba pero sin imagen, es decir un boton con fondo NEGRO,un boton todo negro, no se cual será el motivo, es por eso que decidi seguir intentando a traves de funciones de la api de windows hasta q salió je. A lo mejor tuve ese problema por el tipo de ventana a la que le agregaba el TBitBtn boton, no era un panel común, es una ventana de otra aplicacion, en fin...

Cambiando un poco de tema, ahora estoy intentando crear el boton pero "redondeado"...intenté con el siguiente código pero nada Primero que nada me gustaría saber si es posible hacer para asi poder seguir investigando y probando. Dejo el código que se me ocurrio pero no funciona je:
Código Delphi [-]
B1 := CreateWindow('Button', '',WS_VISIBLE or WS_CHILD {or WS_DLGFRAME´}  or BS_FLAT or BS_ICON ,205, 2, 30, 25, hw, HMENU(WM_BUTTON_50),0,nil);       
      
//envío mensaje para agregar imagen al boton
SendMessage(B1,BM_SETIMAGE,IMAGE_ICON,LoadImage(0,'C:\Imagen_48x48.ico',IMAGE_ICON,80,80,LR_LOADFROM  FILE)); 
      
windows.GetClientRect(B1,rcClient);      
RoundRect(GetDC(B1),rcClient.Left,rcClient.Top,rcClient.Right,rcClient.Bottom,20,20); 
windows.RedrawWindow(B1,@rcClient,hw,RDW_UPDATENOW);
Algún aporte??muchas gracias!

Saludos!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
insertar imagen en un botón emiliu Varios 9 14-09-2012 23:32:09
Boton con imagen PNG RONPABLO Gráficos 7 12-07-2007 14:59:10
Imagen en Boton tarco35 Varios 1 30-09-2006 17:42:30
agregar celdas a una tabla con un boton jorgesl PHP 9 19-06-2006 20:46:29
Agregar texto a un formulario al presionar un boton. D-MO HTML, Javascript y otros 4 26-12-2005 20:03:49


La franja horaria es GMT +2. Ahora son las 13:49:00.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi