Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TImage um Eigenschaften und Ereignissen erweitern (https://www.delphipraxis.net/60521-timage-um-eigenschaften-und-ereignissen-erweitern.html)

bluescreen25 8. Jan 2006 13:21


TImage um Eigenschaften und Ereignissen erweitern
 
Hallo,
ich möchte gerne TImages als z.B. Buttons einsetzen. Es fehlen aber bei TImage die Ereignisse OnMouseOver oder auch die Möglichkeit über die Tabtaste ein TImage "einzufangen".

Ich habe einige Beiträge dazu gelesen, aber bin noch nicht soweit, Ableitungen und Erweiterungen zu erstellen. Kann da jemand helfen ?

SirThornberry 8. Jan 2006 13:29

Re: TImage um Eigenschaften und Ereignissen erweitern
 
über die Tabtaste wirst du TImage nie erreischen da es ein TControl ist und kein handle hat wie ein TWinControl.
Für OnMouseOver musst du die entsprechenden messages abfangen (CM_MOUSEENTER und CM_MOUSELEAVE)

bluescreen25 8. Jan 2006 13:48

Re: TImage um Eigenschaften und Ereignissen erweitern
 
Zitat:

Zitat von SirThornberry
über die Tabtaste wirst du TImage nie erreischen da es ein TControl ist und kein handle hat wie ein TWinControl.
Für OnMouseOver musst du die entsprechenden messages abfangen (CM_MOUSEENTER und CM_MOUSELEAVE)

:shock: ich schrieb, das ich noch nicht ganz so weit bin.(eher noch Anfänger).
Also geht es gar nicht darum, das TImage neu zu definieren, um global die neuen Ereignisse zu haben?


Bitte gib doch mal ein Beispiel für das Abfangen der Messages, wie man diese dann global verwenden kann.

SirThornberry 8. Jan 2006 13:53

Re: TImage um Eigenschaften und Ereignissen erweitern
 
ein Beispiel für die Messages hatte ich erstmal weg gelassen da ich dachte das es sich vielleicht schon erledigt hat das problem weil das TImage nie den Focus bekommen kann (per Tab etc.)

Beispiel:
Delphi-Quellcode:
type
  TImage = class(ExtCtrls.TImage)
  private
    procedure FCMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure FCMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  end;
[...]
procedure TImage.FCMMouseEnter(var Msg: TMessage);
begin
  //Was soll passieren wenn die maus drüber kommt
  //Beispiel: Laden eines andere Bildes
  Picture.LoadFromFile('BildMausDrüber');
end;

procedure TImage.FCMMouseLeave(var Msg: TMessage);
begin
  //Was soll passieren wenn die maus weg geht
  //Beispiel: Laden eines andere Bildes
  Picture.LoadFromFile('BildMausAußerhalb');
end;

bluescreen25 8. Jan 2006 14:15

Re: TImage um Eigenschaften und Ereignissen erweitern
 
Zitat:

Zitat von SirThornberry
ein Beispiel für die Messages hatte ich erstmal weg gelassen da ich dachte das es sich vielleicht schon erledigt hat das problem weil das TImage nie den Focus bekommen kann (per Tab etc.)


Danke schön, das mit dem Focus ist nicht ganz so wichtig wäre aber schön gewesen; werde Einiges über Shortcuts festlegen, sozusagen als Alternative.

Es ist eh eine Software,welche ich im Auto als CARPC einsetzen möchte (Navi,MP3 etc).
Da muss ich eh noch schaun, wie man ausser Maus,Shortcuts noch eine Alternative zur Bedienung finde.

Mir schwebt da so ein PowerMate vor, dazu muss ich eh noch so eine Art Focus erzeugen, da man ja nur einen Drehknopf und eine Druckmöglichkeit hat.

bluescreen25 9. Jan 2006 17:43

Re: TImage um Eigenschaften und Ereignissen erweitern
 
Zitat:

Zitat von SirThornberry
ein Beispiel für die Messages hatte ich erstmal weg gelassen da ich dachte das es sich vielleicht schon erledigt hat das problem weil das TImage nie den Focus bekommen kann (per Tab etc.)

Beispiel:
Delphi-Quellcode:
type
  TImage = class(ExtCtrls.TImage)
  private
    procedure FCMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure FCMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  end;
[...]
procedure TImage.FCMMouseEnter(var Msg: TMessage);
begin
  //Was soll passieren wenn die maus drüber kommt
  //Beispiel: Laden eines andere Bildes
  Picture.LoadFromFile('BildMausDrüber');
end;

procedure TImage.FCMMouseLeave(var Msg: TMessage);
begin
  //Was soll passieren wenn die maus weg geht
  //Beispiel: Laden eines andere Bildes
  Picture.LoadFromFile('BildMausAußerhalb');
end;

Nun habe ich alle Timages mit dem gleichen Inhalt. Wie bekomme ich dies bei nur bestimmten hin ?

Khabarakh 9. Jan 2006 17:52

Re: TImage um Eigenschaften und Ereignissen erweitern
 
Du musst eigene Events deklarieren und sie dann in der Botschaftsmethode auslösen. Beispiele dazu findest du im Forum und in den VCL-Sourcen.

bluescreen25 9. Jan 2006 17:58

Re: TImage um Eigenschaften und Ereignissen erweitern
 
Zitat:

Zitat von Khabarakh
Du musst eigene Events deklarieren und sie dann in der Botschaftsmethode auslösen. Beispiele dazu findest du im Forum und in den VCL-Sourcen.

:shock: :wiejetzt:

marabu 9. Jan 2006 18:01

Re: TImage um Eigenschaften und Ereignissen erweitern
 
Hallo bluescreen,

verstehst du das?

Delphi-Quellcode:
type
  TBetterImage = class(TImage)
  private
    FOnMouseEnter: TNotifyEvent;
    FOnMouseLeave: TNotifyEvent;
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  public
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;

implementation

procedure TBetterImage.CMMouseEnter(var Msg: TMessage);
begin
  if Assigned(FOnMouseEnter) then
    FOnMouseEnter(Self);
end;

procedure TBetterImage.CMMouseLeave(var Msg: TMessage);
begin
  if Assigned(FOnMouseLeave) then
    FOnMouseLeave(Self);
end;
Grüße vom marabu

bluescreen25 9. Jan 2006 18:10

Re: TImage um Eigenschaften und Ereignissen erweitern
 
Zitat:

Zitat von marabu
Hallo bluescreen,

verstehst du das?

Delphi-Quellcode:
type
  TBetterImage = class(TImage)
  private
    FOnMouseEnter: TNotifyEvent;
    FOnMouseLeave: TNotifyEvent;
    procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
  public
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;

implementation

procedure TBetterImage.CMMouseEnter(var Msg: TMessage);
begin
  if Assigned(FOnMouseEnter) then
    FOnMouseEnter(Self);
end;

procedure TBetterImage.CMMouseLeave(var Msg: TMessage);
begin
  if Assigned(FOnMouseLeave) then
    FOnMouseLeave(Self);
end;
Grüße vom marabu

:( Ohje, nicht so ganz, nur das eine Klasse von TImage abgeleitet wurde,richtig? und die Nachrichten vom ONMouseEnter,OnMouseLeave abgefangen werden , was aber die procedure genau macht nicht.

Mein Problem war, das ich eine Form mit diversen Images hatte und eine einfache Unit mit der Ableitung von Timage. Diese bekam ich aber nicht mit den Images der Form verbunden, oder wenn, dann wurde alles von TImage gleich verarbeitet, nur sollte ein selbst erstellter Button das machen und mein Hintergrund natürlich nicht....

Leider noch nicht so ganz verständlich...sorry


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz