![]() |
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 ? |
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) |
Re: TImage um Eigenschaften und Ereignissen erweitern
Zitat:
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. |
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; |
Re: TImage um Eigenschaften und Ereignissen erweitern
Zitat:
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. |
Re: TImage um Eigenschaften und Ereignissen erweitern
Zitat:
|
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.
|
Re: TImage um Eigenschaften und Ereignissen erweitern
Zitat:
|
Re: TImage um Eigenschaften und Ereignissen erweitern
Hallo bluescreen,
verstehst du das?
Delphi-Quellcode:
Grüße vom marabu
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; |
Re: TImage um Eigenschaften und Ereignissen erweitern
Zitat:
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 |
Re: TImage um Eigenschaften und Ereignissen erweitern
Du kannst einem oder mehreren Images jetzt das gewünschte Verhalten beibringen. Da wo du keine Routine an OnMouseEnter() zuweist, da verhält sich das Image dann so wie gehabt. Jetzt klarer?
Delphi-Quellcode:
marabu
procedure TMainForm.ImageMouseEnter(Sender: TObject);
begin // hier dein Code end; procedure TMainForm.ButtonClick(Sender: TObject); var bi: TBetterImage; begin bi := TBetterImage.Create(self); bi.OnMouseEnter := ImageMouseEnter; end; |
Re: TImage um Eigenschaften und Ereignissen erweitern
funktioniert bei mir leider net so ganz....
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var BImage :TBetterImage; begin BImage := TBetterImage.Create(self); BImage.OnMouseEnter := ImageMouseEnter; BImage.OnMouseLeave := ImageMouseLeave; Hintergrund.Picture.LoadFromFile(extractfilepath(paramstr(0))+'back.jpg'); close_btn_img.SetBounds(0, 225, 210, 60); close_btn_img.Picture.LoadFromFile(extractfilepath(paramstr(0))+'button.jpg'); end; procedure TForm1.ImageMouseEnter(Sender: TObject); begin close_btn_img.Picture.LoadFromFile(extractfilepath(paramstr(0))+'buttonB.jpg'); end; procedure TForm1.ImageMouseLeave(Sender: TObject); begin close_btn_img.Picture.LoadFromFile(extractfilepath(paramstr(0))+'button.jpg'); end; procedure TForm1.close_btnClick(Sender: TObject); begin form1.Close; end; nochmal eben editiert, weil Images nicht erkennbar ! |
Re: TImage um Eigenschaften und Ereignissen erweitern
Als erstes vergisst du das Image und leitest deine Komponente am besten von TWinControl ab. Das hat die ganzen Events nämlich schon.
|
Re: TImage um Eigenschaften und Ereignissen erweitern
Zitat:
close_btn_img: TImage; |
Re: TImage um Eigenschaften und Ereignissen erweitern
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo bluescreen,
schau dir einmal diese Demo an. Freundliche Grüße vom marabu |
Re: TImage um Eigenschaften und Ereignissen erweitern
Hmm das funktioniert, doch ich suchte eigendliche eine globalere Lösung, deshalb hatte ich versucht es auf ein in der VCL erstelltes Image zu beziehen. Deshalb funktionierte meines nicht.
Das wird ja eine Menge Code für jeden Button werden.... Leider kann ich jetzt nicht mehr die Vorzüge der VCL nutzen um die anderen Eigenschaften und Ereignisse zu setzen. Vielen Dank !
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Hintergrund.Picture.LoadFromFile(extractfilepath(paramstr(0))+'back.jpg'); img := TBetterImage.Create(self); with img do begin Parent := self; //<--- was steckt dahinter? ohne dem kein Image sichtbar ! SetBounds(0, 225, 210, 60); OnMouseEnter := ImageMouseEnter; OnMouseLeave := ImageMouseLeave; Picture.LoadFromFile(extractfilepath(paramstr(0))+'button.jpg'); end; end; procedure TForm1.ImageMouseEnter(Sender: TObject); begin img.Picture.LoadFromFile(extractfilepath(paramstr(0))+'buttonB.jpg'); end; procedure TForm1.ImageMouseLeave(Sender: TObject); begin img.Picture.LoadFromFile(extractfilepath(paramstr(0))+'button.jpg'); end; |
Re: TImage um Eigenschaften und Ereignissen erweitern
Liste der Anhänge anzeigen (Anzahl: 2)
Im anhang ist mal ein Beispiel wie man das ganze macht damit es für die auf das Formular gepackten TImages funktioniert (gibt da noch eine andere Variante bei der man die abgeleitete Komponente in eine extra Unit packt).
[Edit]Bei der Variante mit Auslagerung in eine seperate Unit muss man darauf achten das diese seperate Unit hinter der eigentlichen Unit (ExtCtrls) in den Uses aufgeführt wird.[/Edit] |
Re: TImage um Eigenschaften und Ereignissen erweitern
Zitat:
Da kann ich nur sagen : :thumb: Großen Dank an euch beiden für die Mühe! Das hätte ich nie hinbekommen, aber hier kann ich die Zusammenhänge mir mal einprägen. Gruß aus Geldern |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz