Форум: "WinAPI";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Вниздействительно поверх всех окон Найти похожие ветки
← →
Pank (2003-09-01 12:46) [0]Как сделать, чтобы форма оставалась действительно поверх всех окон? Спасибо.
← →
Evgeniy_K (2003-09-01 14:17) [1]Нужно постоянно помещать форму вверх очереди, но тогда она будет перекрывать даже собственные Popup-меню.
← →
Игорь Шевченко (2003-09-01 15:23) [2]SetWindowPos (Form1.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE) не помогает ?
← →
Pank (2003-09-01 17:36) [3]2Игорь Шевченко: не-а, не помогает.
2Evgeniy_K: а как это сделать?
← →
Игорь Шевченко (2003-09-01 17:41) [4]Pank (01.09.03 17:36) [3]
> не-а, не помогает.
Подробнее: когда вызываешь, когда не помогает ?
← →
Pank (2003-09-01 17:48) [5]Написал эту строку при создании формы.
Но потом всё равно она закрывается другими приложениями.
Или вы имели ввиду, что надо это повторять через таймер? Объясните, пожалуйста.
← →
Игорь Шевченко (2003-09-01 17:59) [6]А форма главная или неглавная ?
← →
Pank (2003-09-01 18:04) [7]Не главная.
У меня главная форма лежит в трее, а эта вот, вторая, должна как указатель быть сверху.
← →
Igor__ (2003-09-01 18:39) [8]А чем тебе не нравица свойство FormStyle.
← →
Игорь Шевченко (2003-09-02 10:01) [9]У неглавной формы, для того, чтобы она была 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.
← →
Pank (2003-09-02 18:20) [10]2Igor__: Не подходит, потому что тогда форма поверх всех окон только моего приложения и перекрывается той же делфой.
2Игорь Шевченко: Спасибо большое, это помогло. Но теперь другая проблема: главная форма, как и раньше лежит в трее, а вот та, которую я сделал поверх всех, отображается на панели задач. Можно ли это исправить?
← →
Игорь Шевченко (2003-09-02 18:22) [11]Например, так:
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:56) [12]Чтож, вопрос исчерпан. Спасибо за помощь.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c