Самое простое решение, которое я нашел для «1», - это отправить WM_NCACTIVATE в вызывающую форму, как только всплывающая форма активируется (в обработчике WM_ACTIVATE), чтобы вызывающая форма рисовала подпись с активным цвета. Для этого вам понадобится ссылка на форму вызова в всплывающей форме.
Для «2» вы можете освободить всплывающую форму в том же обработчике WM_ACTIVATE, это не будет поглощать клики, которые переходят в форму вызова.
Так что вот так должно перейти в popup-форму;
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);
[..]
Я согласен с
Лурсонвинни и
Ульрихом . IMO popup-форма сложнее, чем кажется. Хотя в случае SpTBXFormPopupMenu вам придется установить две библиотеки:
TB2K и
SpTBXLib . По крайней мере, просмотр источников может подсказать, что может быть вовлечено.