unit FindGlob;
interfaceuses
Classes, DsgnIntf, Forms, SysUtils;
function FindGlobalComp (const Name: string;
List: TComponentList): Boolean;
implementationfunction FindGlobalComp (const Name: string;
List: TComponentList): Boolean;
var
I, J, InitCount: Integer;
Form, Comp: TComponent;
begin
InitCount := List.Count;
for I := 0 to Screen.FormCount - 1 dobegin
Form := Screen.Forms[I];
if CompareText(Name, Form.Name) = 0 then
List.Add (Form);
for J := 0 to Form.ComponentCount - 1 dobegin
Comp := Form.Components [J];
if CompareText(Name, Comp.Name) = 0 then
List.Add (Comp);
end;
end;
for I := 0 to Screen.DataModuleCount - 1 dobegin
Form := Screen.DataModules[I];
if CompareText(Name, Form.Name) = 0 then
List.Add (Form);
for J := 0 to Form.ComponentCount - 1 dobegin
Comp := Form.Components [J];
if CompareText(Name, Comp.Name) = 0 then
List.Add (Comp);
end;
end;
// true if found
Result := (List.Count - InitCount) > 0;
end;
end.
unit FindForm;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private{ Private declarations }public{ Public declarations }end;
var
Form1: TForm1;
implementation{$R *.DFM}uses
FindGlob, DsgnIntf;
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
Comp: TComponent;
List: TComponentList;
begin
ListBox1.Items.Clear;
List := TComponentList.Create;
tryifnot FindGlobalComp (Edit1.Text, List) then
ListBox1.Items.Add ('No components found')
elsefor I := 0 to List.Count - 1 dobegin
Comp := List.Items[I] as TComponent;
ListBox1.Items.Add (Format (
'%s (%s): %s (%s)',
[Comp.Name, Comp.ClassName,
Comp.Owner.Name, Comp.Owner.ClassName]));
end;
finally
List.Free;
end;
end;
end.
unit SecondF;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
Label1: TLabel;
Edit1: TEdit;
private{ Private declarations }public{ Public declarations }end;
var
Form2: TForm2;
implementation{$R *.DFM}end.
Это проект на языке Delphi, содержащий три модуля:
FindGlob: в этом модуле находится функция FindGlobalComp, которая ищет компоненты с указанным именем в всей приложении, включая формы и модули данных. Функция возвращает булевое значение, указывающее, были ли найдены любые совпадающие компоненты.
FindForm: в этом модуле находится форма TForm1 с текстовым полем, кнопкой и списком. Когда кнопка нажата, она вызывает функцию FindGlobalComp, чтобы найти компоненты с именем, указанным в текстовом поле. Результаты отображаются в списке.
SecondF: в этом модуле находится форма TForm2 с текстовым полем, кнопкой и меткой. Однако, эта форма не использует функцию FindGlobalComp.
Проект можно загрузить в Delphi, создав новый каталог для проекта, добавив три модуля в него и затем загружая проект в Delphi с помощью меню "Файл" > "Открыть" > "Проект...". Проект будет состоять из трех форм: TForm1, TForm2 и основной формы, содержащей кнопку и текстовое поле.
Вот подробное описание работы кода:
В функции FindGlobalComp функция перебирает все формы и модули данных в приложении с помощью свойств Screen.Forms и Screen.DataModules. Для каждой формы или модуля данных она перебирает ее компоненты с помощью свойства Components. Если имя компонента совпадает с указанным именем, оно добавляется в объект TComponentList.
В обработчике события Button1Click в модуле FindForm функция очищает список и создает новый экземпляр класса TComponentList. Затем она вызывает функцию FindGlobalComp с именем, указанным в текстовом поле. Если были найдены любые совпадающие компоненты, она перебирает список компонентов и добавляет их имена в список.
Код также включает обработку ошибок с помощью блоков try-finally для обеспечения правильного освобождения объекта TComponentList, когда он больше не нужен.
В целом, это проект демонстрирует, как найти компоненты с указанным именем в приложении на языке Delphi.
Программный код на языке Delphi, описывающий поиск компонента в глобальном пространстве и отображение результатов в виде списка.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.