Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  160

•  TDictionary Custom Sort  3 337

•  Fast Watermark Sources  3 088

•  3D Designer  4 847

•  Sik Screen Capture  3 342

•  Patch Maker  3 553

•  Айболит (remote control)  3 658

•  ListBox Drag & Drop  3 015

•  Доска для игры Реверси  81 695

•  Графические эффекты  3 945

•  Рисование по маске  3 249

•  Перетаскивание изображений  2 629

•  Canvas Drawing  2 752

•  Рисование Луны  2 580

•  Поворот изображения  2 189

•  Рисование стержней  2 168

•  Paint on Shape  1 568

•  Генератор кроссвордов  2 235

•  Головоломка Paletto  1 767

•  Теорема Монжа об окружностях  2 229

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 057

•  Игра HIP  1 282

•  Игра Go (Го)  1 230

•  Симулятор лифта  1 475

•  Программа укладки плитки  1 216

•  Генератор лабиринта  1 548

•  Проверка числового ввода  1 365

•  HEX View  1 497

•  Физический маятник  1 358

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Вывести окно на передний план



Оформил: DeeCo

{ 
  Windows 98/2000 doesn't want to foreground a window when 
  some other window has the keyboard focus. 
  ForceForegroundWindow is an enhanced SetForeGroundWindow/bringtofront 
  function to bring a window to the front. 
}


 { 
  Manchmal funktioniert die SetForeGroundWindow Funktion 
  nicht so, wie sie sollte; besonders unter Windows 98/2000, 
  wenn ein anderes Fenster den Fokus hat. 
  ForceForegroundWindow ist eine "verbesserte" Version von 
  der SetForeGroundWindow API-Funktion, um ein Fenster in 
  den Vordergrund zu bringen. 
}


 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; { ForceForegroundWindow }


 // 2. Way: 
//********************************************** 

procedure ForceForegroundWindow(hwnd: THandle);
   // (W) 2001 Daniel Rolf 
  // http://www.finecode.de 
  // rolf@finecode.de 
var
   hlp: TForm;
 begin
   hlp := TForm.Create(nil);
   try
     hlp.BorderStyle := bsNone;
     hlp.SetBounds(0, 0, 1, 1);
     hlp.FormStyle := fsStayOnTop;
     hlp.Show;
     mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
     mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
     SetForegroundWindow(hwnd);
   finally
     hlp.Free;
   end;
 end;

 // 3. Way: 
//********************************************** 
// by Thomas Stutz 

{ 
  As far as you know the SetForegroundWindow function on Windows 98/2000 can 
  not force a window to the foreground while the user is working with another window. 
  Instead, SetForegroundWindow will activate the window and call the FlashWindowEx 
  function to notify the user. However in some kind of applications it is necessary 
  to make another window active and put the thread that created this window into the 
  foreground and of course, you can do it using one more undocumented function from 
  the USER32.DLL. 

  void SwitchToThisWindow (HWND hWnd,  // Handle to the window that should be activated 
  BOOL bRestore // Restore the window if it is minimized 
); 

}

 procedure SwitchToThisWindow(h1: hWnd; x: bool); stdcall;
   external user32 Name 'SwitchToThisWindow';
          {x = false: Size unchanged, x = true: normal size}


 procedure TForm1.Button2Click(Sender: TObject);
 begin
   SwitchToThisWindow(FindWindow('notepad', nil), True);
 end;




Похожие по теме исходники

Блокнотик




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте