Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.022 c
14-1089200045
Тимохов
2004-07-07 15:34
2004.08.01
Runtime пакеты.


4-1087578704
Ник
2004-06-18 21:11
2004.08.01
Пытаюсь скопировать диск на жесткий, не могу.....


1-1090355166
NOX
2004-07-21 00:26
2004.08.01
вопрос по стилю XP


9-1082097325
Darthman
2004-04-16 10:35
2004.08.01
2D 3D opensource OpenGL engine. Может быть кому пригодится.


6-1085918955
Klev
2004-05-30 16:09
2004.08.01
Отправка письма с вложением средствами Winsock API




   Наверх