Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];

Вниз

Как сделать список форм в SDI   Найти похожие ветки 

 
still_swamp   (2002-05-14 17:20) [0]

Как сделать список форм в SDI?
Есть ли какие методы? Подскажите


 
McSimm   (2002-05-14 17:36) [1]

Если список открытых форм, то есть списки:
TScreen.Forms
TScreen.CustomForms


 
still_swamp   (2002-05-14 18:05) [2]

Формы открыты, однако, возвращается только MainForm. Как должны создаваьтся формы, для того что бы они попали в этот список?


 
McSimm   (2002-05-14 18:15) [3]

Тут что-то не так.

Должны попасть.
На всякий случай - вот пример как этот список обработать:

ListBox1.Clear;
for I := 0 to Screen.FormCount - 1 do
begin
ListBox1.AddItem(Screen.Forms[I].Caption, Screen.Forms[I]);
end;


 
still_swamp   (2002-05-14 18:26) [4]

Это я сделал, безусловно, однако формы у меня открываются в ДЛЛ Application.CreateForm, и естественно не выгружаются. Однако, список пуст.


 
McSimm   (2002-05-14 18:35) [5]

Тогда все ясно.
У приложения и у DLL разные объекты Screen. Поэтому формы попадают в разные списки.

Часто при работе с формами в Dll используется следующий метод:
При инициализации Dll в нее передаются две переменные из программы - Application и Screen.
Родные для Dll переменные сохраняются им и присваиваются значения переменных из Exe.
Перед выгрузкой Dll после закрытия всех форм надо вернуть исходные значения.



 
still_swamp   (2002-05-14 18:51) [6]

ясно. спасибо. однако у меня около 40 собрвнных уже dll.

я передаю только Application. Там есть Components, можно ли как то с ним решить проблемку.


 
still_swamp   (2002-05-14 18:53) [7]

и еще прицепом.
в длл придется писать нечто вроде...
DllScreen:=InScreen?


 
McSimm   (2002-05-14 19:21) [8]

Для этой цели вполне подойдет Application.Components

Отличия:
- В этот список форма попадет только если она создается Application.CreateForm или TForm.Create(Application).
- В этом списке не только формы.
- В этом списке формы не только видимые формы.

Цикл может выглядеть так:
for I := 0 to Application.ComponentCount - 1 do
begin
if Application.Components[I] is TForm then
ListBox1.AddItem((Application.Components[I] as TForm).Caption, nil);
end;

Можно также добавить проверку на Visible формы если необходимо


 
still_swamp   (2002-05-14 19:51) [9]

:)
это первое что я сделал еще до нашей беседы. Пусто.


 
McSimm   (2002-05-15 10:16) [10]

Пусто может быть только если объекты Application у Dll и Exe разные, либо, что скорее всего, оператор is считает классы "TForm" из dll и из приложения различными и возвращает False для всех Components[].
Попробуй цикл без is, вроде
for I := 0 to Application.ComponentCount - 1 do
ListBox1.AddItem(Application.Components[I].Name, nil);
если обнаружатся искомые, надо придумать как отличать формы другим способом, нежели is


 
still_swamp   (2002-05-17 16:25) [11]

отличить то легко... :)
try except end... однако ComponentCount возвращает 1.


 
McSimm   (2002-05-17 16:53) [12]

Это значит, что Owner у формы в DLL не равен Application в приложении.
Либо на момент создания формы переменной Application в DLL не присвоено значение переменной Application из приложения, либо форма создается с Owner не Application. Например TForm.Create(nil)



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

Форум: "Основная";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.005 c
1-88522
antonyo
2002-05-15 11:55
2002.05.27
Нужны помощники новичку


3-88351
Roman_tutov
2002-04-19 16:56
2002.05.27
сортировка в dbGrid


1-88427
Semion
2002-05-15 13:38
2002.05.27
Как сделать Hint ы d ComboBox


3-88365
perov
2002-05-02 12:06
2002.05.27
модификация свойств объектов Fast Report


4-88686
Толик
2002-03-28 10:56
2002.05.27
Иконка файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский