Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi onClick behandlung für dynamisch erzeugte objekte (https://www.delphipraxis.net/32243-onclick-behandlung-fuer-dynamisch-erzeugte-objekte.html)

Käthe 20. Okt 2004 17:21


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!

Dax 20. Okt 2004 17:23

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
.

Nothine 20. Okt 2004 18:58

Re: onClick behandlung für dynamisch erzeugte objekte
 
Zitat:

Zitat von Dax
Delphi-Quellcode:
TImage.OnClick := OnCLickMethod
.

ich weiß nicht ob sich das in neueren delphi-versionen geändert hat, aber in delphi 5 führte sowas noch zu einer compiler-fehlermeldung dieser kategorie hier:
[Fehler] Unit1.pas(36): Inkompatible Typen: Methodenzeiger und reguläre Prozedur
Delphi-Quellcode:
@TImage.OnClick := @OnClickMethod; // keine direkte Zuweisung sondern kopieren der Speicheradresse
oh und btw: herzlich willkommen in der DP @Käthe :mrgreen: :roll:

Christian Seehase 20. Okt 2004 19:08

Re: onClick behandlung für dynamisch erzeugte objekte
 
Moin Nothine,

Zitat:

Zitat von Nothine
ich weiß nicht ob sich das in neueren delphi-versionen geändert hat, aber in delphi 5 führte sowas noch zu einer compiler-fehlermeldung dieser kategorie hier:

nicht, wenn Du das als Methode deklarierst:

Delphi-Quellcode:
procedure TForm1.MyOnClickProc(Sender: TObject);
begin
  // was auch immer beim Klicken passieren soll
end;
Delphi-Quellcode:
TImage.OnClick := MyOnClickProc;
Deine Methode würde zwar auch funktionieren, hat aber den Nachteil, das der implizite Parameter Self in der Prozedur dann nicht genutzt werden kann.

SirThornberry 20. Okt 2004 19:09

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:
procedure meineProcedure(Sender: TObject);
begin

end;
[...]
MyImage.OnClick := meineProcedure;
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)

der Fehler kommt nicht bei
Delphi-Quellcode:
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;"
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)

mirage228 20. Okt 2004 19:16

Re: onClick behandlung für dynamisch erzeugte objekte
 
Alternativ geht es auch noch so ;)

Delphi-Quellcode:
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;
FProc darf jedoch keine Property sein!

mfG
mirage228

Käthe 21. Okt 2004 19:40

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 20:22 Uhr.

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