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

Вниз

Win2k + дочернее окно + Stay On top = false ???   Найти похожие ветки 

 
Maks Realov   (2003-07-25 17:43) [0]

Почему в Win2k НИКАКИМИ способами, которые работали в Win9x нельзя сделать ДОЧЕРНЕЕ окно приложения Aleways Stay On Top?
Ни SetWindowPos(Handle, HWND_TOPVOST, ...), ни FormStyle:= fsStayOnTop;

Как добится того, что бы НЕглавная форма стала StayOnTop не только относительно окон своего приложения, но и относительно ВСЕХ окон???


 
Aleksey Pavlov ©   (2003-07-25 17:52) [1]

Как сделать неглавное окно StayOnTop относительно всех окон системы я не знаю.
Но можно сделать нужное окно - главным. Вообще говоря - главным окном приложения назначается окно, которое создаётся первым с помощью Application.CreateForm.
Так что ставьте Application.CreateForm(TForm2, Form2); первой:

begin
Application.Initialize;
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm:= False;
Form1.Visible:= True;
Application.Run;
end.

А когда понадобится показать Form2: Form2.FormStyle:= fsStayOnTop; и Show;
Оно будет StayOnTop относительно всех окон системы.

Другого способа я не знаю.
(все "старые" способы, как Вы верно заметили - не работают под Win200).


 
Aleksey Pavlov ©   (2003-07-25 17:54) [2]

...Win 2000



 
Игорь Шевченко ©   (2003-07-25 18:20) [3]


{
Модуль: PopupForm

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

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

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

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

interface

uses
Windows, Messages, SysUtils,
{$IFDEF VER140}
Variants,
{$ENDIF}
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
( Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE OR SWP_NOSIZE)

{
Модуль: PopupForm

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

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

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

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

interface

uses
Windows, Messages, SysUtils,
{$IFDEF VER140}
Variants,
{$ENDIF}
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.



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

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

Наверх




Память: 0.48 MB
Время: 0.017 c
3-96092
AlexPul
2003-09-09 17:30
2003.09.29
Как вручную из командной строки запустить сервер Firebird ?


3-96154
ДмирийК
2003-09-08 09:14
2003.09.29
Отчеты в Rave


1-96255
Julie
2003-09-17 08:12
2003.09.29
EhLib


3-96068
Senator
2003-09-10 09:52
2003.09.29
Restore


1-96241
Nikulin
2003-09-17 14:13
2003.09.29
Помогите разобраться и понять в чем я не прав...