![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выяснить наличие св-в Caption и Text
123-ий © (2008-10-08 11:58:00)Перебираю компоненты формы таким способом:
for i := 0 to ComponentCount - 1 do
Components[i].блаблабла
Так вот можно ли выяснить, есть ли у данного компонента свойство Caption или Text?
Надо для того, чтобы сделать локализацию. Файлик с нужными строками грузится в память, и надо чтобы для всех контролов выставились Caption'ы и Text'ы из этого файлика. То есть ситуация такая, что есть строки (причем в начале каждой строки содержится параметр, указывающий куда эту строку "затолкнуть", то есть строка выглядит так: <Control>.<Property> = 'блаблабла'), есть нужные компоненты, надо это всё как то совместить.
123-ий (2008-10-08 13:26:00) [1]ух ты. спасибо, помогли :)
{RASkov} (2008-10-08 12:36:00) [2]Может пригодится в решении задачи:
type
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
CheckBox1: TCheckBox;
Label1: TLabel;
RadioButton1: TRadioButton;
RadioGroup1: TRadioGroup;
GroupBox1: TGroupBox;
Edit1: TEdit;
MaskEdit1: TMaskEdit;
SpeedButton1: TSpeedButton;
BitBtn1: TBitBtn;
LabeledEdit1: TLabeledEdit;
procedure Button1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
type TCtrl = class(TControl);
procedure TForm1.Button1Click(Sender: TObject);
var N: Integer;
begin
for N:=0 to ComponentCount-1 do
if Components[N] is TControl then TCtrl(Components[N]).Text:='This '+Components[N].Name;
end;
end.
Rouse_ (2008-10-08 12:23:00) [3]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Memo1: TMemo;
Edit1: TEdit;
Button1: TButton;
CheckBox1: TCheckBox;
ListBox1: TListBox;
ComboBox1: TComboBox;
ScrollBar1: TScrollBar;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
TypInfo;
type
TTextProperty = (tpCaption, tpText);
TTextPropertyes = set of TTextProperty;
function QueryTextProperty(AObject: TObject): TTextPropertyes;
var
I: Integer;
FList: PPropList;
FCount, FSize: Integer;
begin
Result := [];
if AObject = nil then Exit;
if AObject.ClassInfo <> nil then
begin
FCount := GetPropList(AObject.ClassInfo, tkProperties, nil);
FSize := FCount * SizeOf(Pointer);
GetMem(FList, FSize);
try
GetPropList(AObject.ClassInfo, tkProperties, FList);
if FCount > 0 then
for I := 0 to FCount - 1 do
case FList^[I].PropType^.Kind of
tkString, tkLString, tkWString:
if FList^[I].Name = 'Caption' then
Include(Result, tpCaption)
else
if FList^[I].Name = 'Text' then
Include(Result, tpText);
end;
finally
FreeMem(FList);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
TextPropertyes: TTextPropertyes;
OutputString, CommaString: String;
begin
Memo1.Lines.Clear;
for I := 0 to ComponentCount - 1 do
begin
TextPropertyes := QueryTextProperty(Components[I]);
if TextPropertyes <> [] then
begin
OutputString := Components[I].Name;
CommaString := '';
if tpCaption in TextPropertyes then
begin
OutputString := OutputString + ' has Caption';
CommaString := ', ';
end;
if tpText in TextPropertyes then
OutputString := OutputString + CommaString + ' has Text';
Memo1.Lines.Add(OutputString);
end;
end;
end;
end.
Palladin (2008-10-08 12:00:00) [4]http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&search=%F1%E2%EE%E9%F1%F2%E2%EE+Caption