Application_SetFocus
13 отговора
259 прегледа
Application_SetFocus
Имам програма P1 която чака появяване на събитие - например запис на файл F в определена директория.
След това събитие правя обработка на същия този файл F и извиквам
програма P2 която работи с параметър файла F.
P2 извиквам с CreateProcces.
P2 издава диалог за потвърждение ShowMessageDlg.
Проблема:
на фокус е друга програма P3.
Ако програмата P1 си работи и не е на фокус то при извикване на P2 и след това на диалога искам фокуса на активната програма в Windows да е върху P2 или поне P1....
Правих опити с Application na P1 и P2 но на фокус си остава P3 и трябва да натисна поне ALT-TAB за да сменя фокуса.
След това събитие правя обработка на същия този файл F и извиквам
програма P2 която работи с параметър файла F.
P2 извиквам с CreateProcces.
P2 издава диалог за потвърждение ShowMessageDlg.
Проблема:
на фокус е друга програма P3.
Ако програмата P1 си работи и не е на фокус то при извикване на P2 и след това на диалога искам фокуса на активната програма в Windows да е върху P2 или поне P1....
Правих опити с Application na P1 и P2 но на фокус си остава P3 и трябва да натисна поне ALT-TAB за да сменя фокуса.
Re: Application_SetFocus
Опитвал ли си P2 да прави Application.BringToFront;?
Или в краен случай SetForegroundWindow(Application.Mainform.Handle);
Или в краен случай SetForegroundWindow(Application.Mainform.Handle);
Re: Application_SetFocus
И двата метода активират "банера" на програмата в TaskBar-а но така и не активират приложението на фокус...:((((
Преместих събщението в P1 но това мисля няма значение... Въпроса е принципен - как коя да е програма да стане "Top" на екрана и без никакви допълнитени движения да се фокусира.... така че ако те пита нещо си Да или Не да мога само с Enter или ESC да отговоря .....
P.S. P1 не е минимизирана но и това май не влияе в случая....
Преместих събщението в P1 но това мисля няма значение... Въпроса е принципен - как коя да е програма да стане "Top" на екрана и без никакви допълнитени движения да се фокусира.... така че ако те пита нещо си Да или Не да мога само с Enter или ESC да отговоря .....
P.S. P1 не е минимизирана но и това май не влияе в случая....
Re: Application_SetFocus
Средата е XP... така че е възможно горното за 98 да бачка но на мен ми трябва за всичкото Win да върви....
...сигурно ше да е някое API на Win-а .....
...сигурно ше да е някое API на Win-а .....
Re: Application_SetFocus
Доколкото си спомням при CreateProcess можеше да задаваш window state на създавания процес (SW_xxxx константите). Как го създаваш в твоя случай?
При WinXP имаше един такъв момент, че ако потребителят работи с едно приложение, фокуса остава в него, освен ако потребителят не превключи изрично (като се замислиш - има смисъл, аз много мразя докато пиша, посредата на думата да ми изкочи някое друго приложение и да си довърша думата там). Та ако не стане, виж дали не можеш да направиш на P2 прозореца да е 'stay on top', или да потърсиш нещо от рода на 'system-wide modal window'
При WinXP имаше един такъв момент, че ако потребителят работи с едно приложение, фокуса остава в него, освен ако потребителят не превключи изрично (като се замислиш - има смисъл, аз много мразя докато пиша, посредата на думата да ми изкочи някое друго приложение и да си довърша думата там). Та ако не стане, виж дали не можеш да направиш на P2 прозореца да е 'stay on top', или да потърсиш нещо от рода на 'system-wide modal window'
Re: Application_SetFocus
Много много не се зачетох просто копирах последната от функциите ForceForegrount от страницата, добавих я в проекта и бачка п'ирфектно....сигурно и за 98 и за 2000 върви без проблем....
Невольо...невольооооооууууу... са ше видиш Windows що за чеп е........
Невольо...невольооооооууууу... са ше видиш Windows що за чеп е........
Re: Application_SetFocus
Даже като гледам може и да се върне фокуса към P3.... но засегя няма да я пипам функцията щото много не ме бива по тия API-та...
Ако някой по напреднал му се занимава все пак ще съм му благодарен ако пейстне код за връщане на фокуса....
Very 10x for all...
Ако някой по напреднал му се занимава все пак ще съм му благодарен ако пейстне код за връщане на фокуса....
Very 10x for all...
Re: Application_SetFocus
ок. ама по късно, като се прибера у дома. малко съм зает сега
Re: Application_SetFocus
За да възтановиш минимизирана програма напиши следното:
ShowWindow(Form1->Handle,SW_RESTORE);
Използва се хендъла на формата, която трябва да стане активна, а не на Application-а.
За да изведеш съобщение от минимизирана програма:
Application->MessageBoxA("ala bala","MyExe",MB_OK|MB_ICONINFORMATION|MB_SYSTEMMODAL);
Програмата ти остава минимизирана.
Ако ще изпълняваш горните редове от събитие генерирано от таймер, първо спри таймера и след това покажи съобщението/възтанови състоянието на програмата.
За да възтановиш нормалното състояние на др. програма трябва да се направи следното:
- С FindWindow(NULL,"AppCaption") намираш хендъла на другата програма
- С PostMessage(хендъла-на-др-програма,SW_RESTORE,0,0) възтановяваш състоянието и преди да е минимизирана.
ShowWindow(Form1->Handle,SW_RESTORE);
Използва се хендъла на формата, която трябва да стане активна, а не на Application-а.
За да изведеш съобщение от минимизирана програма:
Application->MessageBoxA("ala bala","MyExe",MB_OK|MB_ICONINFORMATION|MB_SYSTEMMODAL);
Програмата ти остава минимизирана.
Ако ще изпълняваш горните редове от събитие генерирано от таймер, първо спри таймера и след това покажи съобщението/възтанови състоянието на програмата.
За да възтановиш нормалното състояние на др. програма трябва да се направи следното:
- С FindWindow(NULL,"AppCaption") намираш хендъла на другата програма
- С PostMessage(хендъла-на-др-програма,SW_RESTORE,0,0) възтановяваш състоянието и преди да е минимизирана.
Re: Application_SetFocus
Ok...:)))
for ( int exclam = 1; exclam < 10; exclam++ )
ShowMessage("Very 10x");
for ( int exclam = 1; exclam < 10; exclam++ )
ShowMessage("Very 10x");