Jak wstawiać grupę komponentów wg szablonu na Formę?

0

Chciałbym się dowiedzieć jakie są możliwości wstawiania grupy komponentów na TForm w Delphi. Pozwólcie, że rozwinę o co mi chodzi.
Forma, czyli to puste okno, na które wstawia się komponenty typu TButton itd ma mieć wstawioną grupę komponentów kilkukrotnie. Czyli wyobraźcie sobie, że wstawiam na okno Formy GroupBox, a do tego groupboxa wrzucam TLabel i np. TImage. Tak wypełnionego dwoma komponentami GroupBoxa chcę wstawić np. dziesięć razy na okno Formy.
W Jaki sposób można tego dokonać? Jeśli ktoś z was ogarniał takie rzeczy, to proszę co nieco napisać. Dziękuję za poświęcony mi czas. Pozdrawiam.

0

Zaznaczasz GroupBox'a i używasz metody Copy'ego i Paste'a (pamiętaj żeby przed wklejeniem zaznaczony był komponent na którym ma być wklejony nowy czyli w twoim przypadku formularz). Chyba, że chcesz tworzyć większą ilość takich grup komponentów w czasie działania programu to poszukaj informacji o dynamicznym tworzeniu komponentów.

0

właśnie wolałbym dynamicznie je tworzyć wg szablonu jednego, bo chcę coś powielić powiedzmy 50 razy.
A swoją drogą, czy wiesz może jak sprawdzić nazwę komponentu TImage w danym GroupBoxie w takiej sytacji, że GroupBox miałby w sobie jeden TImage, a tych groupboxów byłoby na Formie powiedzmy 50 i załóżmy, że klikam lewym przyciskiem myszy na losowym groupboxie (nie tykając obrazka) i chcę zmienić w nim TImage na inny. Przypuszczam, że jeśli kliknę LPM na grouboxie losowym, to będę mógł od razu odczytać nazwę tego groupboxa konkretnego i operować na jego właściwościach, ale ciekawi mnie, czy znając tego groupboxa, mogę poznać TImage znajdujący się w nim i do niego się zwracać. Może wystarczy jedna linijka kodu jakaś? Jeśli wiesz, to proszę napisz.

2

Do tego celu służy TFrame na nim układasz te komponenty a później tworzysz sobie potrzebna ilość tych frame.

A co do tego klikania to musisz poszukać tego Image jeżeli nie znasz nazwy to tak:

var
  i: Integer;
  img: TImage;
begin
  for i:= 0 to TGroupBox(Sender).ComponentCount - 1 do
  begin
    if TGroupBox(Sender).Components[i] is TImage then
    begin
      img:= TGroupBox(Sender).Components[i]; //tu masz image
      break;
    end;
  end;
end;

EDIT Jeżeli dobrze zrozumiałem co masz na myśli a użyjesz Frame nie będziesz musiał się bawić w takie dziwolągi :)

0

Możesz podpiąć jedno zdarzenie pod wiele komponentów czyli np. GroupBox'ów - wyszukiwać możesz je poprzez np. FindComponent (temat bardzo często poruszany). Najlepiej jest stworzyć sobie klasę, która odpowiadałaby za dynamiczne tworzenie, odszukiwanie, zmienianie i usuwanie kontrolek. Po stworzeniu komponentu/grupy komponentów dynamicznie zapisujesz ich referencje do takiej listy i dalsze korzystanie z niej staje się przyjemne i odporne na błędy np. Jeśli postanowisz zmienić nazwę komponentu lub dodasz GroupBox'a, który miałby nie uczestniczyć w zmianie.

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