Главная страница

Форум: "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];

Наверх

Top.Mail.Ru     Яндекс.Метрика













Память: 0.79 MB
Время: 0.045 c
3-1274
Владий
2003-08-11 09:50
2003.09.01
Можно ли сделать такой запрос:


3-1314
gsvserg
2003-08-08 15:25
2003.09.01
Возможно ли сделать такой запрос?


1-1395
imp403
2003-08-16 13:01
2003.09.01
Handles


3-1307
Leonon
2003-08-11 15:29
2003.09.01
При вызове Post выдает Index is Read Only


4-1741
Fighter
2003-07-02 05:24
2003.09.01
Как зная Handle окна определить следующее...





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