TObjectList und Events

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Quit
Beiträge: 65
Registriert: So 5. Nov 2006, 18:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Luzern

TObjectList und Events

Beitrag von Quit »

Hallo!

Ich mache ein Programm dessen Inhalt dynamisch ausgetauscht wird (nur das Menü oben und die Statustleiste unten bleiben bestehen).
Dies realisiere ich mit TObjectList. Nun wollte ich aber für eine TComboBox ein OnEditingDone (/OnDrawItem?) Event festsetzen

Code: Alles auswählen

procedure TForm1.CreateNeighborhoodEditMenu(Sender: TObject);
var
  i: Integer;
begin
  MainDesktop.Free;
  MainDesktop := TObjectList.Create(true);
  ComboBox := TComboBox.Create(self);
  ComboBox.Parent := self;
  ComboBox.Height := 152;
  ComboBox.Top := 32;
  ComboBox.Text := 'Nachbarschaft auswählen';
  ComboBox.Width := 160;
  ComboBox.OnEditingDone := ChooseItem;
  MainDesktop.Add(ComboBox);
  for i := 0 to High(Neighborhoods) do
   begin
     ComboBox.items.add(Neighborhoods[i].Name);
   end;
end;
 
procedure TForm1.ChooseItem(Sender: TObject);
begin
 
 StatusBar.SimpleText := 'Abc!';
end;


MainDesktop ist dabei eine Variable, welche nicht in der Klasse Form1 ist
Aber auch

Code: Alles auswählen

ComboBox.OnEditingDone := TForm1.ChooseItem;

Geht nicht, er sagt mir etwas von wegen fehldenen Parametern - in den Tutorials wurde mir das aber so beschrieben, was mache ich falsch?

Fehlermeldung

Code: Alles auswählen

MainForm.pas(217,51) Error: Wrong number of parameters specified


Danke im Vorraus
Zuletzt geändert von Quit am Mo 6. Nov 2006, 21:34, insgesamt 2-mal geändert.

iaby
Beiträge: 24
Registriert: Mi 25. Okt 2006, 19:48

Beitrag von iaby »

hab es nicht ausprobiert, aber müsste es nicht Form1.ChooseItem heißen, also ohne das "T" ?

Quit
Beiträge: 65
Registriert: So 5. Nov 2006, 18:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Luzern

Beitrag von Quit »

Nichts, auch ohne Form1. Es geht einfach nicht :-/

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

du hast da n @ vergessen ;)
ComboBox.OnEditingDone := @ChooseItem;

OnEditingDone ist eine zeiger auf das Event, demzufolge musst du ihm auch eine Adresse zuweisen ...

Delphi erkennt das automatisch fpc kann das im Delphi mode auch es ist aber unsauberer da der compiler auch mal was falsch erkennen kann in Delphi muss man den Code dann umständlich umschreiben fpc ist da Standartmässig einfach etwas wählerischer mit dem Code.
Auch wenn ihr Delphi Code portiert werdet ihr öfter über solche Sachen stolpern.
Einfachste Lösung ist auf Delphi compatioble zu stellen. Gute Lösung ist den Code sauber und nach Pascalstandart zu halten ;)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten