Eigenschaftsänderungen abfangen / überschreiben
-
Man, welche Zeile Code hatte ich in diesem Thread wohl ernsthaft gepostet?! Denk mal nach, hmm?
-
Tut mich sorry, aber mir ist im Moment nicht mehr nach Denken. Meine Birne qualmt. Ich hör wohl jetzt besser auf.
Trotzdem Danke. Falls du dich nicht doch noch erbarmst, knie ich mich morgen nochmal rein. Im Moment seh ich wahrscheinlich den Wald vor lauter Bäumen nicht.
-
F_Bild->OnMouseDown = OnMouseDown;
Die Zeile meinte ich. Und das war's dann auch schon.
-
Das funktioniert so nicht !!!!!!!!
Wo muß ich denn noch IVMyOnClick setzen ?[ Dieser Beitrag wurde am 21.01.2003 um 22:46 Uhr von spool editiert. ]
-
Ich sagte doch: Das war's schon! Du brauchst den Pointer nicht! Lösche ihn. Erstelle deine Komponente, setz sie auf dein Formular und tippe in die Ereignisbehandlung von OnMouseDown irgendwas. Genau das wird passieren, wenn du auf deine Kompo (also das Image) klickst.
-
Und ich sagte schon, es funktioniert so nicht.
Habs heute nochmal getestet. Es geht nicht (BCB 5 Enterprise).
Wenn ich in den Bereich des Panels klicke, der nicht vom Imgae bedeckt ist, klappt alles wunderbar, ich krieg ne Meldung aus der Applikation und aus dem Control. Klicke ich aber auf das Image, passiert gar nix.
-
Hi,
F_Bild->OnMouseDown = this->OnMouseDown;
oh jeh...
Wenn du es so machen möchtest, musst du diese eine Methode schreiben, die ausgelöst werden kann.
Bespiel:
F_Bild->OnMouseDown = BildMouseDown; void __fastcall TExtendedImage::BildMouseDown(System::TObject* Sender, TMouseButton Button, Classes::TShiftState Shift, int X, int Y) { ShowMessage("klhk"); }
[ Dieser Beitrag wurde am 22.01.2003 um 14:35 Uhr von AndreasW editiert. ]
-
Nu hab ich drüber geschlafen, von Andreas nochmal nen Anschub bekommen und nu gehts. Man sollte eben nicht allzulange an einem Problem rumdoktern, sondern lieber mal ne Pause zwischendurch machen.
Auch THX an WebFritzi für die vielen Kommentare und Anregungen,
außerdem grüße ich alle die ich vergessen habe !
Wenn das Control jemals fertig werden sollte, stell ich's zur Verfügung.
-
@AndreasW: Wieso Oje??? Mach dir doch mal ein neues Projekt, hau dir ein Image drauf, schreib in den Konstruktor die Zeile, die du mit "Oje" betitelt hast, und mache irgendwas im OnMouseDown deiner Form. Wenn du dann auf dein Image klickst, passiert genau das!
-
ja, schon richtig.
Was aber, wenn er das Image veröffentlicht oder sogar als SubComponent erstellt.
Der Anwender das Ding ins Formular zieht und das Ereignis des Images zuweist.
Er müsste in Komponente diesen Fall selbstverständlich prüfen, ob der Pointer bereits belegt ist. Also nicht NULL ist. Diesen Pointer dann einem anderen temporären Pointer zuweisen und diesen in der Ereignisroutine aufrufen. Nur so kann gewährleistet werden, das die Komponete und der Anwender auf diese Ereignisse gleichzeitig zugreifen können. Ein Pointer kann halt nur eine Adresse speichern.Nun mal eine hypothetisches Beispiel. Der Anwender weist der SubComponente eine entsprechende Ereignisroutine zu. Die Komponente erkennt dieses und speichert diesen Pointer temporär ab. Innerhalb der Komponente wird auf das besagte Ereignis reagiert und dann der temporäre Pointer aufgerufen.
Soweit so gut. Jetzt kommt der Anwender auf die Idee, ein Objekt zu löschen, welche die Methode enthält, die von der Komoponete zwischengespeichert wurde.
Fatal, da der temporäre Pointer nun auf eine Adresse zeigt, die freigegeben wurde. Resultat-> Zugriffsverletztungen.Glaubt mir. Die Verwendung von Ereignisssen innerhalb von Komponenten hat fatale Folgen. Ich rate auf jeden Fall davon ab, wenn das Objekt veröffentlicht werden soll.