Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FreePascal Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC (https://www.delphipraxis.net/163362-komponenten-zur-laufzeit-erstellen-mit-ereignissen-unter-fpc.html)

stiftII 26. Sep 2011 16:24

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:
...
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;
Das löst dann den Fehler aus:
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(http://www.delphi-treff.de/tutorials...en/einleitung/) steht geht es in Lazarus leider nicht :(...

stiftII

himitsu 26. Sep 2011 16:32

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)

stiftII 26. Sep 2011 16:48

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
 
Zitat:

Zitat von himitsu (Beitrag 1126758)
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)

Hi Himitsu,
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

stiftII 26. Sep 2011 16:57

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
 
Ich habs :D
comboboxesadd[i].OnDrawItem := @colorfulcombobox;

Ein @ vor der Prozedur und es funktioniert :)

stiftII 26. Sep 2011 17:07

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
 
Zu früh gefreut :( ...

Das Ereignis wird niemals aufgerufen.

Aufgerufen wird es als:
Delphi-Quellcode:
procedure TForm1.colorfulcombobox(Control: TWinControl; Index: Integer;
  ARect: TRect; State: TOwnerDrawState);
begin
      ShowMessage('test');
end;
Und deklariert so:
Delphi-Quellcode:
           comboboxesadd[i] := TCombobox.Create(Form1);
           comboboxesadd[i].OnDrawItem := @colorfulcombobox;
Warum klappt das so nicht :( ?

implementation 26. Sep 2011 17:08

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
 
Hast du die ComboBox auch auf OwnerDraw gestellt?

neo4a 26. Sep 2011 17:09

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
 
Zitat:

Zitat von stiftII (Beitrag 1126769)
Ein @ vor der Prozedur und es funktioniert :)

Wirklich?!

Ansonsten muss die Prozedur
Delphi-Quellcode:
colorfulcombobox
so aufgebaut sein, damit der Fehler verschwindet:

Delphi-Quellcode:
colorfulcombobox(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
Bei der Zuweisung benötigst Du keine Parameter, die werden von der Combobóx beim Aufruf mitgegeben.

implementation 26. Sep 2011 17:12

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:
{$mode delphi}
in den Kompatibilitätsmodus.
Das @ wird also nicht der Fehler sein.

stiftII 26. Sep 2011 17:36

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC
 
Zitat:

Zitat von implementation (Beitrag 1126773)
Hast du die ComboBox auch auf OwnerDraw gestellt?

Das wars. THX!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 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