Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Delphi para la web (https://www.clubdelphi.com/foros/forumdisplay.php?f=51)
-   -   Crear un Boton funcional a partir de dos Imagenes (https://www.clubdelphi.com/foros/showthread.php?t=78827)

martini002 19-05-2012 09:20:56

Crear un Boton funcional a partir de dos Imagenes
 
Saludos,

Desde la tarde de ayer he intentado
realizar un boton funcional, a partir de dos imagenes
un TImage con una imagen estatica
la cuestion es que desconozco el codigo
para lograr que cuando pase el mouse
entonces cambie a otra imagen obviamente
y cuando quite el mouse entonces coloque la imagen anterior
he intentado con BitBtn pero no hubo exito
realmente esta es una de las cosas que por el momento
me urge bastante, agradeceria mucho y apreciaria su apoyo

Best,
Martin

ecfisa 19-05-2012 18:14:26

Hola martini002.

Podés hacerlo de este modo:
Código Delphi [-]
...
type
  TImage=class(ExtCtrls.TImage)
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  end;

  TForm1 = class(TForm)
    Image1: TImage;
  private
  public
  end;

var
  Form1: TForm1;

implementation 

uses jpeg;

(* Mouse sobre la Imágen *)
procedure TImage.CMMouseEnter(var Msg: TMessage);
begin
  Form1.Image1.Picture.LoadFromFile('C:\Tu_Ruta\Imagen1.jpg'); // o como asignes la imagen
end;

(* Mouse fuera de la Imágen *)
procedure TImage.CMMouseLeave(var Msg: TMessage);
begin
  Form1.Image1.Picture.LoadFromFile('C:\Tu_Ruta\Imagen2.jpg'); // o como asignes la imagen
end;
...

Saludos.

ecfisa 19-05-2012 18:38:16

Hola de nuevo.

Me quede pensando, ya que no estaba muy claro si hablabas de un TImage o de un TBitBtn.

Si la imágen que deseas que cambie es la que este en el TBitBtn, te convendría poner las dos imágenes en un TImageList y hacer:
Código Delphi [-]
type
  TBitBtn=class(Buttons.TBitBtn)
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  end;

  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    ImageList1: TImageList;
  private
  public
  end;

var
  Form1: TForm1;

implementation 

procedure TBitBtn.CMMouseEnter(var Msg: TMessage);
begin
  with Form1 do
  begin
    BitBtn1.Glyph:= nil;
    ImageList1.GetBitmap(0, BitBtn1.Glyph)
  end;
end;

procedure TBitBtn.CMMouseLeave(var Msg: TMessage);
begin
  with Form1 do
  begin
    BitBtn1.Glyph:= nil;
    ImageList1.GetBitmap(1, BitBtn1.Glyph)
  end;
end;
...
Como verás el modo de detectar la entrada/salida del componente no difiere del anterior.

Saludos.

martini002 20-05-2012 00:19:54

Ecfisa,

Gracias por tu respuesta, realmente me ayudo mucho

Código Delphi [-]
Form1.Image1.Picture.LoadFromFile('C:\Tu_Ruta\Imagen1.jpg');

Esto era lo que estaba buscando exactamente
como modificar esa propiedad directamente desde el codigo,
realmente como en el primer ejemplo es precisamente
lo que necesito, pero no me funciona,
el lenguaje no me reconoce esta propiedad

Código Delphi [-]
CMMouseEnter
CMMouseLeave

me tira estos errores

Código Delphi [-]
[Error] AreaRectangulo.pas(59): ';' expected but '.' found
[Error] AreaRectangulo.pas(59): ';' expected but ')' found

Código Delphi [-]
procedure BotonImg.CMMouseEnter(var Msg: TMessage); // Aqui el error
begin
  Acciones.
end;


Ese hover es lo que realmente he venido buscando
pero pude encontrar otra forma un poco menos atractiva
pero que al final funciono muy bien
como podria resolver lo del hover?

Tambien me interesaria bastante conocer donde
conseguiste conocer esta propiedad "LoadFromFile"
seguramente alli mismo deben haber otras que me ayudarian bastante
interesantes respuestas,
gracias por el apoyo

Best,
Martin

Código Delphi [-]
procedure TForm1.BotonImgMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Form1.BotonImg.Picture.LoadFromFile('F:\Borland\Delphi7\Projects\Area Rectangulo\BotonAbajo.jpg');
end;

procedure TForm1.BotonImgMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Form1.BotonImg.Picture.LoadFromFile('F:\Borland\Delphi7\Projects\Area Rectangulo\BotonArriba.jpg');
end;

ecfisa 20-05-2012 20:27:07

Hola martini002.

Cita:

Esto era lo que estaba buscando exactamente
como modificar esa propiedad directamente desde el codigo,
realmente como en el primer ejemplo es precisamente
lo que necesito, pero no me funciona,
el lenguaje no me reconoce esta propiedad
¿ Incluiste las siguientes líneas antes de la declaración de clase del form ?
Código Delphi [-]
type
  TBitBtn=class(Buttons.TBitBtn)
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  end;
Saludos.


La franja horaria es GMT +2. Ahora son las 15:00:16.

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