Главная страница
    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.47 MB
Время: 0.006 c
1-88394
Ross
2002-05-14 19:11
2002.05.27
Совсем замучался. Помогите


1-88539
Cossys
2002-05-15 17:08
2002.05.27
TreeView и DB. Помогите, пожалуйста


3-88317
weak
2002-04-29 17:06
2002.05.27
Простите, но опять проблема с полем даты


1-88528
eSKey
2002-05-16 10:50
2002.05.27
Мой вариант управления размером тулбара :)


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





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