“模态”对话框不会将焦点返回到应用程序

时间:2016-10-20 17:53:28

标签: delphi vcl graphics32

我有一个源自名为TPanel的{​​{1}}的自定义控件。它包含TTestCtrl(来自Graphics32)。

当用户双击图像时,我会显示一条消息。问题是在关闭消息后,焦点不会返回到主应用程序。因此,无论我在主app / main表单中点击什么,第一次点击都会丢失。

奇怪的是:如果我调用的TImage32程序不是来自Mesaj(),而是来自主窗体,它可以正常工作(第一次点击不再丢失):

TTestCtrl

下面的简单/最小应用程序是测试人员:

unit DerivedControl;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.ExtCtrls, Vcl.Dialogs, Vcl.Forms, GR32, GR32_Image;

type
  TTestCtrl = class(TPanel)
  private
    Img: TImage32;
  protected
    procedure ChromaDblClick(Sender: TObject);
  public
    constructor Create(AOwner: TComponent); override;
  published
  end;

procedure Mesaj(const MessageText, Title: string);

implementation

procedure Mesaj(const MessageText, Title: string);
begin
{$IFDEF MSWINDOWS}
   Application.MessageBox(PChar(MessageText), PChar(Title), 0)  { 'Title' will appear in window's caption }
{$ELSE}
   MessageDlg(MessageText, mtInformation, [mbOk], 0);
{$ENDIF}
end;

constructor TTestCtrl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Width         := 200;
  Height        := 86;
  Img := TImage32.Create(Self);
  Img.Parent        := Self;
  Img.Align         := alClient;
  Img.OnDblClick    := ChromaDblClick;
end;

procedure TTestCtrl.ChromaDblClick(Sender: TObject);
begin
  Mesaj('Caption', 'From derived control');      // focus lost
end;

end.

1 个答案:

答案 0 :(得分:1)

试试这个:

procedure TTestCtrl.ChromaDblClick(Sender: TObject);
var F : TcustomForm;
begin
  Mesaj('Caption', 'From derived control');      // focus lost
  F := GetParentForm(Self);
  if Assigned(F) then F.BringToFront;

end;