Szybka zmiana właściwości

0

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.

0

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

0

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?

0

Panel odpada bo leżą na komponencie Timage.

0

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.

0

Niestety ale ta metoda odpada. Inne też informatyka ma swoje granice to jest niewykonalne.

Wszystko się da :) Ale dlaczego odpada?

0

OT: Jeśli coś jest niewykonalne, to znaczy, że po prostu nie umiemy tego zrobić. I ktos tu właśnie nie umie...

0

Gdzieś widziałem coś takiego:
tprograssbar PB1 ... PB100.visible= false;
albo coś podobnego.

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

0

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

0

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

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