Delphi - форма сообщения как окно другой задачи - PullRequest
0 голосов
/ 24 февраля 2011

У нас есть приложение, которое обрабатывает наше собственное сообщение - временная процедура считывает для них базу данных.Если найдена запись, то мы покажем форму модально.

Это не очень хорошее решение, потому что пользователь может печатать, видеть что-то и т. Д., И форма прерывает эту операцию.

Мне показалось, что я иногда видел, что диалоги, окна отсоединены от приложения, и они, похоже, являются еще одной задачей (панель задач имеет два элемента в это время).Но эти вещи случаются не часто, и они являются ошибками ...

Но тогда я хочу найти способ вызвать то же самое.

Таймер проверяет БД, и если этонашел запись, затем мы покажем форму на заднем плане, что, кажется, является другой задачей, и она мигает, и это периодически меняет заголовок.Когда пользователь щелкает по нему, он сам разрушается и отображает оригинальную форму «сообщения» как модальную.

Можем ли мы сделать это с трюками Win32?И как?

Спасибо: дд


Спасибо за первые ответы.

Я попытался создать простой пример.Вы можете увидеть здесь:

type
    TC = class(TPanel)
        private
        protected
            procedure WMActivate(var Message: TWMActivate); message WM_ACTIVATE;

        public
            procedure CreateParams(var Params: TCreateParams); override;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
    t : TC;
begin
    t := TC.Create(Self);
    t.Width := 100;
    t.Height := 100;
    t.Caption := 'aaaa';
    ShowWindow(t.Handle, sw_SHOW);
end;


{ TC }

procedure TC.CreateParams(var Params: TCreateParams);
begin
    inherited;
    Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
    Params.WndParent := GetDesktopwindow;
end;

procedure TC.WMActivate(var Message: TWMActivate);
begin
    if Message.Active <> WA_INACTIVE
        then begin
            SHowMessage('b');
            SHowWindow(Self.Handle, sw_HIDE);
        end;
end;

Это работает, но у меня есть одна проблема.Значок задачи совпадает с приложением.Если кто-то случайно щелкнул по нему, возможно, нажал не на тот элемент.Как переопределить иконку подокна?

Спасибо: dd

1 Ответ

0 голосов
/ 24 февраля 2011

Не целое решение, но часть головоломки, которая вам, вероятно, понадобится: для отображения формы с собственной кнопкой на панели задач вы можете переопределить CreateParams

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...