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

Вниз

Как установить Focus окна   Найти похожие ветки 

 
ArtemESC ©   (2005-09-18 21:17) [0]

SetFocus(Handle) - не помогает...


 
Игорь Шевченко ©   (2005-09-18 23:35) [1]

помогает


 
Джо ©   (2005-09-18 23:43) [2]

Вероятно, под "фокусом" понимается нечто другое. Может, активность приложения? Бгъ знаетъ.


 
Игорь Шевченко ©   (2005-09-19 00:18) [3]

Джо ©   (18.09.05 23:43) [2]


> Вероятно, под "фокусом" понимается нечто другое. Может,
> активность приложения?


Или наводка изображения монитора на резкость ?


 
Lamer@fools.ua ©   (2005-09-19 08:48) [4]

>>Джо ©   (18.09.05 23:43) [2]

http://delphimaster.net/view/15-1126895306/


 
ArtemESC ©   (2005-09-19 09:05) [5]

Не ребят не помогает...
У меня окно создается динамически, через функции API.
Окно отображется, но фокус не устанавилваеться.

Фокус - активность данного окна.


 
ANB ©   (2005-09-19 10:42) [6]

Активность окна и фокус - суть разные вещи.
Фокус более меннее гарантировано ставится SetFocus или WM_SETFOCUS (иногда второе работает надежнее), но АКТИВНЫМ окно от этого не станет.
Вообще то MS старательно борется с этой возможностью от версии к версии, но вот процедурка, которая делает окно верхним/активным :

function GetMainWindow (hWindow : THandle) : THandle;
var hMainWindow, hW : THandle;
begin
hMainWindow := hWindow;
hW := hWindow;
repeat
 hW := GetParent(hW);
 if (hW <> 0)
 then hMainWindow := hW;
until (hW = 0);
Result := hMainWindow;
end;

procedure Set_Foreground_Window (hWindow : THandle);
var dwTimeout : DWord;
   hMainWindow, hFGW, hMDIClient : THandle;
begin
if (hWindow = 0) then Exit;
// Получим главное окно
hMainWindow := GetMainWindow(hWindow);
// Узнаем какое окно сейчас наверху
hFGW := GetForegroundWindow;
// Если не наше - будем поднимать
if (hMainWindow <> hFGW) then begin
 // Отключим моргание вместо подъема окна
 SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @dwTimeout, 0);
 SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, nil, 0);
 try
  // Попробуем разными способами поднять окно
  SendMessage(GetDesktopWindow(), WM_SYSCOMMAND, SC_HOTKEY, hMainWindow);
  SwitchToThisWindow(hMainWindow, True);
  SetForegroundWindow(hMainWindow);
  // Для MDI окон
  if (hWindow <> hMainWindow) then begin
   // Найдем MDI Client
   hMDIClient := FindWindowEx(hMainWindow, 0, "MDIClient", "");
   // Пошлем ему сообщение WM_MDIACTIVATE
   SendMessage(hMDIClient, WM_MDIACTIVATE, hWindow, 0);
  end;
 finally
  // Восстановим моргание
  SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, @dwTimeout, 0);
 end;
end;
end;

ЗЫ 1. Использовать Set_Foreground_Window
ЗЫ 2. Возможно, процедурка не оптимальна
ЗЫ 3. А зачем это нужно ?
ЗЫ 4. Телепаты еще не проснулись, формулируй вопрос грамотнее


 
Джо ©   (2005-09-19 15:40) [7]

[3] Игорь Шевченко ©   (19.09.05 00:18)
[4] Lamer@fools.ua ©   (19.09.05 08:48)
Я уточнял вопрос у автора ветки. Как я и предполагал, имелось в виду "нечто другое" :)



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

Форум: "WinAPI";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.049 c
3-1128921953
Layner
2005-10-10 09:25
2005.11.20
Через ADO не работает SQL запрос в Access, из Access нормально..


14-1130510162
Копир
2005-10-28 18:36
2005.11.20
Средне-статистический респондент на конфе "Потрепать себя".


2-1130856983
Arazel
2005-11-01 17:56
2005.11.20
Быстрый пойск в масиве


4-1127129624
jeka_t
2005-09-19 15:33
2005.11.20
Как можно распечатать файл LPT?


3-1128584311
Andrushk
2005-10-06 11:38
2005.11.20
TSQLStoredProc и схема





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