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

Вниз

Полноценные формы   Найти похожие ветки 

 
BruceW   (2007-12-11 20:25) [0]

Здравствуйте!
Можно ли в приложении SDI сделать чтобы все формы были равнозначны (т.е. не было дочерних) - а то уже устал бороться с минимизацией, закрытием и т.п.


 
tesseract ©   (2007-12-11 20:41) [1]

Нельзя SDI это как иделогия отрицает. Используй MDI.


 
BruceW   (2007-12-11 20:54) [2]

mdi не подходит там же формы внутри главного окна


 
Kolan ©   (2007-12-11 20:56) [3]

> а то уже устал бороться с минимизацией

Сделай форму с нужными настройками, засунь её в репозиторий и радуйся.


 
BruceW   (2007-12-11 20:59) [4]

не в репозитории дело, а в том что такую форму получить не просто, а точнее получить ее без глюков пока вообще не удалось


 
Григорьев Антон ©   (2007-12-11 21:14) [5]

Я когда-то развлекался с этим, результаты здесь: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1161
Но потом оказалось, что одну важную деталь я не учёл: это всё начинает глючить, когда приложение показывает какое-нибудь диалоговое окно. Может, у вас получится это побороть.


 
tesseract ©   (2007-12-11 22:16) [6]


> mdi не подходит там же формы внутри главного окна


ну SDI как раз это и подрозумевает. Я просто тебя не понял - тебе шашечки или ехать ? В любом случае будет главный поток. Тебе как в офисе ? Так он на просто COM стартует, а сколько окно ему по барабану. Каждое окно считай отдельный процесс. Delphi подразумевает, что главная форма всегда есть, ты не обязан её показывать. Создавай подчиненные - они будут равнозначны.


 
tesseract ©   (2007-12-11 22:19) [7]


>  это всё начинает глючить, когда приложение показывает какое-
> нибудь диалоговое окно. Может, у вас получится это побороть.
>


Я так понимаю модальные. Z-oder + Реакция на передачу фокуса окну поможет.


 
DVM ©   (2007-12-11 22:21) [8]


> Каждое окно считай отдельный процесс.

не отдельный.


> Delphi подразумевает, что главная форма всегда есть

Понятия такого вообще нет. Да и не делфи, наверное, а VCL все же.


 
tesseract ©   (2007-12-11 22:37) [9]


> не отдельный.


С точки зрения обработки сообщений можно поспорить.


>  Да и не делфи, наверное, а VCL все же.


Согласен, но Delphi без VCL мой телепатор не воспринимает.


 
DVM ©   (2007-12-11 22:42) [10]


> С точки зрения обработки сообщений можно поспорить.

какое отношение обработка оконных сообщений имеет к понятию процесса?


 
BruceW   (2007-12-11 22:42) [11]

to tesseract

> Создавай подчиненные - они будут равнозначны.

У приложения есть главное невидимое окно - его в расчет не берем
Главная форма приложения - та, которая создалась первой, остальные - второстепенные (подчиненные)
Они работают НЕ так как главная
Примеры: попробуйте свернуть подчиненные, попробуйте свернуть главную, попробуйте ее закрыть, попробуйте закрыть подчиненные, попробуйте спрятать главную, попробуйте спрятать подчиненные....

Удалось реализовать практически равнозначное поведение, НО иногда вылазят глюки

to Григорьев Антон
спасибо, как раз смотрю


 
BruceW   (2007-12-11 22:49) [12]

to Григорьев Антон

спасибо, интересная статья
а какого рода глюки возникают при показе диал. окон?

Примечание: используя VCL, можно создавать и другие окна, не имеющие ни родителя, ни владельца — для этого достаточно перекрыть метод CreateParams и установить параметр WndParent равным нулю. Но VCL всё равно не станет рассматривать эти формы как равноценные главной

И что значит - не равноценные главной?
Будет не будет ли проблем с VCL в данном случае?


 
DVM ©   (2007-12-11 22:50) [13]


> BruceW  

Мне когда понадобилось подобное ничего лучше в голову не пришло как спрятать первую созданную форму и считать что ее нет. Далее создавал и показывал все остальные формы. Все работало без глюков вроде.


 
BruceW   (2007-12-11 22:53) [14]


> DVM

наверно так и буду пробовать


 
Григорьев Антон ©   (2007-12-12 08:14) [15]


> BruceW   (11.12.07 22:49) [12]
> а какого рода глюки возникают при показе диал. окон?

Если во время показа диалогового окна по Alt+Tab переключиться на другое приложение, а потом вернуться, диалоговое окно обычно прячется вниз. Причём настоящие модальные окна (например, которое показывает TOpenDialog) и окна VCL, показанные через ShowModal, ведут себя по-разному.


 
Eraser ©   (2007-12-12 18:17) [16]


> DVM ©   (11.12.07 22:50) [13]

вроде не должно было работать.. или свои ограничения были.

> Григорьев Антон ©   (12.12.07 08:14) [15]

проблема решена, начиная с D2007 с последним апдейтом.
Но там есть одно "но", если включен Application.MainFormOnTaskBar, то главная форма всегда отображается под остальными.
это можно вылечить перекрыв CreateParams остальных форм так
procedure TfmFTP.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 Params.WndParent := HWND_DESKTOP;
 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;

до Д2007 данный код бы был глючным, т.к. Params.WndParent := HWND_DESKTOP; давало бы неприятный эффект с хинтами (который обойти можно, но не просто), в Д2007 все работает как надо.
Но появляется еще один баг, при вызове диалоговых окон.
иправляется установкой у диалогового окна
PopupParent := Self; // где self - текущее окно
и
PopupMode := pmExplicit;

до 2007 чтобы организовать сабж требовалось куда больше усилий и баг, описаный в [15] так решить и не удалось.


 
BruceW   (2007-12-12 19:25) [17]


> Eraser


спасибо, кажется то, что надо


 
DVM ©   (2007-12-12 22:44) [18]


> Eraser ©   (12.12.07 18:17) [16]
>
> > DVM ©   (11.12.07 22:50) [13]
>
> вроде не должно было работать.. или свои ограничения были.
>

Да нет нормально работало и сейчас работает. Только там один нюанс был. Все остальные кроме первой формы создавались полностью в рунтайме и не было даже dfm-ок.



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

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

Наверх





Память: 0.49 MB
Время: 0.005 c
1-1198047781
kyn66
2007-12-19 10:03
2008.08.31
TreeView с подсветкой текущей строки


2-1216808862
AlexeyMir
2008-07-23 14:27
2008.08.31
Как оформить поступление товара


2-1216804295
Dimich1978
2008-07-23 13:11
2008.08.31
Как удалить из doc определеные строки


15-1215602175
denic
2008-07-09 15:16
2008.08.31
БД информация о домах


2-1216888966
evgenij
2008-07-24 12:42
2008.08.31
Пропадает рисунок на канве





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