Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Объект по имени.


Verq ©   (2002-05-31 23:19:00) 

Профи, проучите меня...
Есть строка, как используя её получить доступ к объекту с именем, совпадающим с этой самой строкой?
Например:
string:="qryRashod";
ОбъектПоИмени(string).Dataset......


ION T   (2002-06-01 00:24:00) [1]

2VID: RTTI всё стерпит;)

procedure SetIntPropertyIfExists(AComp: TComponent; APropName: string;
AValue: integer);
var PropInfo: PPropInfo;
TK: TTypeKind;
begin
PropInfo := GetPropInfo(AComp.ClassInfo, APropName);
if PropInfo <> nil then
begin
TK := PropInfo^.PropType^.Kind;
if (TK = tkInteger) or (TK = tkInt64) then
SetOrdProp(AComp, PropInfo, AValue);
end;
end;

procedure SetStrPropertyIfExists(AComp: TComponent; APropName: string;
AValue: string);
var PropInfo: PPropInfo;
TK: TTypeKind;
begin
PropInfo := GetPropInfo(AComp.ClassInfo, APropName);
if PropInfo <> nil then
begin
TK := PropInfo^.PropType^.Kind;
if (TK = tkString) or (TK = tkLString) or (TK = tkWString) then
SetStrProp(AComp, PropInfo, AValue);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
NamePrefix = "MyEdit";
var
i: Integer;
Comp: TComponent;
begin
for i := 1 to 20 do begin
TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
Comp:= FindComponent(NamePrefix + IntToStr(i));
SetIntPropertyIfExists(Comp, "left", 10);
SetIntPropertyIfExists(Comp, "top", i* 20);
SetStrPropertyIfExists(Comp, "text", "Edit"+ inttostr(i));
TWinControl(Comp).Parent:= self;
end;
end;


Тока вот с перентом вечная проблема:(( Приходится тайпкаст на винконтрол делать...


VID   (2002-05-31 23:27:00) [2]

почти одновременно все :)


VID   (2002-05-31 23:26:00) [3]

вот те вырезка из help"a

The following example creates 20 edit boxes, using FindComponent with the edit box name to access each newly created edit box.

procedure TForm1.Button1Click(Sender: TObject);

var
i: Integer;
const
NamePrefix = "MyEdit";
begin
for i := 1 to 20 do begin
TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
with TEdit(FindComponent(NamePrefix + IntToStr(i))) do
begin
Left := 10;
Top := i * 20;
Parent := self;
end;
end;
end;
надеюсь поможет. хотя тип объекта всё равно знать надо... без этого в obj pas, насколько мне известно никак. хотя может я и ошибаюсь...


Verq   (2002-05-31 23:26:00) [4]

Спасибо.


Новеньки в Делфи   (2002-05-31 23:25:00) [5]

FindComponent(string)
в данном случае:
(FindComponent(string)).DataSet...


Наверх

Титульная страница Поиск, карта сайта Написать письмо