![]() |
Delphi-Version: 5
Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
Hallo,
unter Lazarus habe ich eine komponente zur Laufzeit erstellt, nun möchte ich dem OnDraw Ereignis eine eigene Funktion zuweisen. Leider funktioniert das nicht. Mein Code sieht ungefähr so aus.
Delphi-Quellcode:
Das löst dann den Fehler aus:
...
public procedure mydrawing(Sender: TObject); ... //var für komponente MyComboBox: TComboBox; .. procedure TForm1.mydrawing(Sender: TObject); begin ... end; ... //Das erstellen: procedure Form1.OnCreate(Sender: TObject); begin MyComboBox := TCombobox.Create(Form1); MyComboBox.OnDrawItem := mydrawing; end; unit1.pas(1138,56) Error: Wrong number of parameters specified for call to "mydrawing" Wie kann man das lösen ? So wie es in dieser Anleitung( ![]() stiftII |
AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
Schau dir mal in der Hilfe an, welche Parameter eine Methode für OnDrawItem haben muß. :zwinker:
(notfalls einfach mal vom OI soeine Funktion erstellen lassen) Und ganau das besagte auch die Fehlermeldung. Die Parameter deiner Methode stimmen nicht mit dem überein, was für OnDrawItem deklariert ist. (hier könnte man sich auch mal direkt die Deklaration von OnDrawItem ansehn, bzw. die des Typen, welcher für OnDrawItem, als Rückgabewert, verwendet wurde) |
AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
Zitat:
das ist mir schon klar. Aber an der Stelle, an der die Komponente erstellt wird habe ich die zu übergebenden Variablen doch garnicht ? Ich stehe da irgendwie auf dem Schlauch. stiftII |
AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
Ich habs :D
comboboxesadd[i].OnDrawItem := @colorfulcombobox; Ein @ vor der Prozedur und es funktioniert :) |
AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
Zu früh gefreut :( ...
Das Ereignis wird niemals aufgerufen. Aufgerufen wird es als:
Delphi-Quellcode:
Und deklariert so:
procedure TForm1.colorfulcombobox(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState); begin ShowMessage('test'); end;
Delphi-Quellcode:
Warum klappt das so nicht :( ?
comboboxesadd[i] := TCombobox.Create(Form1);
comboboxesadd[i].OnDrawItem := @colorfulcombobox; |
AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
Hast du die ComboBox auch auf OwnerDraw gestellt?
|
AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
Zitat:
Ansonsten muss die Prozedur
Delphi-Quellcode:
so aufgebaut sein, damit der Fehler verschwindet:
colorfulcombobox
Delphi-Quellcode:
Bei der Zuweisung benötigst Du keine Parameter, die werden von der Combobóx beim Aufruf mitgegeben.
colorfulcombobox(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); |
AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
Das @ ist wichtig. Objfpc-Dialekt <> Delphi-Dialekt.
FreePascal erwartet vor Prozedur-/Funktionszuweisungen immer das @, anders als in Delphi. Wenn's dich stört, schalte per
Delphi-Quellcode:
in den Kompatibilitätsmodus.
{$mode delphi}
Das @ wird also nicht der Fehler sein. |
AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 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