Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 20:59 27.04.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема Скрита модална форманови  
Автор NikB (любопитен)
Публикувано25.12.03 21:07



Здравеите!
Честити празник, за тези, които го празнуват!

В мое приложение може да се стигне до ситуация, при която модална форма е закрита от друга форма на същото приложение. При това другата форма е активна (нейния Caption е засветен).
Може ли да се определи (в рамките на приложението) коя форма е модална?
Опитах с
for i:=0 to Screen.FormCount-1 do begin
xForm := tForm(Screen.Forms);
if xForm.Owner = Application.MainForm then begin
if fsModal in xForm.FormState then begin
но не се получи.



Тема Re: Скрита модална форманови [re: NikB]  
Автор PhantomASМодератор (няма)
Публикувано26.12.03 10:28



Как точно си получил този резултат???? По принцип модалните форми се ползват под формата на стек - тази която е най-отгоре се затваря първа ?! - т.е. идеята е не просто да си стои най-отгоре в списъка с отворените прозорци - ами да не можеш да пипаш нищо друго освен нея. Не знам какво точно се опитваш да направиш, но идеята да активираш модална форма (не че се сещам дали това може да стане) която е по-назад в списъка с формите - не ми се струва добра. Друг въпрос е, че не е добра идеята да отваряш друга форма (немодална) от модална форма - без да затваряш модалната.
Я разкажи какво точно се опитваш да постигнеш - за да може да се даде смислено обеснение.

---
Колкото повече, толкова повече.


Тема Re: Скрита модална форманови [re: PhantomAS]  
Автор NikB (любопитен)
Публикувано26.12.03 11:21



Благодаря ти за вниманието и ме извини за многословието!

Преди три месеца, по най-лошия взъможен начин (без да зная накрая какво ще искат) направих една програмка обслужваща външно комуникационно устройство по Com порт (RS232). Това като оправдание .
Та при случка по Com-a трябваше моята програмка да изплува от трея и да се цопне най-отгоре. За целта ползвах
SetWindowPos(aForm.Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE);
но се наложи да прихвана и
Application.OnDeactivate
Както и да е, поради промени в изискванията този механизъм отпадна и го премахнах от програмата, но най-вероятно някъде е останало някое активиране на немодална форма, докато има активна модална.

Възможната активна немодална форма е само една, а модалните са няколко и
исках да заобиколя проблема като при визуализиране на немодалнта форма проверявам дали приложението няма активна модална форма (и ако има - да я извеждам над немодалната).

Гледах сорсовете на ShowModal и горе-долу ми е ясен механизма, но до голяма част от полетата нямам достъп, щото са private.
Освен това не от модалната форма активирам немодалната. Модалната се активира от потребителя (напр. за настройка на параметри на програмата), а немодалната - при събитие (напр. от Com порта)



Тема Re: Скрита модална форма [re: NikB]  
Автор Formal (невежа)
Публикувано30.12.03 15:18



Защо не опиташ с Application.Forms?
Освен това, кода, който си показал малко ме озадачава. Аз бих го написал:


for i:=0 to Screen.FormCount-1 do begin
xForm := Screen.Forms[ i ];
if xForm.Owner = Application {или Application.MainForm, не съм сигурен} then begin
if fsModal in xForm.FormState then begin
...



Защо не опиташ така?



Тема Grashkata si e moiaнови [re: Formal]  
Автор NikB (любопитен)
Публикувано30.12.03 18:13



To tva si e za chudene (xForm := tForm(Screen.Forms);) - greshka si e moia.



Тема Re: Скрита модална форманови [re: NikB]  
Автор Dark_Dirk (+#+)
Публикувано05.01.04 12:21



Като гледам как сте подхванали въпроса с модалните форми да питам и аз:
Моя проблем е различен от този на NikB. Появава се на Windows XP.
Ползвам Delphi 5.
Всеки път като някоя форма изпълнява код за по дълго време Windows-a маркира прозореца като Not-Responding, при което въпросната форма може да се движи. След това ако се опитам да изведа друга модална форма тя се появява, но не е модална и се намира под главната !!!
Единственото решение, което намерих е да виквам веднъж Application.ProcessMessages преди ShowModal на втората форма.

Да имате впечатления или повече инфо по този проблем ?

Може да го получите по следния начин:
една форма с един бутон.

procedure TForm1.Button1Click(Sender: TObject);
begin
Sleep(10);
Form2.ShowModal;
end;

Ако по време на заспиването движите формата след това се появяват 2 форми и не са модални, но ако имате:

procedure TForm1.Button1Click(Sender: TObject);
begin
Sleep(10);
Application.ProcessMessages;
Form2.ShowModal;
end;

всичко работи нормално ?!?



Тема При мен не е таканови [re: Dark_Dirk]  
Автор NikB (любопитен)
Публикувано05.01.04 13:05



(най-вероятно имаш предвид Sleep(10000) - няма значение)

Пробвах примерът ти (и аз съм на XP/D5), но при мен (и през Делфито и като приложение) не можах да накарам Form1 да се движи през Sleep-a и да си остане над Form2.
Може би XP има опция, update, или цялата работа зависи от Owner или DefaulMonitor на формитe. Ще го пробвам по-късно.

(А и проблемите ни не са много различни)



Тема Re: При мен не е таканови [re: NikB]  
Автор Dark_Dirk (+#+)
Публикувано05.01.04 16:43



Абсолютно си прав за sleep-a
Ефекта се появява ако първата форма извършва някаква дълга обработка или за по-просто sleep. Ако упорито пробваш да я местиш през това време след около 3 секунди тя ще се "откачи" и ще започне да се мести. На caption-a ще пише Alabala - Not responding. Ако не я местиш тя не се "откача" и проблем няма.
По наблюдения с програмата Grider, когато формата се "откачи", Windows-a дори променя classname-a на формата. Този ефект сме го получавали на повече от 100 компютъра с Win XP Pro или Home, така че 100% го има.



Тема Re: Скрита модална форманови [re: NikB]  
АвторLando (Нерегистриран)
Публикувано11.01.04 22:20



xForm.BringToFront;




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.