Главная страница
    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
3-88332
MaXie
2002-04-30 11:51
2002.05.27
Update ODBC -> смерть клиенту!


1-88466
Демон
2002-05-17 14:06
2002.05.27
Как отключить СИДЮК и ФЛОПАК????


3-88369
Ura
2002-04-29 14:41
2002.05.27
Вложеные запросы


3-88383
Vicheslav
2002-05-03 09:54
2002.05.27
Ув. помогите определиться IB6 или SQL2K


1-88564
Maniyak
2002-05-16 16:40
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский