Форум: "WinAPI";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
Вниз
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c