Witam wszystkich kolegów.
Na formie mam 300 komponentów typy TProgressBar, o nazwach PB1 do PB300 czy jest możliwośc ukrycia poprzez visible:=false tylko komponentów od PB1 do PB100 bez odnoszenia się do każdego z osobna.
Pozdrawiam.
Jedno co mi przychodzi na myśl, to pętelka
for i:=1 to 100 do
(Form1.FindComponent('PB'+inttostr(i)) as TProgressBar).Hide;
albo cus takiego
Szybciej zapewne będzie stworzyć je dynamicznie jako elemnty tablic i leciec pętlą po tablicy.
A próbowałeś położyć je na Panelu i chować Panel?
Panel odpada bo leżą na komponencie Timage.
for i:=1 to 100 do
(Form1.FindComponent('PB'+inttostr(i)) as TProgressBar).Hide;
Niestety ale ta metoda odpada. Inne też informatyka ma swoje granice to jest niewykonalne.
Niestety ale ta metoda odpada. Inne też informatyka ma swoje granice to jest niewykonalne.
Wszystko się da :) Ale dlaczego odpada?
OT: Jeśli coś jest niewykonalne, to znaczy, że po prostu nie umiemy tego zrobić. I ktos tu właśnie nie umie...
Gdzieś widziałem coś takiego:
tprograssbar PB1 ... PB100.visible= false;
albo coś podobnego.
var
i: integer
k: integer;
begin
for i:=0 to componentCount-1 do
begin
if (components[i] is TProgressBar) then
begin
k:=StrToInt(copy((components[i] as TProgressBar).Name, 3, length((components[i] as TProgressBar).Name-2)));
if k<=100 then (components[i] as TProgressBar).Visible:=false;
end;
end;
end;
Ot cała filozofia. Kod właśnie wymyśliłem, więc może być kilka błędów, aczkolwiek omówię go.
W pętli program sprawdza każdy komponent. Jeśli znajdzie ProgressBar, wtedy do zmiennej k kopiuje jego ostatnie znaki(nie znam na pamięć kolejności parametrów w copy). Kopiuje od 3 znaku aż do końca - czyli length(..)-2, bo 2 pierwsze znaki to "PB".
No i Od razu jest konwersja stringa na integer.
A potem zwykłe przyrównanie. Jeśli k jest tyle i tyle to wiadomo co.
Bardzo ciekawy kod ciekawe czy będzie działał. Jeśli <ort>NIE MA </ort>blędu do wiszę ci browar. Jak wrócę do domu to zaraz go wklepę.
Dzięki!!
Bardzo ciekawy kod ciekawe czy będzie działał.
A tworzenie dynamiczne jako elementy tablicy Ci nie działa? To byłoby IMHO najszybsze rozwiązanie (może z wyjątkiem Panela).
A z Panelem i Image możesz zrobić tak.
Połóż Image1 na Formie
Na nim Panel z pustym Caption i zBevelami na bvNone
Na Panel połóż Image2. Ustaw tak żeby leżał dokładnie w tym miejscu i był tego samego rozmiaru co Image1.
Na Image2 połóż ProgressBary
Zaraz po wypełnieniu rysunkiem Image1 daj
Image2.Picture.Assign(Image1.Picture);
(albo jak wolisz narysuj to samo na Image2 co na Image1)
A potem Panel.Visible:=co ci trzeba