Как показать окно что действия как всплывающее меню?

Когда окно A является шоу, я хочу не показать другому ни один - модальное всплывающее окно B, но:

  1. Я не хочу, чтобы окно A стало неактивным из-за окна B, становится передним окном;
  2. Я хочу это, когда окно B фокусируется, я выпадающий управление полем комбинированного списка на окне A одним щелчком (обычно, необходимо нажать дважды, один для перемещения фокуса к окну A и второму для того, чтобы раскрыть поле комбинированного списка);

Как Вы видите, окно B, которое я хочу, является чем-то как более применимое всплывающее окно как всплывающее меню (который является меньше препятствием, чем генерал ни один - модальное окно, когда Вы хотите, чтобы оно ушло путем нажатия на любую другую часть родительского окна).

Я ясен по своему вопросу?Спасибо.

9
задан Edwin Yip 1 February 2010 в 17:00
поделиться

6 ответов

Я сам нашел решение здесь. Спасибо всем!:

Keep Window Inactive In Appearance Even When Activated

0
ответ дан 4 December 2019 в 21:49
поделиться

Чтобы окно не попало в фокус, необходимо либо задать стиль расширенного окна WS_EX_NOACTIVATE (Windows 2000 и выше), либо обрабатывать WM_MOUSEACTIVATE и возвращать MA_NOACTIVATE .

2
ответ дан 4 December 2019 в 21:49
поделиться

Я могу использовать это, чтобы не потерять фокус:

SetWindowPos(Form2.Handle, HWND_TOP, 0, 0, 0, 0,
  SWP_SHOWWINDOW or SWP_NOACTIVATE or SWP_NOSIZE or SWP_NOMOVE);

Вторая часть, которую я не очень хорошо понимал.

0
ответ дан 4 December 2019 в 21:49
поделиться

Невозможно удалить все атрибуты. Вы должны быть более конкретными в своем первом правиле, чтобы оно было нацелено только на те элементы, которые вы хотите. Либо это, либо необходимо явно задать нужные значения для второго правила.

-121--4378755-

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

#search-box {
  color:blue;
}

Становится следующим:

#search-box {
  color:red;
}
#search-box.focused {
  color:blue;
}

Теперь в любой момент необходимо внести радикальные изменения в дисплее элемента, добавить или удалить класс .focused .

-121--4378752-

Самое простое решение, которое я нашел для «1» - отправить WM_NCACTIVATE в вызывающую форму, как только всплывающая форма активируется (в обработчике WM_ACTIVATE), чтобы вызывающая форма рисовала свои подписи активными цветами. Для этого необходимо иметь ссылку на вызывающую форму во всплывающей форме.

Для «2» можно освободить всплывающую форму в том же обработчике WM_ACTIVATE, это не съест клики, которые переходят к вызывающей форме.

Так что стч. таким образом, необходимо перейти к всплывающей форме;

type
  TForm2 = class(TForm)
    [..]
  private
    FOwner: TForm;
    procedure WmActivate(var Msg: TWMActivate); message WM_ACTIVATE;
  public
    constructor Create(AOwner: TComponent); override;

[...]
constructor TForm2.Create(AOwner: TComponent);
begin
  if not (AOwner is TForm) then
    raise Exception.Create('Owner should be TForm');
  FOwner := TForm(AOwner);
  inherited;
end;

procedure TForm2.WmActivate(var Msg: TWMActivate);
begin
  SendMessage(FOwner.Handle, WM_NCACTIVATE, Ord(Msg.Active <> WA_INACTIVE), 0);
  inherited;
  if Msg.Active = WA_INACTIVE then
    Release;
end;

и предоставить вызывающую форму в качестве владельца всплывающей формы;

procedure TForm1.Button1Click(Sender: TObject);
var
  PopForm: TForm2;
begin
  PopForm := TForm2.Create(Self);
  [..]


FWIW, я согласен с loursonwinny и Ulrich . IMO всплывающая форма сложнее, чем кажется. Однако в случае SpTBXFormPopupMenu необходимо установить две библиотеки: TB2K и SpTBXLib . По крайней мере, просмотр источников может намекнуть на то, что может быть вовлечено.
8
ответ дан 4 December 2019 в 21:49
поделиться

SpTBXFormPopupMenu из spTBXLib выполняет эту работу.

Зайдите на http://www.silverpointdevelopment.com/sptbxlib/index.htm и найдите "Form Popup"

Похоже, что контейнер "popuped" должен наследовать TPopupMenu. Но работа с ним очень сложная, вы можете увидеть это самостоятельно в коде. Я рекомендую использовать его как есть в пакете, потому что Роберт Ли проделал отличную работу.

0
ответ дан 4 December 2019 в 21:49
поделиться

Я нашел тот, который делает почти то, что я хочу: TAdvStickyPopupMenu

-1
ответ дан 4 December 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: