Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Linkat
Lazarusforum e. V.
Beiträge: 560 Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22; Lazarus 4.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart
Beitrag
von Linkat » Mi 27. Jul 2011, 17:02
Hallo,
ich möchte mit einem OnClick-Ereignis eines Buttons auf einer dynamisch erstelllten Form eine procedure ausführen. Folgender Code läuft unter Delphi 2009:
Code: Alles auswählen
unit dynformu;
{$mode objfpc}{$H+}
interface
uses
Classes,SysUtils,FileUtil,Forms,Controls,Graphics,Dialogs,StdCtrls,Buttons;
type
{ TForm1 }
TForm1 = class(TForm)
BitBtn1:TBitBtn;
Button1:TButton;
procedure Button1Click(Sender:TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
// procedure SetzeColor(sender:TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
var Form :TForm;
Button :TButton;
BitBtn :TBitBtn;
procedure SetzeColor(sender:TObject);
begin
Form1.Color:=Form1.Color+1000;
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
Form:=TForm.Create(self);
Form.Top:=100;
Form.Left:=100;
Form.Width:=400;
Form.Height:=300;
Form.Visible:=true;
Button:=TButton.create(Form);
Button.parent:=Form;
Button.Top:=Form.Height-30;
Button.Left:=10;
Button.Anchors:=[akLeft,akBottom];
Button.Width:=90;
Button.caption:='S&tart Farbe';
@Button.OnClick:=@SetzeColor; <-- hier ist der Fehler
BitBtn:=TBitBtn.Create(Form1);
BitBtn.parent:=Form;
BitBtn.Top:=Form.Height-30;
BitBtn.Left:=Form.Width-80;
BitBtn.Height:=25;
BitBtn.Anchors:=[akRight,akBottom];
BitBtn.Kind:=bkClose;
BitBtn.Caption:='&Schließen';
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
// Form1.Free;
end;
end.
Folgende Fehlermeldung erscheint:
Code: Alles auswählen
Incompatible types: got "<address of procedure;Register>" expected "<procedure variable type of procedure(TObject) of object;Register>"
Leider weis ich nichts mit der Fehlermeldung anzufangen.
Wer kann helfen?
Gruß, Linkat
Zuletzt geändert von
Linkat am Do 28. Jul 2011, 13:22, insgesamt 1-mal geändert.
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
u-boot
Beiträge: 308 Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..
Beitrag
von u-boot » Mi 27. Jul 2011, 18:37
Code: Alles auswählen
@Button.OnClick:=@SetzeColor; // <-- hier ist der Fehler
Code: Alles auswählen
Button.OnClick:=@SetzeColor; // <-- gibts so auch noch nen Fehler ?
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
Linkat
Lazarusforum e. V.
Beiträge: 560 Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22; Lazarus 4.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart
Beitrag
von Linkat » Mi 27. Jul 2011, 18:56
Hallo u-boot,
Code: Alles auswählen
Button.OnClick:=@SetzeColor; // <-- gibts so auch noch nen Fehler ?
ging auch nicht.
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
u-boot
Beiträge: 308 Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..
Beitrag
von u-boot » Mi 27. Jul 2011, 20:48
Die procedure in TForm reinpacken (wie es wohl schon mal war?) dann gehts.
Code: Alles auswählen
TForm1 = class(TForm)
BitBtn1:TBitBtn;
Button1:TButton;
procedure Button1Click(Sender:TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure SetzeColor(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
// ... einiges dazwischen
procedure TForm1.SetzeColor(Sender:TObject);
begin
Form1.Color:=Form1.Color+1000;
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
Form:=TForm.Create(self);
Form.Top:=100;
Form.Left:=100;
Form.Width:=400;
Form.Height:=300;
Form.Visible:=true;
Button:=TButton.create(Form);
Button.parent:=Form;
Button.Top:=Form.Height-30;
Button.Left:=10;
Button.Anchors:=[akLeft,akBottom];
Button.Width:=90;
Button.caption:='S&tart Farbe';
Button.OnClick:=@SetzeColor;
BitBtn:=TBitBtn.Create(Form1);
BitBtn.parent:=Form;
BitBtn.Top:=Form.Height-30;
BitBtn.Left:=Form.Width-80;
BitBtn.Height:=25;
BitBtn.Anchors:=[akRight,akBottom];
BitBtn.Kind:=bkClose;
BitBtn.Caption:='&Schließen';
end;
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
Linkat
Lazarusforum e. V.
Beiträge: 560 Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22; Lazarus 4.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart
Beitrag
von Linkat » Do 28. Jul 2011, 12:01
Leider ist es unerheblich, ob ich den procedure Kopf in die Class hineinschreibe. Gleiche Fehlermeldung.
Wer kann noch helfen?
Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS
Displaced
Beiträge: 83 Registriert: So 12. Jul 2009, 10:08
Beitrag
von Displaced » Do 28. Jul 2011, 12:53
Nein es ist nicht unerheblich..
In die Klasse rein und die Procedur muss so aussehen:
Code: Alles auswählen
procedure TForm1.SetzeColor(Sender:TObject);
begin
Form1.Color:=Form1.Color+1000;
end;
Und die Zuordnung geht dann auch
Ich habs getestet! Es funktioniert genau so.
(PS Irgendwie hab ich was überssehen beim Vor Vor poster, es ist das selbe ^^' Aber wie gesagt ich habs grad getestet und es funktioniert einwandfrei.)
Linkat
Lazarusforum e. V.
Beiträge: 560 Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22; Lazarus 4.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart
Beitrag
von Linkat » Do 28. Jul 2011, 13:26
Hallo Displaced und u-boot,
vielen Dank für die Hilfe.
Die richtigen Hinweise sind:
und
unter private oder public einsetzen.
Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS