![]() |
![]() ![]() ![]() ![]() |
|
Найти компонент по имениDelphi , Компоненты и Классы , КомпонентыНайти компонент по имени
Оформил: DeeCo
{Instead of writing: / Anstatt so was zu schreiben:}
Edit1.Text := 'Text 1';
Edit2.Text := 'Text 2';
Edit3.Text := 'Text 3';
Edit4.Text := 'Text 4';
{...}
Edit9.Text := 'Text 9';
{...it's easier to write / ...geht's so einfacher:}
{
Use the forms FindComponent to find a component on the form.
TypeCast the Result of FindComponent to the TComponent to be able to use it.
}
for i := 1 to 9 do
TEdit(FindComponent('Edit'+IntToStr(i))).Text := 'Text' + IntToStr(i);
{or/oder:}
for i:= 1 to 9 do
(Findcomponent('Edit'+IntToStr(i)) as TEdit).Text := IntToStr(i);
{
Another example: find a component on any form with
a search string like this: 'MyForm10.Edit2'
Ein anderes Beispiel:
Eine Komponente auf irgendeiner Form finden mittels einer
solchen Zeichenfolge: 'MyForm10.Edit2'
}
function FindComponentEx(const Name: string): TComponent;
var
FormName: string;
CompName: string;
P: Integer;
Found: Boolean;
Form: TForm;
I: Integer;
begin
// Split up in a valid form and a valid component name
P := Pos('.', Name);
if P = 0 then
begin
raise Exception.Create('No valid form name given');
end;
FormName := Copy(Name, 1, P - 1);
CompName := Copy(Name, P + 1, High(Integer));
Found := False;
// find the form
for I := 0 to Screen.FormCount - 1 do
begin
Form := Screen.Forms[I];
// case insensitive comparing
if AnsiSameText(Form.Name, FormName) then
begin
Found := True;
Break;
end;
end;
if Found then
begin
for I := 0 to Form.ComponentCount - 1 do
begin
Result := Form.Components[I];
if AnsiSameText(Result.Name, CompName) then Exit;
end;
end;
Result := nil;
end;
procedure TFrom1.Button1Click(Sender: TObject);
var
C: TComponent;
begin
C := FindComponentEx('MyForm10.Edit2');
TEdit(C).Caption := 'Hello';
end;
Программный код на Delphi, демонстрирующий поиск компонента на форме по его имени и изменение свойств компонента. Вот разбивка кода:
Вот некоторые предложения по улучшению кода:
Вот альтернативное решение с помощью словаря для хранения имён форм и соответствующих компонентов: В этом решении используется TObjectDictionary для хранения имён форм и соответствующих компонентов. Функция FindComponentEx разбивает имя на валидное имя формы и валидное имя компонента, находит форму в словаре, и затем возвращает компонент, если он найден. Если не найден, она выбрасывает исключение. Это решение более гибкое и масштабируемое, чем оригинальный код. Статья посвящена описанию методов поиска компонентов в приложении Delphi, включая использование функции FindComponent и создание собственного алгоритма поиска с помощью процедуры FindComponentEx. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш :: Главная :: Компоненты ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||