Главная страница
    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.044 c
6-1120561993
DVYdm
2005-07-05 15:13
2005.11.20
отправка получение данных через GPRS


2-1131107056
Eksell
2005-11-04 15:24
2005.11.20
Kak vydernuti resurs iz programmy?


3-1128650157
eJack
2005-10-07 05:55
2005.11.20
TADOQuery - заморочки


14-1130069809
Profi
2005-10-23 16:16
2005.11.20
Просто приколы какие-то!


5-1110306238
Monk
2005-03-08 21:23
2005.11.20
Классы дельфы





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