Как сделать форму активной, Форма находится в DLL |
Previous Top Next |
Code: |
procedure ShowMainForm; {©Drkb v.3(2007): www.drkb.ru} var hWnd, hCurWnd, dwThreadID, dwCurThreadID: THandle; OldTimeOut: DWORD; AResult: Boolean; begin ShowWindow(Application.Handle, SW_RESTORE); Application.MainForm.Visible := True; // Показываем главную форму
// Ставим нашу форму впереди всех окон hWnd := Application.Handle; SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @OldTimeOut, 0); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Pointer(0), 0); SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); hCurWnd := GetForegroundWindow; AResult := False; while not AResult do begin dwThreadID := GetCurrentThreadId; dwCurThreadID := GetWindowThreadProcessId(hCurWnd); AttachThreadInput(dwThreadID, dwCurThreadID, True); AResult := SetForegroundWindow(hWnd); AttachThreadInput(dwThreadID, dwCurThreadID, False); end; SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Pointer(OldTimeOut), 0); end; |
Взято из http://forum.sources.ru
Автор: Rouse_
©Drkb::00444