AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language FreePascal Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC

Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC

Ein Thema von stiftII · begonnen am 26. Sep 2011 · letzter Beitrag vom 26. Sep 2011
Antwort Antwort
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#1

Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC

  Alt 26. Sep 2011, 16:24
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.518 Beiträge
 
Delphi 12 Athens
 
#2

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC

  Alt 26. Sep 2011, 16:32
Schau dir mal in der Hilfe an, welche Parameter eine Methode für OnDrawItem haben muß.
(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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (26. Sep 2011 um 16:34 Uhr)
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#3

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC

  Alt 26. Sep 2011, 16:48
Schau dir mal in der Hilfe an, welche Parameter eine Methode für OnDrawItem haben muß.
(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
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#4

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC

  Alt 26. Sep 2011, 16:57
Ich habs
comboboxesadd[i].OnDrawItem := @colorfulcombobox;

Ein @ vor der Prozedur und es funktioniert
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#5

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC

  Alt 26. Sep 2011, 17:07
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC

  Alt 26. Sep 2011, 17:08
Hast du die ComboBox auch auf OwnerDraw gestellt?
  Mit Zitat antworten Zitat
neo4a

Registriert seit: 22. Jan 2007
Ort: Ingolstadt
362 Beiträge
 
Delphi XE2 Architect
 
#7

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC

  Alt 26. Sep 2011, 17:09
Ein @ vor der Prozedur und es funktioniert
Wirklich?!

Ansonsten muss die Prozedur 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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC

  Alt 26. Sep 2011, 17:12
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 {$mode delphi} in den Kompatibilitätsmodus.
Das @ wird also nicht der Fehler sein.
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#9

AW: Komponenten zur Laufzeit erstellen mit Ereignissen unter FPC

  Alt 26. Sep 2011, 17:36
Hast du die ComboBox auch auf OwnerDraw gestellt?
Das wars. THX!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 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