Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Cambiar imagen en tiempo de ejecucíón (https://www.clubdelphi.com/foros/showthread.php?t=23083)

lucasarts_18 06-07-2005 07:20:58

Cambiar imagen en tiempo de ejecucíón
 
Hola:

Tengo un TImage y lo que quiero hacer es que cuando el mouse pase por encima la imagen se cambie por otra.
Tenía pensado almacenar todas las imagenes en un TImageList pero el TImageList no es compatible con un TImage (Creo :confused: ).

¿Qué puedo hacer? :(

Saludos.
Aarón

Casimiro Notevi 06-07-2005 09:27:01

Puedes almacenarlas en una tabla y elegir la que quieras.
Si no quieres usar bases de datos tienes otras posibilidades, por ejemplo, pones un timage y encima otra timage, cuando pasas el ratón por encima pones arriba la que estaba debajo y cuando sale el ratón vuelves a poner la que estaba antes.
Usando los métodos sendtoback y bringtofront.

lucasarts_18 06-07-2005 09:38:45

Hola:

Voy a ver la última opción que propones, bueno a está hora ya no, debo dormir :rolleyes: .
Mañana te cuento, aunque en este minuto estoy pensando que se puede hacer insostenible la situación con tres imagenes.

Saludos.

Lepe 06-07-2005 10:10:51

Si necesitas varias imagenes, puedes usar un arreglo:
Código Delphi [-]
type
  TImagenes = array [Boolean, 0..100] of TImage;
var arr: Timagenes;
En los indices arr[false,0], arr[false,1], cargas todas las imagenes que se muestran por defecto.

En los indices arr[true, 0], arr[true,1] cargas las imagenes que se van a superponer cuando esté el mouse arriba.

Así el índice numérico indica la imagen en cuestion, y el parámetro true/false, si se va a cargar la imagen por defecto, o bien la que está para superponerse.

¿Te sirve algo asi?

Un saludo

roman 06-07-2005 16:38:05

Cita:

Empezado por lucasarts_18
pero el TImageList no es compatible con un TImage (Creo :confused: ).

Acabo de hacer una prueba con un ImageList y no he tenido problema. Cargo la imagen inicial con


Código Delphi [-]
ImageList.GetBitmap(0, Image1.Picture.Bitmap);

y al pasar el ratón con


Código Delphi [-]
Image1.Picture.Bitmap := nil;
ImageList.GetBitmap(1, Image1.Picture.Bitmap);

0 y 1 son los índices en el ImageList de las imágenes.

// Saludos

lucasarts_18 06-07-2005 17:34:36

Hola Roman:

Gracias por tu ayuda, me resulta como lo indicas tú pero..... al momento de cambiar la otra imagen ésta disminuye bastante el tamaño a pesar que ambas tienen el mismo alto y ancho.

Saludos.

lucasarts_18 13-07-2005 05:29:31

Hola Román:

Ya solucioné el problema de los tamaños, era respectivamente el ancho y el alto, qué cosas no ??.

Otra duda,sabes que evento se genera cuando el mouse deja de estar sobre algún objeto ???

Saludos.

German 27-07-2005 15:51:06

Puedes crearte un componente tImage2, igual que el tImage, pero que incluya los eventos onMouseEnter y onMouseLeave (al entrar y al salir el mouse):


Código Delphi [-]
unit Image2;
 
interface 
 
uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;
 
type 
  TEntrarEvent=procedure(Sender:TObject) of object;
  TSalirEvent =procedure(Sender:TObject) of object;
  TImage2 = class(TImage)
  private
    { Private declarations }
    FOnEnter:TEntrarEvent;
    FOnExit :TSalirEvent;
    procedure CMMouseEnter(var msg:TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var msg: TMessage); message CM_MOUSELEAVE;
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    property OnMouseEnter: TEntrarEvent read FOnEnter write FOnEnter;
    property OnMouseLeave: TSalirEvent read FOnExit write FOnExit;
 
  end; 
 
procedure Register;
 
implementation 
 
procedure TImage2.CMMouseEnter(var msg:TMessage);
begin 
    inherited;
    {Cuando el raton entra...}
    if Assigned(FOnEnter) then FOnEnter(Self);
end; 
 
procedure TImage2.CMMouseLeave(var msg: TMessage);
begin 
    inherited;
    {Cuando el raton sale}
    if Assigned(FOnExit) then FOnExit(self);
end; 
 
procedure Register;
begin 
  RegisterComponents('Personales', [TImage2]);
end; 
 
end.

Salu2.


La franja horaria es GMT +2. Ahora son las 23:19:23.

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