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

Вниз

Как активировать (передать фокус в) свое окно?   Найти похожие ветки 

 
RIMMER   (2003-06-17 23:14) [0]

Вопрос может показаться тупым, но все же. В мою форму притаскивают URL со страницы IE. Форма его благополучно принимает (с помощью URLDropTarget http://www.torry.net/vcl/system/draganddrop/urldroptarget.zip), прописывает куда надо и... активным становиться окно IE :( А надо чтоб моё. Как? Выкрутасы с SetFocus, SetActiveWindow - не помогли :((


 
Diamond Cat   (2003-06-18 01:45) [1]

Я тоже мучился этой проблемой, не так давно подсказади, отлично работает, смотри тут http://delphimaster.net/view/4-1050876268/


 
RIMMER   (2003-06-23 00:04) [2]

Мдаа... Diamond Cat, хоть имя той ветки подскажи, не хочет открываться!! Пожаааалуйста!


 
RIMMER   (2003-06-28 00:33) [3]

Спасите! Кто-нибудь! Ветка пропала!!! Дайте хоть сабж ее, кто знал, посмотрите у себя в Журнале!!!!!


 
Diamond Cat   (2003-06-28 00:53) [4]

Сделаем проще вот исходник

unit setselffocus;

interface
uses
sysutils,windows;

function ForceForegroundWindow(hwnd: THandle): Boolean;

implementation

function ForceForegroundWindow(hwnd: THandle): Boolean;
const
SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
ForegroundThreadID: DWORD;
ThisThreadID: DWORD;
timeout: DWORD;
begin
if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);

if GetForegroundWindow = hwnd then Result := True
else
begin
// Windows 98/2000 doesn"t want to foreground a window when some other
// window has keyboard focus

if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
(Win32MinorVersion > 0)))) then
begin
// Code from Karl E. Peterson, www.mvps.org/vb/sample.htm
// Converted to Delphi by Ray Lischner
// Published in The Delphi Magazine 55, page 16

Result := False;
ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
begin
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
Result := (GetForegroundWindow = hwnd);
end;
if not Result then
begin
// Code by Daniel P. Stasinski
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
SPIF_SENDCHANGE);
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hWnd);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
end;
end
else
begin
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
end;

( GetForegroundWindow = hwnd) Сделаем проще вот исходник

unit setselffocus;

interface
uses
sysutils,windows;

function ForceForegroundWindow(hwnd: THandle): Boolean;

implementation

function ForceForegroundWindow(hwnd: THandle): Boolean;
const
SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
var
ForegroundThreadID: DWORD;
ThisThreadID: DWORD;
timeout: DWORD;
begin
if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);

if GetForegroundWindow = hwnd then Result := True
else
begin
// Windows 98/2000 doesn"t want to foreground a window when some other
// window has keyboard focus

if ((Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 4)) or
((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
((Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and
(Win32MinorVersion > 0)))) then
begin
// Code from Karl E. Peterson, www.mvps.org/vb/sample.htm
// Converted to Delphi by Ray Lischner
// Published in The Delphi Magazine 55, page 16

Result := False;
ForegroundThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
ThisThreadID := GetWindowThreadPRocessId(hwnd, nil);
if AttachThreadInput(ThisThreadID, ForegroundThreadID, True) then
begin
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
AttachThreadInput(ThisThreadID, ForegroundThreadID, False);
Result := (GetForegroundWindow = hwnd);
end;
if not Result then
begin
// Code by Daniel P. Stasinski
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @timeout, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(0),
SPIF_SENDCHANGE);
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hWnd);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, TObject(timeout), SPIF_SENDCHANGE);
end;
end
else
begin
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
end;

Result := (GetForegroundWindow = hwnd);
end;
end;

end.


 
RIMMER   (2003-07-01 00:01) [5]

THANKS A LOT!
GRAND MERCI!
ОГРОМНОЕ СПАСИБО!


 
DVM   (2003-07-01 11:49) [6]

Можно еще SwithToThisWindows использовать. В user32.dll она кажется находится. Но ForceForegroundWindow() лучше работает.


 
Diamond Cat   (2003-07-02 14:57) [7]


> DVM © (01.07.03 11:49)
SwithToThisWindows не работает с окнами имеющими стиль WS_EX_TOOLWINDOW приведенный же пример нормально работает



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

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

Наверх





Память: 0.47 MB
Время: 0.009 c
1-1391
-Night $kull-
2003-08-15 18:27
2003.09.01
Нетипизированные файлы


3-1335
explorer
2003-08-06 08:37
2003.09.01
Картинки в БД


14-1634
Viktor Kushnir
2003-08-12 09:02
2003.09.01
Клава убийца винды.


1-1392
F.E.V.
2003-08-16 09:28
2003.09.01
Буквы и цифры


1-1367
Боян Георгиев
2003-08-17 18:08
2003.09.01
Как получить имя keyboard layot-a?





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