Automatyczne dodawanie komponentu do formy

0

Jak napisać komponent, który "automatycznie" dodawałby elementy do formy?

Chodzi o coś działającego jak TPageControl, który dodaje do formy TTabSheet. Interesuje mnie sam mechanizm dodawania do TForm odpowiedniego komponentu.

  TForm2 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
0

Chodzi Ci o dynamiczne tworzenie komponentów?

procedure TworzKomponent;
var 
  MojButton: TButton;  //Albo jakiś inny;
begin
  MojButton := MojButton.Create(Self);
  with MojButton do
    begin
      Top := 10;
      Left := 10;
      Caption := 'Moj Przycisk';
      //inne wartości.
    end;
end;
0
TolkWimasz napisał(a)

Jak napisać komponent, który "automatycznie" dodawałby elementy do formy?

Na pewno wiesz o co pytasz? Chcesz napisać komponent czy oprogramować inny w metodzie np. Click? Jeśli to drugie to poczytaj tu: http://4programmers.net/Delphi/Artykuły/Krótki_artykuł_o_PageControl.

TForm2 = class(TForm)
  PageControl1: TPageControl;
  TabSheet1: TTabSheet;

Nie twórz zakładki w ciele klasy formlarza, raczej w ciele metody, która tworzy ową zakładkę (tak jak napisał koleszko z wykorzystaniem komponentu TButton).

0

To co jest napisane w tym artykule jest banalne.

Mi chodzi o napisanie komponentu. W trakcie edycji wybieram z menu kontekstowego "Dodaj nowy element" i chciałbym aby ten element pojawił się jako kolejny komponent w TForm.

Podkreślam, że nie chodzi mi o tworzenie komponentów w trakcie pracy programu, ale o tworzenie ich w czasie edycji. Jako przykład podałem TPageControl. Bo ten element po kliknięciu na menu New Page dodaje do formy komponent TTabSheet. I coś takiego chcę uzyskać w moim komponencie.

Jak coś takiego oprogramować, aby na etapie tworzenia aplikacji móc dodawać własny element do formy, poprzez menu innego komponentu. Wiem jak napisać własny edytor właściwości itd..

ps. Proszę administratora o przeniesienie wątku do formu Delphi. Temat nie jest banalny.

0

Problem rozwiązany:

Trzeba użyć procedury Designer.CreateComponent w edytorze komponentu.

  TtwAppleAdvPanelEditor = class(TComponentEditor)
  public
    procedure ExecuteVerb(Index: Integer); override;
    function GetVerb(Index: Integer): string; override;
    function GetVerbCount: Integer; override;
  end;

.....

procedure TtwAppleAdvPanelEditor.ExecuteVerb(Index: Integer);
var
  inm : TtwAppleI;
begin
  inherited;
  case Index of
    0 :
      begin
        inm :=  TtwAppleI(Designer.CreateComponent(TtwAppleI,Component,16, 0, TtwAppleAdvPanel(Component).Width-32, 28))
      end;
  end;
end;
0

Teraz wszystko jasne. Nie napisałeś, że podczas projektowania interfejsu chcesz dodawać elementy. W każdym razie dobrze, że sobie poradziłeś. Pozdrawiam.

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