Theozh hat geschrieben:hmm, wie könnte ich es dann machen?
Etwas vereinfacht: stell Dir z.B. Taschenrechnertasten oder eine Tastatur vor. Diese möchte ich auf verschiedenen Forms per Programm und nicht von Hand erzeugen. Letzteres wäre bei Änderungen von Position, Anordnung, Schriftgröße, usw. sehr aufwändig.
Was gibt es Deiner Meinung nach für andere Möglichkeiten?
Dann mach eine Klasse
TTaschenRechnerTastatur=class(TCustomControl)
Da drin arbeitest du alles ab.
Die Tastauren pappst du dann nur noch auf deine Forms.
EDIT: Habe dir mal ein simples Beispiel gemacht, wie man sowas einigermassen sauber lösen kann. TTaschenRechnerTastatur kann man auch in einer anderen Unit definieren.
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TTaschenRechnerTastatur }
TTaschenRechnerTastatur=class(TCustomControl)
private
procedure BtnClick(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
{ TForm1 }
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ private declarations }
Tast:TTaschenRechnerTastatur;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
Tast:=TTaschenRechnerTastatur.Create(self);
Tast.Parent:=Self;
Tast.Align:=alClient;
end;
{ TTaschenRechnerTastatur }
procedure TTaschenRechnerTastatur.BtnClick(Sender: TObject);
begin
ShowMessage((Sender as TButton).Caption);
end;
constructor TTaschenRechnerTastatur.Create(AOwner: TComponent);
var i:integer;
Btn:TButton;
begin
inherited;
for i:=0 to 9 do
begin
Btn:=TButton.Create(self);
Btn.Parent:=self;
Btn.Width:=Btn.Height;
Btn.Left:=i*Btn.Width;
Btn.Caption:=Inttostr(i);
Btn.OnClick:=@BtnClick;
end;
end;
destructor TTaschenRechnerTastatur.Destroy;
begin
inherited Destroy;
end;
end.