Hallo Forum,
habe ein einfaches Beispiel versucht. Und - wie zu erwarten - hänge ich schon.
Ich habe einen Frame erstellt (eine TGroupBox als Rand drumrum, TLabels, TEdits und ein TStringGrid):
Code: Alles auswählen
unit PadResultsFrm;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, StdCtrls, Grids;
type
{ TPadResultsFrame }
TPadResultsFrame = class(TFrame)
PadResultsGrpBx: TGroupBox;
Label4: TLabel;
MaxPadPressureEdt: TEdit;
Label2: TLabel;
Label3: TLabel;
PadAreaEdt: TEdit;
Label1: TLabel;
PadResultsStrgGrd: TStringGrid;
private
public
// constructor Create(AOwner: TComponent); override;
end;
implementation
{$R *.lfm}
//constructor TPadResultsFrame.Create(AOwner: TComponent);
//begin
// inherited;
//end;
end.
Per Hand im FormEditor ließ sich dieses auch auf dem MainForm platzieren (auch mehrfach!). Aber ich habe schon gemerkt, dass das eine hakelige Angelegenheit wird. Also den Rat befolgt, den Frame im Code zu erstellen und zu platzieren.
Code: Alles auswählen
unit TestFrames_MainForm;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Grids,
PadResultsFrm;
type
{ TTestFramesMainForm }
TTestFramesMainForm = class(TForm)
Button1: TButton;
Label4: TLabel;
MaxPadPressureEdt: TEdit;
Label3: TLabel;
PadAreaEdt: TEdit;
Label1: TLabel;
Label2: TLabel;
OriginalGrpBx: TGroupBox;
OkBtn: TButton;
DataPadsStrgGrd: TStringGrid;
procedure CloseBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
TopPadResultsFrm, BottomPadResultsFrm, RadialPadResultsFrm: TPadResultsFrame;
end;
var
TestFramesMainForm: TTestFramesMainForm;
implementation
{$R *.lfm}
{ TTestFramesMainForm }
procedure TTestFramesMainForm.CloseBtnClick(Sender: TObject);
begin
Close;
end;
procedure TTestFramesMainForm.FormCreate(Sender: TObject);
begin
TopPadResultsFrm := TPadResultsFrame.Create(self);
TopPadResultsFrm.Parent := self;
TopPadResultsFrm.PadResultsGrpBx.Caption:= 'Top Pads';
TopPadResultsFrm.Left := 400;
TopPadResultsFrm.Top := 20;
//BottomPadResultsFrm := TPadResultsFrame.Create(self);
//BottomPadResultsFrm.Parent := self;
//BottomPadResultsFrm.PadResultsGrpBx.Caption:= 'Bottom Pads';
//BottomPadResultsFrm.Left := 700;
//BottomPadResultsFrm.Top := 20;
//
//RadialPadResultsFrm := TPadResultsFrame.Create(self);
//RadialPadResultsFrm.Parent := self;
//RadialPadResultsFrm.PadResultsGrpBx.Caption:= 'Radial Pads';
//RadialPadResultsFrm.Left := 1000;
//RadialPadResultsFrm.Top := 20;
end;
end.
So, wie oben gezeigt, funktioniert es: ein Frame wird erzeugt.
Versuche ich aber, einen zweiten und dritten daneben zu platzieren, bekomme ich die Meldung, dass
PadResultsFrame bereits existiert.
Irgendetwas habe ich an der Stelle nicht bzw. falsch verstanden. Von anderen Komponenten kann ich ja auch mehrere erzeugen. Hier sollen es 3 werden, die jeweils über die zugewiesenen Variablen angesprochen werden sollen, um die Labels, Edits und StringGrid zu setzen. (Im eigentlichen Programm sollen die 3 Einheiten auf einem TPageControl-Tab liegen.
Ist das so möglich? Bzw. wie wäre es möglich?
Ciao,
Photor