gpt4 book ai didi

delphi - this-> Hide()仅工作一次

转载 作者:行者123 更新时间:2023-12-02 09:47:26 25 4
gpt4 key购买 nike

My environment: C++ Builder XE4

我正在从其他应用程序中隐藏/显示一个应用程序,这两个应用程序均使用XE4构建。

二期工程
  • UnitShow:显示/隐藏UnitHide
  • UnitHide:要在UnitShow中显示/隐藏

  • UnitShow的代码如下:

    void __fastcall TFormShow::B_showClick(TObject *Sender)
    {
    HWND hwnd = GetDesktopWindow();
    hwnd = FindWindowEx(hwnd, NULL, L"TFormHide", NULL);

    ShowWindow(hwnd, SW_SHOWNORMAL);
    }

    UnitHide的代码如下:

    void __fastcall TFormHide::B_hideClick(TObject *Sender)
    {
    this->Hide();
    }

    以上,我尝试以下。
  • 在UnitHide上,单击B_hide >> UnitHide隐藏
  • 在UnitShow上,单击B_show >>显示UnitHide
  • 在UnitHide上,单击B_hide >> UnitHide未隐藏

  • 我希望第二次B_hide按钮按下将隐藏UnitHide。

    这个问题是什么原因造成的?

    最佳答案

    使用FindWindow函数代替FindWindowEx,如下所示:

    procedure TfShow.btnShowClick(Sender: TObject);
    var
    hWindow:Hwnd;
    begin
    hWindow := FindWindow('TFormHide', nil);
    ShowWindow(hWindow, SW_SHOWNORMAL);
    end;

    关于UnitHide,您可以在按钮中调用self.hide
    procedure TfHide.btnHideClick(Sender: TObject);
    begin
    self.Hide; {Hide the hidden form }
    //or
    ShowWindow(Self.Handle, SW_HIDE);
    end;

    您可以在C++中进行相同的调用

    更新

    正如雷米(Remy)在他的 answer中提到的

    因此,您可以使用以下代码:

    在两个应用程序中定义自定义消息
    const
    Show_MESSAGE = WM_USER + 1;
    Hide_MESSAGE = Show_MESSAGE + 1;

    在HideUnit中定义消息的处理程序
      private
    { Private declarations }
    procedure WMShow(var Message: TMessage); message Show_MESSAGE;
    procedure WMHide(var Message: TMessage); message Hide_MESSAGE;
    ....

    implementation

    procedure TfHide.WMShow(var Message: TMessage);
    begin
    Self.Show;
    end;

    procedure TfHide.WMHide(var Message: TMessage);
    begin
    Self.Hide;
    end;

    从ShowUnit> Showbtn发送消息
    procedure TfShow.btnShowClick(Sender: TObject);
    var
    hWndX : HWND;
    begin
    hWndX := FindWindow('TfHide',nil);
    if hWndX <> 0 then begin
    SendMessage(hWndX, Show_MESSAGE, 0, 0);
    end
    else MessageBox(0, 'Window not found', 'Msg', 0);
    end;

    从隐藏的表单中隐藏表单
    procedure TfHide.btnHideClick(Sender: TObject);
    begin
    SendMessage(Handle, Hide_MESSAGE, 0, 0);
    end;

    关于delphi - this-> Hide()仅工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36589398/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com