Tablica komponentow

0

Witam wszystkich !
Zwracam sie z prosba o pomoc do wszystkich, ktorzy moga mi jej udzielic. Jestem na poczatku drogi w Delphi (mam darmowa wersje Delphi 5 Standard opublikowana w 100-nym numerze PC Worlda). Probowalem szukac interesujacego mnie tematu na forum, ale pomimo roznych sformulowan nie udalo mi sie nic znalezc. Jesli taki temat rzeczywiscie istnieje, a ja nie umialem go znalezc - przepraszam.
A moje pytanie jest takie: w jaki sposob z wiekszej ilosci komponentow np. TEdit zrobic tablice, aby moc sie odwolywac do poszczegolnych komponentow poprzez index ? Np. mam 30 pol edycyjnych TEdit i chcialbym w pewnym momencie uczynic dostepnymi (widocznymi) tylko pierwsze 5. Dla mnie poczatkujacego zatrzymalo to w probie stworzenia jakiego swojego programiku, ale mam nadzieje, ze sa fachowcy, dla ktorych to nie jest zaden problem.
Z gory dziekuje za pomoc i pozdrawiam wszystkich.

WieWal

0

No zrób se po prostu tablicę obiektów. Robisz to dynamicznie:
(zakładam, że wiesz, jak robić tablice)

var
  i: integer;
begin
  for i:=0 to length(tablica)-1 do
  begin
    tablica[i]:=TEdit.Create(Self);
    //teraz ustawiasz inne właściwości: left, top, parent...
  end;
end;

Pamiętaj, że podczas zamykania programu, musisz:

  for i:=0 to length(tablica)-1 do tablica[i].Free;
  tablica:=nil; //ta linia tylko jeśli to tablica dynamiczna  
0

nie wiem jak to jest w wersji D5 Standard, ale w module Classes powinien znajdować się obiekt typu TList, który chyba najlepiej się nadaje to tego typu rzeczy.
Możesz też sam utworzyć taką listę (jako tablicę wskaźników), i w jakieś pętli na początku programu przypisać Edity do tablicy. Pomocna może być tu funkcja FindComponent

0

Dziekuje za szybka odpowiedz. "Stworzylem" cos takiego, ale po uruchomieniu obiekty TEdit nie sa wyswietlanie. Czegos pewnie jeszcze brakuje, ale ja nie mam pomyslu:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
btnUtworz: TButton;
btnKoniec: TButton;
procedure btnUtworzClick(Sender: TObject);
procedure btnKoniecClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
tablica : array[1..3] of TEdit; //TObject;

implementation

{$R *.DFM}

{==================================================}
procedure TForm1.btnUtworzClick(Sender: TObject);
var i: integer;
begin
for i:=1 to 3 do begin
tablica[i]:=TEdit.Create(Self);
// tablica[i].Create.TEdit;
Tablica[i].Left:=20;
Tablica[i].Top:=20+i*30;
Tablica[i].Visible:=true;
Tablica[i].Enabled:=true;
Tablica[i].Show;
//teraz ustawiasz inne właściwości: left, top, parent...
end;
end;
{==================================================}
procedure TForm1.btnKoniecClick(Sender: TObject);
var i: integer;
begin
for i:=1 to 3 do tablica[i].Free;

  • tablica:=nil; *ta linia tylko jeśli to tablica dynamiczna
    Close;
    end;
    {==================================================}

end.

Pozdrawiam,
Wiwa

0

A nie prościej tak (nie sprawdzałem czy w 5 to działa :] ):

//zmiana właściwości pierwszych pięciu komponentów
for i:=1 to 5 do
TEdit(Form1.FindComponent('Edit' + InttoStr(i))).Visible := true;

Przy założeniu że nazwy komponentów to edit1, edit2 ... editx

0

Nie określiłeś właściwości Parent dla kontrolek - przeczytaj w helpie do czego dokładnie służy ta właściwość
(poniżej fragment z helpa do BCB:
"Use the Parent property to get or set the parent of this control. The parent of a control is the control that contains the control. For example, if an application includes three radio buttons in a group box, the group box is the parent of the three radio buttons, and the radio buttons are the child controls of the group box.

To serve as a parent, a control must be an instance of a descendent of TWinControl.

When creating a new control at runtime, assign a Parent property value for the new control. Usually, this is a form, panel, group box, or some control that is designed to contain another. Changing the parent of a control moves the control onscreen so that it is displayed within the new parent. When the parent control moves, the child moves with the parent"
)

0

Dziękuję wszystkim za pomoc. Najlepsze są jednak sposoby najprostsze. W moim przypadku zdało egzamin rozwiązanie z FindComponent.

WieWal

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