Entwickler-Ecke
Multimedia / Grafik - over effekt beim timage: neue klasse geht nicht...
Lemon - Mo 22.03.04 21:23
Titel: over effekt beim timage: neue klasse geht nicht...
hallo,
habe hier im forum den quelltext fuer ein image mit over und out event vom timage gefunden.
geht bei mir irgendwie nicht:
fehler: irgendwas mit external und forward deklaration stimmt nicht.
hier mal ein teil des quelltexts:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TOverImage = class(TImage) private procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE; end;
TForm1 = class(TForm) Button1: TButton; Image1: TImage; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private MyImg: TOverImage; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
... |
vielen dank schon mal im vorraus!!!
Lemon - Di 23.03.04 15:59
also mein problem hat sich mitlerwelie erledigt.
aber noch ne frage.
was wird als sender im onclick event uebergeben? timage oder toverimage.
Motzi - Di 23.03.04 17:41
Keins von beidem... TObject.. :roll: ;)
Ne, im Ernst... Im Normalfall wird immer das Objekt übergeben, das das Ereginis auslöst, dh. wenn das Objekt ein TOverImage ist, dann ist auch Sender ein TOverImage-Objekt.. du musst es nur noch entsprechend casten...!
Lemon - Di 23.03.04 20:50
ok, gut.
noch ne frage.
koennen die oben genannten prozeduren auch mehr parameter enthalten???
wenn ja, wie??
Motzi - Di 23.03.04 22:22
Wie meinst du das..? :?
Lemon - Mi 24.03.04 17:05
naja, dass z.b. auch der sender, d.h der name des ausloesenden objektes mituebergeben wird.
Motzi - Mi 24.03.04 22:25
Der übergebene Sender ist eine Referenz auf das auslösende Objekt..! Dh. du hast alles was du von diesem Objekt brauchst..! Erklär einfach mal auf was du hinauswillst / was du vorhast...
Lemon - Mi 24.03.04 22:50
also,
ich will mehrere toverimage einfuegen, aber die sollen natuerlich alle andere images beinhalten.
jetzt will ich ueber den sender feststellen, welches overimage ueberfahren wurde, um dann das richtige image auszuwahlen!
Motzi - Mi 24.03.04 22:58
Ein einfacher Typecast nach TOverImage reicht bereits und du hast vollen Zugriff auf das Objekt das das Ereignis ausgelöst hat :)
Lemon - Do 25.03.04 14:23
sorry, aber soviel ahnung hab' ich von delphi nicht.
wo muss das mit dem typecast hin und wie geht das genau???
maximus - Do 25.03.04 15:10
Wenn du nur feststellen willst von welchem image das event kommt, dann brauchst du nichtmal einen typecast:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| Procedure TForm1.OnOverOverImage1(sender:Tobject); begin if Sender = OverImage1 then begin showMessage(TOverImage(sender).name); end else if sender = voerImage2 then begin Beep; end;
end; |
so nach dem chema!
Lemon - Do 25.03.04 16:35
das problem bei mir ist jetzt, dass ich immernoch keinen sender habe.
ich habe die toverimage ja dynamisch waehrend der laufzeit erstellt und dann kann ich ja so ne prozedur nicht erstellen!
Motzi - Do 25.03.04 16:39
Lemon hat folgendes geschrieben: |
das problem bei mir ist jetzt, dass ich immernoch keinen sender habe.
ich habe die toverimage ja dynamisch waehrend der laufzeit erstellt und dann kann ich ja so ne prozedur nicht erstellen! |
Doch, auch das geht.. du musst nur eine Methode mit den entsprechenden Parametern erstellen und kannst diese dann zur laufzeit zuweisen... es gibt dazu schon genug Threads hier um Forum.. einfach mal suchen.. zb nach
LAUFZEIT EREIGNIS
Lemon - Fr 26.03.04 15:04
so, das geht jetzt alles, aber ich hab' trotzdem noch ne frage.
weiter oben fragte ich, welcher objekttyp als sender uebergeben wird: timage oder toverimage
ich habe folgende if anweisung
Delphi-Quelltext
1:
| if (Sender is TImage) then ... |
und diese wird auch ausgefuehrt, wenn der sender ein toverimage ist. wieso???
Moderiert von
Motzi: BBCode aktiviert
maximus - Fr 26.03.04 15:07
Weil TOverimage ja auch TImage ist. Delphi liest es ungefähr so und du kannst es auch so schreiben:
Delphi-Quelltext
1:
| if Sender.inheritsFrom(TImage) then ... |
Lemon - Fr 26.03.04 15:12
alla hopp.
danke fuer die viele geduld, die ihr mit mir hattet!!!!!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!