Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Imena svih kontrola na formi

[es] :: Pascal / Delphi / Kylix :: Imena svih kontrola na formi

[ Pregleda: 1786 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Imena svih kontrola na formi13.12.2010. u 09:39 - pre 161 meseci
Trebaju mi: imena i caption (ako ga ima ta kontrola) za sve kontrole koje se nalaze na nekoj formi.
Napravio sam to, ali mislim da bi trebalo moći jednostavnije...
Koristim npr proceduru:
Code:

procedure TForm1.GetKontrole;
var i: integer;
begin
    m.Lines.Clear;
    for i := 0 to Form1.ControlCount - 1 do begin
       if form1.Controls[i].ClassNameIs('tPanel') then
          GetZaPanel(TPanel(form1.Controls[i]));
    end;
end;

procedure TForm1.GetZaPanel(Panel: TPanel);
var i: integer;
begin
   m.Lines.Append(Panel.Name + ' // ' + Panel.Caption)
   for i := 0 to Panel.ControlCount- 1 do begin
      if Panel.Controls[i].ClassNameIs('tPanel') then GetZaPanel(TPanel(Panel.Controls[i]));
   end;
end;


na ovaj način moram raditi za svaku vrstu kontrola zasebnu proceduru.
Mora postojati jednostavniji (krači) način...

Mala nadopuna:
kako otkriti da li je na formi TMainMenu ? Nemože se dobiti s
Code:

if Form.Controls[i] is tMainMenu then ...




[Ovu poruku je menjao franjo_tahi dana 13.12.2010. u 14:38 GMT+1]
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Imena svih kontrola na formi13.12.2010. u 14:25 - pre 161 meseci
> na ovaj način moram raditi za svaku vrstu kontrola zasebnu proceduru. Mora postojati jednostavniji (krači) način...

Ovde je primer za setovanje teksta, možeš lako prepraviti za uzimanje.

Code:

procedure TLangResources.ApplyLang(AComp: TComponent);
var
  i: Integer;
  Temp: WideString;
  PropInfo: PPropInfo;

  procedure ProcessMenu(AItem: TMenuItem);
  var
    i: Integer;
  begin
    for i := 0 to AItem.Count - 1 do
    begin
      ProcessMenu(AItem[i]);
      ApplyLang(AItem[i]);
    end;
  end;

begin
  if AComp is TWinControl then
  begin
    for i := 0 to TWinControl(AComp).ControlCount - 1 do
      ApplyLang(TWinControl(AComp).Controls[i]);

    if (AComp is TCustomForm) and Assigned(TCustomForm(AComp).Menu) then
      ProcessMenu(TCustomForm(AComp).Menu.Items);
  end;

  if AComp.Tag <> 0 then
  begin
    Temp := FRes.Values[IntToStr(AComp.Tag)];
    if Temp <> '' then
    begin
      PropInfo := GetPropInfo(AComp, 'Caption');
      if PropInfo = nil then
        PropInfo := GetPropInfo(AComp, 'Text');

      if PropInfo <> nil then
        SetWideStrProp(AComp, PropInfo, Temp);
    end;
  end;
end;

 
Odgovor na temu

salaczr

Član broj: 160654
Poruke: 103
*.dynamic.isp.telekom.rs.



+5 Profil

icon Re: Imena svih kontrola na formi13.12.2010. u 15:27 - pre 161 meseci
kako otkriti da li je na formi TMainMenu ? Nemože se dobiti s
Code:


if Form.Controls[i] is tMainMenu then ...


Evo primera:

Code:

for i := 0 to Form1.ControlCount - 1 do begin
       if (Form1.Controls[i] is TPanel) then
         if ((Form1.Controls[i] as TPanel).Parent is TMainMenu) then
            ....


pozdrav
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Imena svih kontrola na formi

[ Pregleda: 1786 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.