Dynamisches Erstellen von Label und onmousedown

Rund um die LCL und andere Komponenten
Antworten
ArmFPC1
Beiträge: 33
Registriert: Do 19. Mär 2015, 18:18

Dynamisches Erstellen von Label und onmousedown

Beitrag von ArmFPC1 »

Hallo,

ich denke das Thema ist schon sehr alt aber ich stehe gerade am selben Problem. Das wurde auch schon hier besprochen, konnte in dem Thread aber nicht anworten da ich keine Recht vom Forum her habe.
viewtopic.php?f=55&t=7082&p=63275&hilit=onmousedown+event#p63275

MyGitternetz :=TImage.Create(NIL);//Gitternetz Image erzeugen
MyGitternetz.Parent:= MyScrollbox;
MyGitternetz.Top:=0;
MyGitternetz.Left:=0;
MyGitternetz.OnMouseDown:=@MouseDown;


dann kommt bei mir folgender Fehler:
unit1.pas(136,33) Error: Incompatible types: got "<procedure variable type of procedure(TMouseButton;TShiftState;LongInt;LongInt) of object;Register>" expected "<procedure variable type of procedure(TObject;TMouseButton;TShiftState;LongInt;LongInt) of object;Register>"

wenn ich das selbe mit der Funktion .OnClick =@ButtonClick; mache geht es. Ich verstehe das nicht ganz! ich muss dazusagen habe mit Lazarus noch nichts davor gemacht gehabt.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Dynamisches Erstellen von Label und onmousedown

Beitrag von wp_xyz »

Die Meldung besagt, dass deine MouseDown-Routine nicht die Parameter aufweist, die erwartet werden. Du hast offenbar den "Sender"-Parameter vergessen (damit ist das "TObject" in der "expected" Parameter-Liste gemeint). Ein Tip: wähle das Control an, dem du ein Ereignis zuweisen möchtest, öffne im Objektinspektor die Seite "Ereignisse" und klicke auf den Butten "..." neben dem Ereignis, dem du Code zuweisen willst. Dann erzeugt die IDE einen leeren Prozedur-Rumpf, bei dem bereits alle benötigten Parameter aufgeführt sind. Wenn dir der Methodenname nicht gefällt, kannst du ihn im Objektinspektor (neben den "...") bearbeiten.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Dynamisches Erstellen von Label und onmousedown

Beitrag von Mathias »

Tip: wähle das Control an, dem du ein Ereignis zuweisen möchtest, öffne im Objektinspektor die Seite "Ereignisse" und klicke auf den Butten "..." neben dem Ereignis, dem du Code zuweisen willst. Dann erzeugt die IDE einen leeren Prozedur-Rumpf, bei dem bereits alle benötigten Parameter aufgeführt sind. Wenn dir der Methodenname nicht gefällt, kannst du ihn im Objektinspektor (neben den "...") bearbeiten.

Aber dies funktioniert nur bei statischen Controls.
Bei dynamisch erzeugten Controls geht dies nicht, aber auch dort wirst du Unterstützung der IDE haben.

Du kannst folgendes schreiben,

Code: Alles auswählen

  Panel:=TPanel.Create(Self);
  Panel.Parent:=MyScrollBox;
  Panel.OnMouseDown:=     

und anschliessend hinter dem "=" [Ctrt-Shift-C] drücken.
Dann wird dir auch automatisch einen leeren Prozedur-Rumpf erzeugt.

Noch ein Tip,

Code: Alles auswählen

MyGitternetz :=TImage.Create(NIL);

hier kommt anstelle von NIL Self rein.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

ArmFPC1
Beiträge: 33
Registriert: Do 19. Mär 2015, 18:18

Re: Dynamisches Erstellen von Label und onmousedown

Beitrag von ArmFPC1 »

OK !!!

Vielen Dank schon mal für eure schnelle Antwort ich werde das gerade mal ausprobieren.

Ich benötige das Dynamisch, da ich zurlaufzeit die z.B. Labels erstellen möchte und ihnen dann immer die selben Popup Menüs wie auch Funktionen um sie zu verändern, anhängen möchte.

Ich möchte so einen kleine "Editor" erstellen.

Antworten