Problem z wyswietlaniem listy

0

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!!

0

Nie widzę problemu..

  1. 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ć.

  2. Przygotować liste i obczaić pola rekordów - które mają być wstawiane w GroupBox - tylko Ty to wiesz.

  3. Pojechać po kolei po liście i dodawać.

0

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;
0

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!!!

0

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??

0
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?

0

Dzieki kAzek dokładnie o to mi chodziło. thx!!

0

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!!

0
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;

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