Autor Beitrag
SirDregan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

WIN 2000, WinXP
D5 Prof
BeitragVerfasst: Di 31.05.05 13:33 
Hi Folks!

Ich hab ein Problem. Ich erstelle mehrere Komponenten zur Laufzeit - alles kein Problem, doch sobald ich ein Ereignis (in dem Fall OnStartDrag) zuweisen will bekomme ich "[Fehler] UMain.pas(365): Inkompatible Typen: Liste der Parameter ist unterschiedlich"
Hab schonmal im Netz nachgesehn aber irgendwie werd ich daraus nicht Schlau *grübel* :roll:

Hier der Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
      For X:=0 to Q_1.RecordCount-1 do begin
      Q_1.RecNo := X;
      Labels[X] := TLabel.Create(Self);
      Labels[X].Parent := ToolBar2;
      Labels[X].Name := 'L_'+Q_1.FieldByName('lfdnr').AsString;
      Labels[X].Caption := Q_1.FieldByName('name').AsString;
      Labels[X].Top := 2;
      Labels[X].AutoSize := false;
      Labels[X].Alignment := taCenter;
      Labels[X].SetBounds(0,2,200,14);
      Labels[X].Show;

      // Farbe festlegen
      Case X of
         // entfernt
      end;
      // Hier ist der Fehler *grrr*
      Labels[X].OnStartDrag := DragHandler;
   end;
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Di 31.05.05 14:06 
hi,

schau einfach in der hilfe nach. Da steht drin, wie die Parameterliste deines Eventhandlers aussehen muss.

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
SirDregan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

WIN 2000, WinXP
D5 Prof
BeitragVerfasst: Di 31.05.05 14:27 
Hab ich nachgesehn:
ausblenden Delphi-Quelltext
1:
2:
type TStartDragEvent = procedure (Sender: TObject; var DragObject: TDragObject) of object;
property OnStartDrag: TStartDragEvent;


Daraus folgere ich er braucht 2 Übergabeparameter (TObject,TDragObject)
Nur wie kann ich ihm das übergeben? Abgesehn davon das ich das garnicht brauche...
Ich möchte eigentlich nur ne Funktion starten, wenn er zu draggen beginnt. Ich brauch also nur den Sender (TObject) das kann ich ja mit:
ausblenden Delphi-Quelltext
1:
Labels[X].OnStartDrag := DragHandler(Labels[X]);					

machen.

Dann bekomme ich das hier:
[Fehler] UMain.pas(365): Inkompatible Typen: 'TStartDragEvent' und 'procedure, untyped pointer or untyped parameter'

Wenn das daran liegt das ich ihm auch noch n TDragObject übergeben muss, wie könnte ich das lösen?
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 31.05.05 14:33 
Wie sieht denn die deklaration von DragHandler aus?
SirDregan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

WIN 2000, WinXP
D5 Prof
BeitragVerfasst: Di 31.05.05 14:37 
user profile iconTino hat folgendes geschrieben:
Wie sieht denn die deklaration von DragHandler aus?


Einfach nur (Sender: TObject);
Aber die kann ich ja umschreiben, wenn er unbedingt n DragObject übergeben muss ;)

Eigentlich soll er OnStartDrag nur ShowDetails(Sender); ausführen.
Da das nicht funktioniert hat (weil er ja sein DragObject irgendwo hinschieben will) hab ich mir gedacht, gut, mach ich ne kleine procedure (DragHandler) und ruf damit meine Funktion auf.
Dann hab ich sie deklariert:
ausblenden Delphi-Quelltext
1:
DragHandler(Sender: TObject; useless: TDragObject);					

und hab ihm einfach meine Komponente und Nil übergeben:
ausblenden Delphi-Quelltext
1:
Labels[X].OnStartDrag := DragHandler(Labels[X],Nil);					


Aber immernoch:
[Fehler] UMain.pas(366): Inkompatible Typen: 'TStartDragEvent' und 'procedure, untyped pointer or untyped parameter'

Moderiert von user profile iconMotzi: Delphi-Tags hinzugefügt.
SirDregan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

WIN 2000, WinXP
D5 Prof
BeitragVerfasst: Di 31.05.05 16:33 
Habs gelöst, jetzt weis ich auch was du vorhin gemeint hast.

Die Prozedur die ich Labels[X].OnStartDrag zuweise, muss die gleichen Übergabeparameter (und namen) wie die "normalen" OnStartDrag-Prozeduren haben.

Thx