Dynamiczne tworzenie komponentów + PageControl

0

Jak dynamicznie stworzyć komponent by pokazał się on na stronie w PageControl ?
Aktualne próby tworzą komponent ale nie widać go w zakładce.

By nie było zamieszania edytowałem nazwę tematu. Posty poniżej dotyczą trochę innego problemu.

0

Pewnie jakaś kolizja z MainFrm.Caption?
Zmień nazwę tablicy Caption na inną (np Captions) i z głowy.

0

ok teraz nowy problem :(
mam nowa klase

type
  TStruct = class(TMainFrm)
  public
    procedure Make(Which : byte);
    procedure Delete(Which : byte);
end;

procedura make wyglada tak jak poprzednio CreateStruct ale nie wyswietlaja sie Labele. Teoretycznie wartosci sa nadane (sprawdzane debuggerem) ale widocznie trzeba wstawic odpowiedni paramatetr parent. Tylko jaki ?

zapomnialem dodac ze pracuje na TPageControl

moze caly kod:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls,ExtCtrls, ComCtrls;

type
  TMainFrm = class(TForm)
    Who: TLabel;
    Angel: TSpeedButton;
    Demon: TSpeedButton;
    Undead: TSpeedButton;
    Human: TSpeedButton;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    PageControl: TPageControl;
    Page1: TTabSheet;
    Page2: TTabSheet;
    Page3: TTabSheet;
    Page4: TTabSheet;
    procedure AngelClick(Sender: TObject);
    procedure Load(Sender : TObject);
    procedure Dalej(Sender : TObject);
    procedure Check(Sender : TObject);
    procedure FormShow(Sender: TObject);
    procedure Page1Show(Sender: TObject);
  private

  public
    { Public declarations }
  end;

type
  TStruct = class(TMainFrm)
  public
    procedure Make(Which : byte);
    procedure Delete(Which : byte);
end;

type THero = packed record
Typ : byte;
Hp  : integer;
Att : integer;
AA  : integer;
Ini : integer;
Def : integer;
end;

var
  MainFrm: TMainFrm;
  Struct : TStruct;
  Hero : THero;
  FilesCount : integer;
  Edit:array [0..4] of TLabeledEdit;
const
Captions : array [0..4] of string =
(
'Życie',
'Atak',
'Atak przeciwlotniczy',
'Obrona',
'Inicjatywa'
);
implementation

{$R *.dfm}

procedure TStruct.Make(Which : byte);
var
i:shortint;
begin//1
case Which of
0:
  begin//2
     for i:=0 to 4 do
        begin//3
          Edit[i] := TEdit.Create(self);
          Edit[i].Parent := MainFrm;
          if (i=1)or(i=3) then Edit[i].Left := 180 else Edit[i].Left := 40;
          if (i=1)or(i=3) then Edit[i].Top := 180 + (30*(i-1)) else Edit[i].Top := 180 + (30*i);
          Edit[i].Text := '100';
          Edit[i].LabeledEdit.Caption := captions[i];
          Edit[i].Name := 'E'+IntToStr(i+1);
          Edit[i].OnChange := MainFrm.Check;
        end;//3
  end;//2
1:
  begin//2
  ///
  end;//2
end;//case end
end;//1

//...
//Pozostale procedury
//...

initialization
Struct := TStruct.Create(MainFrm);

finalization
Struct.Free;
end.
0

Może zamiast wsadzać procedurę w initialization powinieneś użyć OnCreate?

0

Spróbuj - 100% na procesorze ale program sie nie odpala ? Dlaczego ?
poza tym jaka procedura ? To jest inicjalizacja klasy.

0

Dobra - poszedlem tropem Entka i w OnShow działa. Może tylko ktoś powiedzieć dlaczego Edity sie pojawiają a reszta nie ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1