Dynamic form components creation in Lazarus/de

From Free Pascal wiki
Revision as of 22:19, 20 June 2011 by Sven (talk | contribs)
Jump to navigationJump to search

Zum einen kann man ja ganz einfach über den Objektinspektor einen Button erstellen sowie ereignisse registrieren. Das hat seine Vor- und Nachteile. Wenn ich nur eben einen Button brauch kann ich den lieber über den Objektinspektor auf meine Form ziehen und Fertig. Wenig Tipparbeit und schnell getan. Dann noch eben die gewüschten Eigenschaften ändern und fertig. Anders ist das wenn ich z.B. je nach umständen verschiedene Buttons an den unterschielichsten Stellen haben möchte. Dann wird meine Form sehr schnell unübersichtlich. Also brauchen wir eine alternative Lösung. Diese besteht darin die Buttons aber auch beliebige andere Objekte mit ein paar Zeilen Quellcode zu erstellen. Ein kleines Beispiel ist hier zu sehen:

unit Unit1; 
//Quellcode von carli | carli - lazarusforum.de
//Kommentare von Sven | Bauer321 - lazarusforum.de

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

 { TForm1 }
 
 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure ButtonClick(Sender: TObject);
 private
   { private declarations }
 public
   { public declarations }
 end; 
 
var
  Form1: TForm1; 

implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
var ed: TEdit; //eine Variable vom Typ Edit
    but: TButton; //eine Variable vom Typ Button
begin
  ed:=TEdit.Create(self); //Das Edit erstellen
  ed.Parent:=self; //Die aktuelle Form als Parent Form registrieren
  ed.top:=8; //Abstand oben für das Edit festlegen
  ed.Left:=10; //Abstand links für das Edit festlegen
  ed.Width:=ClientWidth-2*ed.left; //Breite für das Edit festlegen
  ed.text:='Bitte geben sie den Text ein'; //einen Text in das Edit-Feld schreiben
 
  but:=TButton.Create(self);
  but.parent:=self; //Die aktuelle Form als Parent Form registrieren
  but.top:=ed.Top+ed.Height; //Abstand oben für das Button festlegen
  but.left:=ed.Left; //Abstand links für das Button festlegen
  but.Caption:='Klickmich'; //Caption für den Button festlegen
  but.OnClick:=@ButtonClick; //event Hinzufügen, in diesem Fall soll wenn das OnClick Ereignis ausgelöst wird die Prozedur ButtonClick augerufen werden
end;

//Prozedur "ButtonClick", die durch den Button, welcher unter der Variable "but" definiert ist augerufen wird
procedure TForm1.ButtonClick(Sender: TObject);
begin
  showmessage('Hallo Welt');
end;

end.

Wie man sieht wird dort ein Button unter der Variable "but" und ein Edit unter der Variable "ed" erstellt. Wenn wir jetzt auf diese Objekte zugreifen wollen müssen wir einfach nur die Variable "but" bzw. "ed" nutzen.

Dieser Artickel ist noch in Arbeit.... --Sven 22:00, 20 June 2011 (CEST)