Головна сторінка
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;

інтерфейс
використовує
sysutils,windows;

function ForceForegroundWindow (hwnd: THandle): Boolean;

реалізація

function ForceForegroundWindow (hwnd: THandle): Boolean;
сопзЬ
SPI_GETFOREGROUNDLOCKTIMEOUT = $ 2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $ 2001;
було
ForegroundThreadID: DWORD;
ThisThreadID: DWORD;
timeout: DWORD;
починати
if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);

if GetForegroundWindow = hwnd then Result := True
ще
починати
// 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
починати
// 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
починати
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
AttachThreadInput (ThisThreadID, ForegroundThreadID, False);
Result := (GetForegroundWindow = hwnd);
end;
if not Result then
починати
// 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;
кінець
ще
починати
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
end;

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

unit setselffocus;

інтерфейс
використовує
sysutils,windows;

function ForceForegroundWindow (hwnd: THandle): Boolean;

реалізація

function ForceForegroundWindow (hwnd: THandle): Boolean;
сопзЬ
SPI_GETFOREGROUNDLOCKTIMEOUT = $ 2000;
SPI_SETFOREGROUNDLOCKTIMEOUT = $ 2001;
було
ForegroundThreadID: DWORD;
ThisThreadID: DWORD;
timeout: DWORD;
починати
if IsIconic(hwnd) then ShowWindow(hwnd, SW_RESTORE);

if GetForegroundWindow = hwnd then Result := True
ще
починати
// 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
починати
// 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
починати
BringWindowToTop(hwnd); // IE 5.5 related hack
SetForegroundWindow(hwnd);
AttachThreadInput (ThisThreadID, ForegroundThreadID, False);
Result := (GetForegroundWindow = hwnd);
end;
if not Result then
починати
// 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;
кінець
ще
починати
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.58 MB
Час: 0.046 c
6-1535
INTAARI
2003-06-25 14:28
2003.09.01
Як передати по UDP рядок в локальну мережу


6-1520
Карелін Артем
2003-06-26 13:39
2003.09.01
Відсилання пошти через проксі.


3-1325
corte ™
2003-08-07 10:01
2003.09.01
Всім привіт. Чи є що то на подобу BatchMove для ADO ??


1-1446
Psibug
2003-08-16 09:48
2003.09.01
Генератор хеш-кодів


3-1302
n13
2003-08-09 16:27
2003.09.01
Гучний





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська