Как сделать форму активной, Форма находится в 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