Na początku zaznacze że jestem początkującym uzytkownikiem delpji!! Mam taki problem chce wyswietli liste dynamiczną z rekordami w formir takiej aby każdy record byl wyświetlnany na nowym GroupBox np cos w stylu dodaj/usuń programy w windows!
Nie mam za bardzo pojecia jak to zrobic chce aby to bylo w ScrollBoxie i <ort>pokoleju </ort>od góry w dół wyświetlaly sie griupboxy a w nich dane z rekordu az do końca listy jak to zrobic please help!!
Nie widzę problemu..
-
Zapoznać się z metodami / właściwościami GroupBox`a tak aby jasne było jak dodawać elementy i je wyświetlać tak jak mają wyglądać.
-
Przygotować liste i obczaić pola rekordów - które mają być wstawiane w GroupBox - tylko Ty to wiesz.
-
Pojechać po kolei po liście i dodawać.
np tak jak Cie dobrze rozumie
yyy := 10;
for i:=1 to 10 do
with TGroupBox.Create( ScrollBox1 ) do
begin
Parent := ScrollBox1;
Left := 10;
Width := 100;
Height := 50;
Top := yyy+50*i;
end;
chodzi o to aby pętla
head glowa listy
while Head <> nil do
begin
i tutaj żeby tworzył sie groupbox w scrollbox
i potem następny pod nim;
a w group box jakieś labele ale z tym juz sobie poradze
end;
Chodzi mi dokładniej o to że nie wiem jak napisac kodzik który bedzie tworzył te groupboxy jeden pod drugin!! Please HELP!!!
Dobra chyba za dobrze ocenilem swoje miozliwości! Ten kodzik działa idealnie wlaśnie mi o to chodziło tylko teraz mam problem zeby na GroupBoxach umieszczeć labele
bo analogicznie do tego jakos chyba nie bardzo mi wychodz bo kiedy wezme TLabel.Create() co dac w nawiasie żeby ten label byl na tym utworzonym Groupbox-ie??
SeeBeeK napisał(a)
Dobra chyba za dobrze ocenilem swoje miozliwości! Ten kodzik działa idealnie wlaśnie mi o to chodziło tylko teraz mam problem zeby na GroupBoxach umieszczeć labele
bo analogicznie do tego jakos chyba nie bardzo mi wychodz bo kiedy wezme TLabel.Create() co dac w nawiasie żeby ten label byl na tym utworzonym Groupbox-ie??
Masz maly przykładzik:
var
i: integer;
fGroupBox: TGroupBox;
fLabel: TLabel;
begin
for i:=0 to 9 do
with TGroupBox.Create(ScrollBox1) do
begin
Parent := ScrollBox1;
//Jak chcesz to mozesz nadawac kontrolka nazwe
Name:= 'GroupBox' + IntToStr(i);
Caption:= 'GroupBox' + IntToStr(i);
Left := 10;
Width := 100;
Height := 50;
Top := 10 {Top pierwszego} + (i * Height) + (i * 10 {odstep});
end;
//Label separator aby ostani GroupBox nie byl na samym dole;
with TLabel.Create(ScrollBox1)do
begin
Parent:= ScrollBox1;
AutoSize:= False;
Caption:= '';
Left:= 10;
Width:= 100;
Height:= 5;
Top:= 10 + (i * 50) + (i * 10);
end;
//Labele
for i:=0 to ScrollBox1.ControlCount - 1 do
begin
if ScrollBox1.Controls[i] is TGroupBox then
with TLabel.Create(ScrollBox1.Controls[i]) do
begin
//Jak chcesz dodac do GroupBoxa wiecej niz 1 label to musisz
//zrobic druga petle
Parent:= TWinControl(ScrollBox1.Controls[i]);
//Mozesz też nadac nazwy labelom tak jak zrobilem to przy GroupBoxach
Name:= 'Label' + IntTostr(i);
Left:= 10;
Top:= 11;
Width:= 80;
Height:= 18;
Caption:= 'Label' + IntToStr(i);
end;
end;
//Jezeli nie nadasz nazw kontrolka to tak musisz odwolywac sie do nich
//index 0 ma Label separator
TLabel(TWinControl(ScrollBox1.Controls[1]).Controls[0]).Caption:= 'Ale ma kota';
//albo równoważny zapis
with TWinControl(ScrollBox1.Controls[1]) do
TLabel(Controls[0]).Caption:= 'To jest ' + Controls[0].Name;
//Mozesz też korzystac ze zmiennych fLabel i fGroupBox
fGroupBox:= TGroupBox(ScrollBox1.Controls[2]);
fLabel:= TLabel(fGroupBox.Controls[0]);
fLabel.Caption:= 'To jest ' + fLabel.Name;
//A jezeli nadasz nazwy tak jak ja to zrobilem możesz
fGroupBox:= TGroupBox(ScrollBox1.FindComponent('GroupBox2'));
if fGroupBox <> nil then //Tak sprawdzasz czy komponent istnieje;
//i analogicznie label
fLabel:= TLabel(fGroupBox.FindComponent('Label3'));
if fLabel <> nil then
fLabel.Caption:= 'To jest ' + fLabel.Name;
Teraz chyba już wszystko jasne?
Dzieki kAzek dokładnie o to mi chodziło. thx!!
A jeszcze jedno takie pytanko jak zrobic takie cos zeby po najechaniu myszka i kluknieciu na GroupBox wykonywala sie jakas procedura zdeklarowana gdzie indziej!
I jak wyczyscic teraz scrollBoxa zeby zwolnic elementy na nim i zeby bylo mozna wyswietlic inna liset na tym scroolbox-ie!!
SeeBeeK napisał(a)
A jeszcze jedno takie pytanko jak zrobic takie cos zeby po najechaniu myszka i kluknieciu na GroupBox wykonywala sie jakas procedura zdeklarowana gdzie indziej!
W sekcji private klasy zdeklaruj 2 procedury:
private
{ Private declarations }
procedure LabelOnClick(Sender: TObject);
procedure GroupBoxClick(Sender: TObject);
w sekcji implementation zaimplementuj je:
procedure TForm1.LabelOnClick(Sender: TObject);
begin
GroupBoxClick(TLabel(Sender).Parent); //Wyslij zdarzenie o klikniecu na GroupBoxie
end;
procedure TForm1.GroupBoxClick(Sender: TObject);
begin
case TGroupBox(Sender).Tag of //Który GroupBox?
0: ShowMessage('GroupBox0'); //Zamiast ShowMessage oczywiscie wywolujesz odpowiednie funkcje
1: ShowMessage('GroupBox1');
2: ShowMessage('GroupBox2');
else //Nie chce mi sie dalej pisac...
ShowMessage(TGroupBox(Sender).Name);
end;
Oczywiscie zamiast TForm1 wpisz nazwę klasy twojego formularza.
Teraz w wstaw petli tworzacej GroupBoxy:
Tag:= i; //Wykorzystaj to aby łatwo zidentyfikować GroupBox na który kliknięto
OnClick:= GroupBoxClick; //Przypisz zdarzenie
i petli tworzacej labele:
OnClick:= LabelOnClick; //Przypisz zdarzenie
Do labeli też trzeba było przypisac zdarzenie, bo bez tego po kliknięciu na lerzący na GroupBoxie label nic sie nie działo. Po kliknieciu na label wywoływane jest zdarzenie kliknięcia na odpowiednim GroupBoxie.
SeeBeeK napisał(a)
I jak wyczyscic teraz scrollBoxa zeby zwolnic elementy na nim i zeby bylo mozna wyswietlic inna liset na tym scroolbox-ie!!
while ScrollBox1.ControlCount > 0 do
ScrollBox1.Controls[0].Free;