Форум: "Основная";
Текущий архив: 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