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