![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
действительно поверх всех окон
Pank © (2003-09-01 12:46:00)
Как сделать, чтобы форма оставалась действительно поверх всех окон? Спасибо.
Pank (2003-09-02 18:56:00) [1]
Чтож, вопрос исчерпан. Спасибо за помощь.
Игорь Шевченко (2003-09-02 18:22:00) [2]
Например, так:
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);
ExStyle := ExStyle or WS_EX_TOOLWINDOW;WndParent := HWND_DESKTOP;
end;
end;
Pank (2003-09-02 18:20:00) [3]
2Igor__: Не подходит, потому что тогда форма поверх всех окон только моего приложения и перекрывается той же делфой.
2Игорь Шевченко: Спасибо большое, это помогло. Но теперь другая проблема: главная форма, как и раньше лежит в трее, а вот та, которую я сделал поверх всех, отображается на панели задач. Можно ли это исправить?
Игорь Шевченко (2003-09-02 10:01:00) [4]
У неглавной формы, для того, чтобы она была StayOnTop, надо задавать Parent HWND_DESKTOP. Примерно, как здесь:
{
Модуль: PopupForm
Описание: Демонстрация возможности неглавной формы приложения быть поверх
всех окон в системе.
Используется простой способ: Управление стилем окна и назначение
родительским окном HWND_DEKSTOP.
Автор: Игорь Шевченко
Дата создания: 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.
Igor__ (2003-09-01 18:39:00) [5]
А чем тебе не нравица свойство FormStyle.
Pank (2003-09-01 18:04:00) [6]
Не главная.
У меня главная форма лежит в трее, а эта вот, вторая, должна как указатель быть сверху.
Игорь Шевченко (2003-09-01 17:59:00) [7]
А форма главная или неглавная ?
Pank (2003-09-01 17:48:00) [8]
Написал эту строку при создании формы.
Но потом всё равно она закрывается другими приложениями.
Или вы имели ввиду, что надо это повторять через таймер? Объясните, пожалуйста.
Игорь Шевченко (2003-09-01 17:41:00) [9]
Pank (01.09.03 17:36) [3]
> не-а, не помогает.
Подробнее: когда вызываешь, когда не помогает ?
Pank (2003-09-01 17:36:00) [10]
2Игорь Шевченко: не-а, не помогает.
2Evgeniy_K: а как это сделать?
Игорь Шевченко (2003-09-01 15:23:00) [11]
SetWindowPos (Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE) не помогает ?
Evgeniy_K (2003-09-01 14:17:00) [12]
Нужно постоянно помещать форму вверх очереди, но тогда она будет перекрывать даже собственные Popup-меню.