Как найти форму по имени delphi

how can I find form by name? On this form I have Edit (TEdit) and i would like to write something in this TEdit (its name e.g.: adress) but I have only form name.
Can you help me?

asked Sep 1, 2014 at 17:35

Mlody87's user avatar

3

There is a simpler way of finding a form by name. Since all of auto-created form objects become owned by Application object and TApplication inherits from TComponent, you can either iterate thru Application.Components array property or use Application.FindComponent method.

var 
  Form: TForm;
begin
  Form := Application.FindComponent('LostForm1') as TForm;
  if Assigned(Form) then
    Form.Show
  else
    { error, can't find it } 

Note that FindComponent is case-insensitive.

answered Sep 1, 2014 at 19:59

Free Consulting's user avatar

Free ConsultingFree Consulting

4,3001 gold badge29 silver badges50 bronze badges

2

This answer assumes you are making a VCL application. I don’t know if FireMonkey has a similar solution.

All forms are added to the global Screen (declared in Vcl.Forms) object when they are created. Thus you can make a little helper function like this

function FindFormByName(const AName: string): TForm;
var
  i: Integer;
begin
  for i := 0 to Screen.FormCount - 1 do
  begin
    Result := Screen.Forms[i];
    if (Result.Name = AName) then
      Exit;
  end;
  Result := nil;
end;

David Heffernan's user avatar

answered Sep 1, 2014 at 18:23

Larsdk's user avatar

LarsdkLarsdk

7056 silver badges10 bronze badges

0

You can use the FindWindow function if you know the form title or the class name of the form.

answered Sep 1, 2014 at 17:40

Ross Bush's user avatar

Ross BushRoss Bush

14.6k2 gold badges31 silver badges54 bronze badges

1

Как мне найти форму по имени? В этой форме у меня есть Edit (TEdit), и я хотел бы написать что-нибудь в этом TEdit (его имя, например: адрес), но у меня есть только имя формы. Вы можете помочь мне?

3 ответа

Лучший ответ

Есть более простой способ найти форму по имени. Поскольку все автоматически созданные объекты форм становятся собственностью Application и TApplication наследуется от TComponent, вы можете выполнить итерацию через Application.Components свойство массива или используйте Application.FindComponent метод.

var 
  Form: TForm;
begin
  Form := Application.FindComponent('LostForm1') as TForm;
  if Assigned(Form) then
    Form.Show
  else
    { error, can't find it } 

Обратите внимание, что FindComponent нечувствителен к регистру.


9

Free Consulting
1 Сен 2014 в 23:59

Этот ответ предполагает, что вы создаете приложение VCL. Я не знаю, есть ли у FireMonkey подобное решение.

Все формы добавляются к глобальному объекту Screen (объявленному в Vcl.Forms) при их создании. Таким образом, вы можете создать небольшую вспомогательную функцию, подобную этой

function FindFormByName(const AName: string): TForm;
var
  i: Integer;
begin
  for i := 0 to Screen.FormCount - 1 do
  begin
    Result := Screen.Forms[i];
    if (Result.Name = AName) then
      Exit;
  end;
  Result := nil;
end;


6

David Heffernan
1 Сен 2014 в 23:26

Вы можете использовать FindWindow функция, если вы знаете заголовок формы или имя класса формы.


0

Ross Bush
1 Сен 2014 в 21:40

Этот ответ предполагает, что вы делаете приложение VCL. Я не знаю, имеет ли FireMonkey аналогичное решение.

Все формы добавляются к глобальному экрану (объявленному в Vcl.Forms) при их создании. Таким образом, вы можете сделать небольшую вспомогательную функцию, подобную этой

function FindFormByName(const AName: string): TForm;
var
i: Integer;
begin
for i := 0 to Screen.FormCount - 1 do
begin
Result := Screen.Forms[i];
if (Result.Name = AName) then
Exit;
end;
Result := nil;
end;

 
Тимофей123
 
(2009-12-05 23:52)
[0]

Всем доброго вечера, как можно обратиться к форме, зная имя формы,идентификатор, или имя класса от которого она созданна?


 
KilkennyCat ©
 
(2009-12-06 00:52)
[1]

через написание имени ее.


 
Игорь Шевченко ©
 
(2009-12-06 00:55)
[2]

http://ln.com.ua/~openxs/articles/smart-questions-ru.html


 
Германн ©
 
(2009-12-06 01:01)
[3]


> Тимофей123   (05.12.09 23:52)  

Ты все-таки сначала разберись с заданием преподавателя. А то пока бред спрашиваешь.


 
Юрий Зотов ©
 
(2009-12-06 12:11)
[4]

TForm1(Application.FindComponent(«Form1»));


 
Тимофей123
 
(2009-12-06 13:50)
[5]

думал что разобрался накатал след.:
unit module;
interface
uses Forms, classes;
// Создаю класс
type
 TMyForm = class
 private
 // Массив форм
   mass: array of TForm;
 public
   count_f: integer;
   // Добавление формы и занесение ее в массив
   function AddForm: Integer;
   // Получение списка форм
   procedure GetList(List: TStrings);
   // За обращение к форме взял получение св-ва caption
   function GetCaptionName(name:string) : String;
   function GetCaptionClassName(name:string) : String;
   function GetCaptionId(name:String) : String;
 end;
implementation
uses SysUtils;
{ TMyForm }
function TMyForm.AddForm: Integer;
begin
 inc(count_f);
 setlength(mass, length(mass) + 1);
 mass[length(mass) - 1] := TForm.Create(Application);
 mass[length(mass) - 1].Name := "MyForm" + IntToStr(count_f);
 mass[length(mass) - 1].Caption := "Моя форма " + IntToStr(count_f);
 result := length(mass) - 1;
end;
procedure TMyForm.GetList(List: TStrings);
var
 i: integer;
begin
 for i := 0 to length(mass) - 1 do
   list.Add(mass[i].name);
end;
function TMyForm.GetCaptionName(name:string): String;
var
 i:integer;
begin
 for i:=0 to length(mass)-1 do
  if mass[i].Name = name then
  begin
    result := mass[i].Caption;
    exit;
  end;
end;
function TMyForm.GetCaptionClassName(name: string): String;
var
 i:integer;
begin
 for i:=0 to length(mass)-1 do
  if mass[i].ClassName = name then
  begin
    result := mass[i].Caption;
    exit;
  end;
end;
function TMyForm.GetCaptionId(name :STring): String;
var
 i:integer;
begin
 for i:=0 to length(mass)-1 do
  if i = strtoint(name)-1 then
  begin
    result := mass[i].Caption;
    exit;
  end;
end;
end.

Он прокомменитровал так:
1. За создание формы класс не должен отвечать.
2. Доступ организовать через свойства.
3. Реализовать механизм автоматической регистрации форм через методы общей абстрактной формы.
Мне не понятно как реализовать 1 и 3 пункт и что значит организовать доступ через свойства


 
Anatoly Podgoretsky ©
 
(2009-12-06 13:52)
[6]

> Тимофей123  (06.12.2009 13:50:05)  [5]

Это он тебя к армии готовит.


 
KilkennyCat ©
 
(2009-12-06 13:54)
[7]


2. Доступ организовать через свойства.
> Мне не понятно как реализовать 1 и 3 пункт и что значит
> организовать доступ через свойства

Надо запомнить такой прием: мне все понятно, за исключением (дальше перечисляются все пункты) :)


 
KilkennyCat ©
 
(2009-12-06 14:00)
[8]

Я так думаю, что автору имеет смысл почитать статью http://www.delphimaster.ru/articles/parentform/index.html там и проперти есть…


0 / 0 / 0

Регистрация: 28.10.2014

Сообщений: 23

1

Поиск форм по названию

16.04.2016, 18:33. Показов 952. Ответов 4


Студворк — интернет-сервис помощи студентам

здравствуйте, мне очень в программе нужен поиск по названию форм через mainmenu есть у кого нибудь есть пример кода, буду очень благодарна



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

16.04.2016, 18:33

4

Модератор

3488 / 2611 / 741

Регистрация: 19.09.2012

Сообщений: 7,971

16.04.2016, 19:30

2

Что это за бессвязный набор слов?
Поиск чего? по названию каких форм? и причем тут mainmenu?



0



0 / 0 / 0

Регистрация: 28.10.2014

Сообщений: 23

16.04.2016, 19:41

 [ТС]

3

поиск форм ладно можно без mainmenu, мне нужно при нажатие кнопки чтоб находило форму какую надо, например ввожу название формы и она должны открыться вот так мне нужно срочно дипломная уже на подходе



0



7 / 7 / 7

Регистрация: 26.04.2015

Сообщений: 220

16.04.2016, 20:09

4

tanya93, сделай массив в него внеси все имена всех нужных форм, потом при нажатии на кнопку сравнивай введеное имя с имеющимися в массиве вытаскивай имя и запускай, удачи)



0



5537 / 4322 / 1383

Регистрация: 14.04.2014

Сообщений: 19,366

Записей в блоге: 19

16.04.2016, 21:12

5

у меня подозрение, что не надо такого подсказывать
пока автор не объяснит, зачем
просто потому, что больше это никому было не надо, значит где-то налицо проктостоматология



0



Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Площадь трапеции как найти верхнее основание
  • Как найти знакомства поблизости
  • Че девушку нашел или как
  • Как найти замедление в capcut
  • Ошибка 1020 на сайте как исправить ошибку

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии