Главная страница
    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.041 c
14-1130249321
Hamertime
2005-10-25 18:08
2005.11.20
Расшифровка бинарного кода


3-1128617563
Michael5
2005-10-06 20:52
2005.11.20
Скролл "колесиком" в DBGrid работает только в видимой части грида


1-1130481807
SergP.
2005-10-28 10:43
2005.11.20
Как установить приоритет процессу?


4-1127275499
RDS
2005-09-21 08:04
2005.11.20
права NTFS


14-1130588683
Sergey_R
2005-10-29 16:24
2005.11.20
ArrauGrid for Delphi7





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