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.
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.
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.
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 :)
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.