![]() |
Zur laufzeit erstellter Komp Ereignis zuweisen klappt nicht
Delphi-Quellcode:
ListBoxTable.OnClick := TableOpen;
Delphi-Quellcode:
Wenn ich compilieren will sagt der:
procedure TableOpen(TabelleName:String);
begin // Irgendwas end;
Code:
Der Code befindet sich in einer Unit ohne Formular
[Fehler] uOpenDataBase.pas(73): Inkompatible Typen: 'Methodenzeiger und reguläre Prozedur'
|
Re: Zur laufzeit erstellter Komp Ereignis zuweisen klappt ni
Die Deklaration muß genau so aussehen, wie die eigentlichen OnClick Ereignisse.
Also anstatt
Delphi-Quellcode:
wahrscheinlich
procedure TableOpen(TabelleName:String);
Delphi-Quellcode:
procedure TableOpen(Sender: Tobject);
|
Re: Zur laufzeit erstellter Komp Ereignis zuweisen klappt ni
Moin Sebastian,
die Fehlermeldung sagt es ja eigentlich schon: OnClick muss eine Methode übergeben werden (Typ TNotifyEvent, dass steht allerdings nicht in der Meldung) So müsste die Deklaration aussehen, wenn man sie einem OnClick zuweisen will. (TForm1 ist nur ein Beispiel, wichtig ist, dass es sich um eine Methode und nicht um eine Prozedur handelt)
Delphi-Quellcode:
Nahezu genau diese Frage hatten wir übrigens schon einmal vor ein paar Tagen.
procedure TForm1.TableOpen(Sender: TObject);
begin // Irgendwas end; |
Re: Zur laufzeit erstellter Komp Ereignis zuweisen klappt ni
Delphi-Quellcode:
type
TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure MyButtonClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.MyButtonClick(Sender: TObject); begin ShowMessage('Hello world'); end; procedure TForm1.FormCreate(Sender: TObject); var MyButton : TButton; begin MyButton := TButton.Create(self); MyButton.Parent := Form1; MyButton.Caption := 'MyButton'; MyButton.OnClick := MyButtonClick; end; |
Re: Zur laufzeit erstellter Komp Ereignis zuweisen klappt ni
Nein. Gleicher Fehler:
In nem anderem Programm funktioniert es so:
Delphi-Quellcode:
DBGrid1.OnCellClick := self.dbgridmemo;
Delphi-Quellcode:
Das ist aber ne Unit mit Form
procedure TForm1.dbgridmemo(Column: TColumn);
begin Form2.DBMemo1.DataSource := column.grid.DataSource; Form2.DBMemo1.DataField := Column.FieldName; end; Wenn ich bei meinem Problemprogramm aber "self" einfüge sagt der: "Unbekannter Bezeichner" |
Re: Zur laufzeit erstellter Komp Ereignis zuweisen klappt ni
Das liegt daran, dass das OnClick Ereignis vom Typ TNotifyEvent ist.
Dieser Typ ist wie folgt deklariert:
Delphi-Quellcode:
Also musst du auch eine Procedure dieses Typs zuweisen.
Type TNotifyEvent = procedure(Sender: TObject) of object;
|
Re: Zur laufzeit erstellter Komp Ereignis zuweisen klappt ni
Moin Sebastian,
Zitat:
|
Re: Zur laufzeit erstellter Komp Ereignis zuweisen klappt ni
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry, danke zwar für die Hilfe, aber ich komm nicht weiter
Ich stell einfach mal den Source zur verfügung. Wäre nett wenn mir einer helfen könnte Die problematische Procedure lässt sich aufrufen in dem man oben auf "Datei/Datenbank öffnen/Aus Datei..." klickt und ne *.mdb (Access) Datei öffnet [Edit] Die Prozedure ganz unten in uOpenDataBase
Delphi-Quellcode:
müsste eigentlich so aussehen
procedure TableOpen(Sender:TObject);
begin end;
Delphi-Quellcode:
[/Edit]
procedure TableOpen(TabelleName:String);
begin end; |
Re: Zur laufzeit erstellter Komp Ereignis zuweisen klappt ni
Moin Sebastian,
schau Dir doch bitte mal mein erstes Posting in diesem Thread an. Da müsste Dir ein Unterschied zu dem auffallen, was Du gemacht hast. |
Re: Zur laufzeit erstellter Komp Ereignis zuweisen klappt ni
Delphi-Quellcode:
Wenn ich das so mache klappt das nicht
procedure TableOpen(Sender: TObject);
begin sleep(330); end;
Delphi-Quellcode:
Und so auch nicht
procedure TFrmMain.TableOpen(Sender: TObject);
begin sleep(330); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 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