Witam, mam następujący problem. W jednej procedurze tworze dynamicznie obiekty typu TLabel i nadaje im nazwy : Prostokat1,Prostokat2 ... Prostokat10 oraz ustawiam Visible:=true . Do tego momętu wszystko jest ok (prostokąty wyświetlają się na formie), lecz gdy w innej procedurze chcę np. Prostokat1 ustawić na niewidoczny (Visible:=false) kompilator nie wykrywa mi nazwy tego obiektu. Jak rozwiązać ten problem zważywszy na to, że obie instrukcje muszą być w zupełnie innych procedurach (pierwsza należy do Form1, druga do innego watku).
0
Pomijając szczegóły kod wygląda mniej więcej tak:
procedure TForm1.level1;
{dynamiczne twoczenie obiektow - bloczkow}
var
i,n,z,j: integer;
begin
n:=8;
z:=10;
for j:=1 to 13 do
begin
for i:=1 to n do
with TLabel.Create(self) do
begin
Name:='Cegla'+IntToStr(j)+IntToStr(i);
Color:=clGreen;
Width:=40;
Height:=20;
Left:=z;
Top:=i*(Height);
Caption:='Cegla'+IntToStr(j)+IntToStr(i);
Font.Color:=clBlack;
Parent:=self;
Visible:=True;
end;
z:=z+50;
end;
end;
{tutaj reszta procedur}
procedure procedura2.Ruch; {Ruch - procedura nalezaca do watku Moj_Watek}
begin
with Form1 do
begin
if .... then
....
if .... then
....
if .... then
....
if .... then
....
if ... then // **kluczowa dla mnie sprawa nie wykrywa Cegla12 **
begin
Cegla12.Visible:=false;
end;
end;
end;
Jakieś pomysły ?

- Rejestracja:prawie 17 lat
- Ostatnio:około 3 lata
- Lokalizacja:Szczecin
- Postów:4191
0
A czy Cegla12
na pewno jest elementem klasy TForm1 zadeklarowanej w sekcji public
lub private
? Bo jeżeli tak to musi działać. Ewentualnie wklej jak i gdzie deklarujesz swoje zmienne. A i taką ilośc komponentów lepiej najlepiej przechowywać w Tablicy albo w TList albo w TObjectList.
0
Odpowiadając na twoje pytanie to Cegla12 nie jest elementem tej klasy, gdyż jest tworzona dynamicznie (jak widać w kodzie u góry), ale procedura, w której jest tworzona czyli level1 jest już elementem tej klasy. Na dole umieszczam deklarację klasy.
type
TForm1 = class(TForm)
{jakieś procedury, obiekty itp.}
private
{ Private declarations }
public
procedure level1; //procedura, w ktorej dynamicznie tworze komponenty typy Label
{ Public declarations }
end;
- Rejestracja:prawie 22 lata
- Ostatnio:6 dni
- Postów:192
0
No bez przesady Panie Programisto, skoro masz podane jak zmienić Caption to co za problem z inymi właściwościami:
procedure JakasProcedura;
var MyLabel: TLabel;
begin
MyLabel:= Form1.FindComponent('Ceglal12') as TLabel;
If MyLabel <> nil then
MyLabel.Visible:= False;
end;
edytowany 1x, ostatnio: zibicoder