Jak sprawdzić czy dany komponent ma pole np Caption?

0

Potrzebne mi to do plików językowych a taki przykład nie wytstarcza mi
for i :=0 to ComponentCount -1 do
if Components[i] is TLabel then
begin
TLabel(Components[i]).Caption :='text';

poza tym wybierane są tylko komponenty znajdujące się na głównej formie (jeśli jest np na formie dodatkowo panel i nanim komponenty to ten sposob juz nie dziala) a mi chodzi by były wybrane wszystkie komonenty znajdujące się w projekcie z secją caption

poprawka jednak są wyubierane wszystkie komponenty

czyli chodzi mi teraz tylko o sprawdzenie czy dany komponent ma pole caption jak to zrobic?

0

moze tak....?

procedure TForm1.FormCreate(Sender: TObject);
var I:Integer;
begin
For I:=0 to Form1.ComponentCount-1 do
        begin
        If TLabel(Form1.Components[i]).Caption<>''
                then ListBox1.Items.Add(Form1.Components[i].Name);
        end;
end;
0
cimak napisał(a)

moze tak....?

procedure TForm1.FormCreate(Sender: TObject);
var I:Integer;
begin
For I:=0 to Form1.ComponentCount-1 do
        begin
        If TLabel(Form1.Components[i]).Caption<>''
                then ListBox1.Items.Add(Form1.Components[i].Name);
        end;
end;

no tak ale zakladasz ze komponent jest typu tLabel wiec to raczej nie przejdzie

0

W ekspercie nr 4/2006 jest program wielojęzyczny. Można tam zaglądnąć.

0

Co do tego, że chcesz wszystkie z formy, to problemu nie ma, bo musisz to wywołać rekurencyjnie - dodatkowo dla komponentów, które mogą coś przechowywać na sobie.

Anyway moim zdaniem Twojego problemu nie da się rozwiązać. Chyba, że wszystko rzutujesz na TObject. Ale to trochę bez sensu.

Ewentualnie zawsze możesz już rzutować na ten TObject biorąc wszystko w try..except

0
mega1978 napisał(a)

no tak ale zakladasz ze komponent jest typu tLabel wiec to raczej nie przejdzie

Odrobina inwencji...

        If (Form1.Components[i] is Tlabel) and (Form1.Components[i] as TLabel).Caption<>'') then ListBox1.Items.Add(Form1.Components[i].Name);
0
mega1978 napisał(a)
cimak napisał(a)

moze tak....?

procedure TForm1.FormCreate(Sender: TObject);
var I:Integer;
begin
For I:=0 to Form1.ComponentCount-1 do
        begin
        If TLabel(Form1.Components[i]).Caption<>''
                then ListBox1.Items.Add(Form1.Components[i].Name);
        end;
end;

no tak ale zakladasz ze komponent jest typu tLabel wiec to raczej nie przejdzie

przejdzie. u mnie przeszlo i zrobilo piekna liste komponentow :P
zadnych bledow.

0
Oleksy_Adam napisał(a)

W ekspercie nr 4/2006 jest program wielojęzyczny.

I jest tam właśnie wykorzystanie tego co napisał ŁF, a ty chcesz osiągnąć.
Poza tym zobacz: Różne wersje językowe

0

Polecam to:

uses TypInfo;
procedure DisableCtrls(Parent: TWinControl; Disabled: Boolean);
var i    : Integer;
    Ctrl : TControl;
begin
  for i := 0 to Parent.ControlCount - 1 do
     begin
        Ctrl := Parent.Controls[i];
        if IsPublishedProp(Ctrl, 'ReadOnly') then
          SetOrdProp(Ctrl, 'ReadOnly', Ord(Disabled))
...
    end;

Przygladnij sie tej bibliotece, jest bardzo ciekawa.

0
spc napisał(a)

Polecam to:

uses TypInfo;
procedure DisableCtrls(Parent: TWinControl; Disabled: Boolean);
var i    : Integer;
    Ctrl : TControl;
begin
  for i := 0 to Parent.ControlCount - 1 do
     begin
        Ctrl := Parent.Controls[i];
        if IsPublishedProp(Ctrl, 'ReadOnly') then
          SetOrdProp(Ctrl, 'ReadOnly', Ord(Disabled))
...
    end;

Przygladnij sie tej bibliotece, jest bardzo ciekawa.

przyznam szczerze patrząc na ten kod zieleniałem z niewiedzy nie wiem o co biega

0
Opi napisał(a)
Oleksy_Adam napisał(a)

W ekspercie nr 4/2006 jest program wielojęzyczny.

I jest tam właśnie wykorzystanie tego co napisał ŁF, a ty chcesz osiągnąć.
Poza tym zobacz: Różne wersje językowe

nie mam tego eksperta jak mozesz wyslij mi zrodelko na [email protected]

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