Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

Как можно по имени формы получить переменную типа TForm?   Найти похожие ветки 

 
stelius ©   (2004-07-14 16:30) [0]

subj


 
Гаврила ©   (2004-07-14 16:33) [1]

У Application, как и у любого компонента, есть список.
См. FindComponent
Только форма в этот момент должна быть создана


 
stelius ©   (2004-07-14 16:46) [2]

она создана, только Application.FindComponent возвращает nil


 
Anatoly Podgoretsky ©   (2004-07-14 16:49) [3]

Значит неправильно ищешь, ищи в Screen


 
Digitman ©   (2004-07-14 16:55) [4]


> она создана, только Application.FindComponent возвращает
> nil


владелец-то кто у этой формы ? Application ? если иначе, то разумеется Application.FindComponent вернет тебе nil - этот метод осуществляет поиск в списке объектов, которые были созданы с о ссылкой на объект-владелец Application

а вот список Screen.Forms[] хранит ссылки на все существующие формы приложения (без учета владельца), но имеющие в момент обращения к списку св-во Visible = True


 
asp ©   (2004-07-14 16:59) [5]

Screen.Forms


 
Digitman ©   (2004-07-14 17:12) [6]


> asp ©   (14.07.04 16:59) [5]


цитирую справку :

Lists all the forms currently displayed in the application.

а вдруг автор создал форму, но она НЕ displayed в момент поиска ?

очередной кукиш получит он в этом случае с этим скрином ...


 
HSolo ©   (2004-07-14 17:20) [7]

>очередной кукиш получит он в этом случае с этим скрином
Не получит :) Увы, справка в данном случае вводит в заблуждение. Screen.Forms содержит созданные формы, не обязательно видимые. Проверено.


 
Digitman ©   (2004-07-14 17:32) [8]


> HSolo ©   (14.07.04 17:20) [7]


посмотрел в исх.текст

действительно, вводит в заблуждение

либо в справке ляп (д.б. currently existing) либо в исх.тексте реализовано не так как описано в справке


 
Anatoly Podgoretsky ©   (2004-07-14 20:25) [9]

Еще ЮЗ удивлялся.
Ошибка в справке до сих пор не исправлена.


 
stelius ©   (2004-07-16 16:16) [10]

Со Screen тоже не получается, nil и все тут, вот код:
procedure TForm1.Button1Click(Sender: TObject);
var
 c     : TComponent;
begin
 Form2 := TForm2.Create(self);
 Form2.Show;
 Form1.SetFocus;
 c := Screen.FindComponent("Form2");
 if c = nil then ShowMessage("nil")
 else ShowMessage("not nil")
 Form2.Free;
end;


 
VMcL ©   (2004-07-16 16:25) [11]

>>stelius ©  (16.07.04 16:16) [10]

При чем к "Screen" FindComponent? Screen не является владельцем формы. Цикл for по Screen.Forms[] и всё тут.


 
Инопланетянин   (2004-07-16 16:27) [12]

Form2 := TForm2.Create(self);

посмотри, какое у нее в этот момент имя
ShowMessage(Form2.name)


 
stelius ©   (2004-07-16 16:49) [13]

2 VMcL ©   (16.07.04 16:25) [11]
thnx
2 Инопланетянин   (16.07.04 16:27) [12]
строка
c := Screen.FindComponent(Form2.Name);
дает тот же результ



Страницы: 1 вся ветка

Текущий архив: 2004.08.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
1-1090299020
999
2004-07-20 08:50
2004.08.01
progressbar.create


1-1089961123
Senator
2004-07-16 10:58
2004.08.01
многоязыковая поддержка


3-1089183547
1008
2004-07-07 10:59
2004.08.01
Как принудительно обновить DBRichEdit?


1-1090243759
ruslan
2004-07-19 17:29
2004.08.01
Forma poyavilos plavno


4-1087542518
Тимохов
2004-06-18 11:08
2004.08.01
CreateRemoteThread