Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать так чтоб окно было всегда на первом плане


graY ©   (2004-03-08 09:20:00) 

Функция Formstyly:=onstayonstope не помогает.Вот думаю если    

с таймером поставить какуюнибудь функцию типа апликашион.ресторе но апишную.Подскажите пожайлуста


Reindeer Moss Eater   (2004-03-09 11:15:00) [1]

Как сделать так чтоб окно было всегда на первом плане

1. Думаем -  а возможно ли такое?.
2. Допустим, что это возможно.
3. Создаем программу с таким окном.
4. Запускаем её.
5. А потом запускаем вторую копию такой программы.
6. Переходим у п.1


NAlexey   (2004-03-09 08:46:00) [2]

>graY ©   (08.03.04 16:59) [4]
Каких таких вирусов?


graY   (2004-03-08 16:59:00) [3]

А если посерьёзнее без вирусов


DDA   (2004-03-08 12:23:00) [4]

//-------------------------------
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 }
//-----------------------------------------
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 ForceForegroundWindow(Application.Handle);
end;


graY   (2004-03-08 10:18:00) [5]

речь не про грамотность это я так написал.Все равно не помогает что fsStayOnTop что Fsstayontop если у приложения 2 окна то это почемуто не работает.Один раз щелкнеш на месте второй раз щелкаеш уплывает назад


Gero   (2004-03-08 09:34:00) [6]

> Функция Formstyly:=onstayonstope не помогает

И не удивительно. Попробуй FormStyle := fsStayOnTop.


Наверх

Титульная страница Поиск, карта сайта Написать письмо