Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.27;
Скачать: CL | DM;

Вниз

Как повесть программу поверх всех окон?   Найти похожие ветки 

 
Login5   (2002-06-09 03:15) [0]

.


 
SPeller ©   (2002-06-09 06:39) [1]

SetWindowPos


 
Burmistroff (!!!)   (2002-06-13 14:22) [2]

А вопрос-то на самом деле интересный!
Как быть вот с таким примером:

Есть проект с 2 формами (все свойства - по умолчанию)
Кладем на 1ую форму кнопку и пишем

procedure TForm1.Button1Click(Sender: TObject);
begin
SetWindowPos(Handle,hwnd_TopMost,0,0,0,0,SWP_SHOWWINDOW+SWP_NOMOVE+SWP_NOSIZE);
SetWindowPos(form2.Handle,hwnd_TopMost,0,0,0,0,SWP_SHOWWINDOW+SWP_NOMOVE+SWP_NOSIZE)
form2.show;
end;



Запускаем проект.
Появляется Форма 1 - она активная и поверх всех окон.
Жмем на кнопку
Появляется форма 2 - она активная, но не поверх всех окон
Жмем на фоновое окно (какое-нибудь левое, например - окно Delphi)
Форма 2 прячется за ним
Жмем на Форму 2 - она всплывает
Жмем опять на фоновое окно - ОБЕ формы прячутся за ним (!!!)

В данном примере использовались Delphi 6 и WinXP. Возможно на других платформах/версиях все будет не так просто


 
Lord Warlock ©   (2002-06-13 14:25) [3]

А если поставить у формы свойство FormStyle в StayOnTop, (если она не MDI разумеется)?


 
Игорь Шевченко ©   (2002-06-13 14:26) [4]

Неглавное окно, вроде, нельзя сделать поверх всех :-)


 
Burmistroff   (2002-06-13 14:29) [5]

>Lord Warlock
Происходит тоже самое (даже если убрать SetWindowPos)


 
Burmistroff   (2002-06-13 14:31) [6]

>Игорь Шевченко
Можно, если оба окна видимы изначально, а даже если и нельзя, то с кагого лешего Форма 1 становится закрываемой?


 
Lord Warlock ©   (2002-06-13 14:32) [7]


> Burmistroff (13.06.02 14:29)


Это был не вопрос а утверждение в вопросительной форме :))


 
Игорь Шевченко ©   (2002-06-13 15:04) [8]

Burmistroff (13.06.02 14:31)

This form remains on top of the desktop and of other forms in the project, except any others that also have FormStyle set to fsStayOnTop. If one fsStayOntop form launches another, neither form will consistently remain on top.



 
Burmistroff   (2002-06-13 15:23) [9]

>Игорь Шевченко
И всё же это глупо. Более чем необоснованное ограничение!


 
Игорь Шевченко ©   (2002-06-13 15:37) [10]

Глупо делать формы такие, которые вечно болтаются поверх всех и мешают работать


 
Burmistroff   (2002-06-13 17:06) [11]

>Игорь Шевченко
Точно! Пусть TaskManager в Win 2000 будет прятаться за окно повисшего приложения, чтобы невозможно было вытащить TaskManager и убить зависшую прогу.

И всё же: есть ли способ заставить неглавное окно приложения заставить висеть неаверху?


 
Игорь Шевченко ©   (2002-06-13 17:47) [12]

Burmistroff (13.06.02 17:06)

TaskManager уже написан, зачем изобретать велосипед ? :-)


> И всё же: есть ли способ заставить неглавное окно приложения
> заставить висеть неаверху?


Есть


 
Burmistroff   (2002-06-13 18:00) [13]

>Игорь Шевченко
Ну зачем же все воспринимать так буквально :-)? К тому же и TaskManager"у есть чему поучиться

Буду безудержно рад узнать способ заставления неглавного окна висеть сверху.


 
Игорь Шевченко ©   (2002-06-14 09:30) [14]

Часть проекта. Если интересен весь проект - пишите.

{
Модуль: PopupForm

Описание: Демонстрация возможности неглавной формы приложения быть поверх
всех окон в системе.
Используется простой способ: Управление стилем окна и назначение
родительским окном HWND_DEKSTOP.

Автор: Игорь Шевченко

Дата создания: 13.06.2002

История изменений:
}
unit PopupForm;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TfPopup = class(TForm)
AlwaysOnTopCheckBox: TCheckBox;
procedure FormDestroy(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure AlwaysOnTopCheckBoxClick(Sender: TObject);
protected
procedure CreateParams (var Params : TCreateParams); override;
end;

var
fPopup: TfPopup;

implementation

{$R *.dfm}

procedure TfPopup.CreateParams (var Params : TCreateParams);
begin
inherited;
if AlwaysOnTopCheckBox.Checked then
with Params do begin
Style := (Style OR WS_POPUP) AND (NOT WS_CHILD);
WndParent := HWND_DESKTOP;
end;
end;

procedure TfPopup.FormDestroy(Sender: TObject);
begin
fPopup := nil;
end;

procedure TfPopup.FormActivate(Sender: TObject);
begin
if AlwaysOnTopCheckBox.Checked then
SetWindowPos (Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE OR SWP_NOSIZE);
end;

procedure TfPopup.AlwaysOnTopCheckBoxClick(Sender: TObject);
begin
RecreateWnd();
end;

end.


 
Burmistroff (thanks)   (2002-06-14 14:55) [15]

>Игорь Шевченко
Огромное спасибо!


 
Игорь Шевченко ©   (2002-06-14 14:56) [16]

Burmistroff (thanks) (14.06.02 14:55)

Полный проект лежит в кладовке, в разделе "Готовые программы" под названием StayOnTop - интересно



Страницы: 1 вся ветка

Текущий архив: 2002.06.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.015 c
14-88985
Ura
2002-05-16 14:27
2002.06.27
Case


7-89048
star
2002-03-29 15:40
2002.06.27
Как получить доступ к FAT диска ?


1-88837
svv
2002-06-17 11:30
2002.06.27
Как в заголовок вывести стрелочку (в дос код 25)?


1-88785
rog
2002-06-16 12:41
2002.06.27
Как отделить часть экрана, и рисовать на ней что-нибудь.


1-88789
SPeller
2002-06-16 03:29
2002.06.27
Создание/удаление формы