![]() |
onClick behandlung für dynamisch erzeugte objekte
wie definiere ich die onclick behandlungsroutine für dynamisch erzeugte TImage-objekte?
käthe p.S.: is dringend für die schule! |
Re: onClick behandlung für dynamisch erzeugte objekte
Du schreibst eine Routine für ein noch nicht existirendes Objekt und später gibst du dem TImage die methode mit
Delphi-Quellcode:
.
TImage.OnClick := OnCLickMethod
|
Re: onClick behandlung für dynamisch erzeugte objekte
Zitat:
[Fehler] Unit1.pas(36): Inkompatible Typen: Methodenzeiger und reguläre Prozedur
Delphi-Quellcode:
oh und btw: herzlich willkommen in der DP @Käthe :mrgreen: :roll:
@TImage.OnClick := @OnClickMethod; // keine direkte Zuweisung sondern kopieren der Speicheradresse
|
Re: onClick behandlung für dynamisch erzeugte objekte
Moin Nothine,
Zitat:
Delphi-Quellcode:
procedure TForm1.MyOnClickProc(Sender: TObject);
begin // was auch immer beim Klicken passieren soll end;
Delphi-Quellcode:
Deine Methode würde zwar auch funktionieren, hat aber den Nachteil, das der implizite Parameter Self in der Prozedur dann nicht genutzt werden kann.
TImage.OnClick := MyOnClickProc;
|
Re: onClick behandlung für dynamisch erzeugte objekte
@Nothine: Die von dir beschriebene Fehlermeldung kommt wie die Fehlermeldung schon sagt, wenn du dem "OnClick" eine normale Procedure zuweist. Verlangt wird eine Methode, die Proczedure muss also zu einer klasse gehören.
Der Fehler kommt bei
Delphi-Quellcode:
da kommt der Fehler wenn onClick vom Type TNotifyEvent ist und da ist definiert das die Procedure vom Type Object ist (grund für die incompatibilität ist das der versteckte Selfparameter fehlt)
procedure meineProcedure(Sender: TObject);
begin end; [...] MyImage.OnClick := meineProcedure; der Fehler kommt nicht bei
Delphi-Quellcode:
Es hat also nichts mit Delphi5 zu tun sondern damit das es sich tatsächlich um incompatible typen handelt (da der versteckte Self-Parameter bei der normalen Procedure fehlt)
procedure TEineKlasse.meineProcedure(Sender: TObject);
begin end; [...] MyImage.OnClick := InstanzeVonEINEKLASSE.meineProcedure; //da das OnClick im normalfall innerhalb dieser Klasse zugewiesen wird reicht somit auch "MyImage.OnClick := meineProcedure;" |
Re: onClick behandlung für dynamisch erzeugte objekte
Alternativ geht es auch noch so ;)
Delphi-Quellcode:
FProc darf jedoch keine Property sein!
procedure Test(Self: TObject; Sender: TObject);
begin ShowMessage('!!'); end; procedure TMyClass.AProc; var FProc: TNotifyEvent; begin TMethod(FProc).Code := @Test; TMethod(FProc).Data := Self; end; mfG mirage228 |
Re: onClick behandlung für dynamisch erzeugte objekte
hey
Jetzt ist's fast perfekt, bis auf ein paar schönheitsmakel. Vielen Dank!!!!! :-D Käthe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 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-2025 by Thomas Breitkreuz