liczba wyszukujaca nazwy klas komponetow

0

Napisałem fukcje ktora jest mi potrzeba jezeli dane obiekt zostal utworzony (funkcja jest mi potrzebna do artkulu Ekran powitalny - Splash Screen)

Jak przerobic dana funkcje zebym nie musial wpisywac L tylko zeby funkcja pobierala ClassName programowo wszystkich komponetow znajdujacych sie na wszystkich Formach. zeby naprzyklad bylo mozna wylaczyc Result dla danej klasy (jezeli nie koplikowalo by to bardzo kodu)

function TFrmMain.AConstruction(L: Integer; Slep: Integer): String;
var
I : Integer;
S : String;
C : TComponentClass;
begin
case L of {zebym tego nie bylo tylko sam program wyszukiwal wszystkie Classy komponetow}
-1: Exit;
1: C := TBitBtn;
2: C := TLabel;
3: C := TMenuItem;
4: C := TButton;
5: C := TImage;
6: C := TEdit;
7: C := TPageControl;
end;
//jak zrobic zeby wpisane klasy wpisane do funkcji przez uzytkownika Tbitbtn, TEdit, TLabel (funkcja nie wyswietli dla nich Result)

for I:=0 to ComponentCount - 1 do
  if Components[I] is C then
  begin
    S := C.ClassName;
    S[1] := ' ';
    Components[I].AfterConstruction;
    Result := ('Tworzę obiekty: ' + S);
    Sleep(Slep);
  end;

end;

0

O to chodzi?

    for I:=0 to ComponentCount - 1 do
    begin
        S := Components[i].ClassName;
        if S <> ('Tbitbtn' or 'TEdit' or 'TLabel') then 
         begin
           S[1] := ' ';
           Components[I].AfterConstruction;
           Result := ('Tworzę obiekty: ' + S);
           Sleep(Slep);
        end;{if S <>(... or ... or ...) then }
      end;  { for I:=0 to ComponentCount - 1 do}
0
TyDraniu napisał(a)

O to chodzi?

    for I:=0 to ComponentCount - 1 do
    begin
        S := Components[i].ClassName;
        if S <> ('Tbitbtn' or 'TEdit' or 'TLabel') then 
         begin
           S[1] := ' ';
           Components[I].AfterConstruction;
           Result := ('Tworzę obiekty: ' + S);
           Sleep(Slep);
        end;{if S <>(... or ... or ...) then }
      end;  { for I:=0 to ComponentCount - 1 do}

Funkcje przerobilem na procedure i teraz wyglada wszystko tak:

public
{ Public declarations }
procedure AConstruction(Slep: Integer);
end;

var
FScreen: TFScreen;

implementation

uses uMain;

{$R *.dfm}

procedure FScreen.AConstruction(Slep: Integer);
var
I : Integer;
S : String;
begin
for I:=0 to ComponentCount - 1 do //znajdz wszystkie komponenty
begin
S := Components[i].ClassName; //przypisz do S nazwe klasy komponetow
if S <> ('TJvXPProgressBar') then //jezeli S jest rozne od 'Klasa Komponetu' wtedy...
begin
S[1] := ' '; //usun pierwsza pozycje stringu (jest to literka "T")
Components[I].AfterConstruction; //Po stworzeniu
if S <> '' then //jezeli S nie jest pusty
gLoading.Position := gLoading.Position + 20; // dodaj do paska 20 jednostek (nie wiem jak zrobic zeby obliczalo ile jest klass name (trzeba odjac te przez nas ominiete [100/Ilosc Klas])
lInfo.Caption := S; //przypisz do lInfo S
Update; // konieczne żeby odswieżyć zawartość labela

       Sleep(Slep);//Uspij (potrzebne gdyz dzialanie bylo by nie zauwazalne)
     end;
  end;

end;

Jest teraz problem gdyz Klassy komponetow sa wczytywane tylko z FScreen a z pozostalych form nie stety nie. <font size="2">Jak zrobic zeby byly wczytywane z pozostalych Form?</span>

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