Главная страница
    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.01 c
11-1192910752
Виктор007
2007-10-21 00:05
2008.08.31
Ошибка в TBitBtn при включенном GRAPHCTL_XPSTYLES


1-1198064611
андр
2007-12-19 14:43
2008.08.31
Interface


15-1215717772
Пробегал2....
2008-07-10 23:22
2008.08.31
Куда двигаться после delphi?


15-1215634451
@!!ex
2008-07-10 00:14
2008.08.31
CALLBACk процедура как часть класса в С++


10-1150122111
wp2
2006-06-12 18:21
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский