0

タスクバーに同時に複数のフォームを表示しようとすると、少し問題が発生します。以下を使用する必要があることがわかりました。

WS_EX_APPWINDOW

だから私はもう少し検索して、それを見つけました:

class TForm2 : public TForm
{
__published:    // IDE-managed Components
private:        // User declarations
public:         // User declarations
        __fastcall TForm2(TComponent* Owner);
        void __fastcall CreateParams(Controls::TCreateParams &Params);

};

void __fastcall TForm2::CreateParams(Controls::TCreateParams &Params)
{
  TForm::CreateParams(Params);
  Params.ExStyle   = Params.ExStyle | WS_EX_APPWINDOW;
  Params.WndParent = ParentWindow;
}

ただし、その関数は VCL でのみ機能します (TCreateParams は Fmx::Controls のメンバーではありません)。

それで、もう少し検索して見つけました(この関数はOnCreateフォーム関数に行きます):

SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_APPWINDOW); 

しかし、私は次のように言って何か間違っていました:

[bcc32 Error] Codigo.cpp(19): E2034 Cannot convert 'TWindowHandle * const' to 'HWND__ *'
  Full parser context
    Codigo.cpp(18): parsing: void _fastcall TfrmCodigo::FormCreate(TObject *)
[bcc32 Error] Codigo.cpp(19): E2342 Type mismatch in parameter 'hWnd' (wanted 'HWND__ *', got 'TWindowHandle *')
  Full parser context
    Codigo.cpp(18): parsing: void _fastcall TfrmCodigo::FormCreate(TObject *)

これを行う他の代替手段を知っていますか?あなたが私を助けることができるかどうか、今から、たくさんありがとう!

4

1 に答える 1

1

表示されたコード スニペットは VCL 専用です。

FireMonkey では、VCL のようにフォームの HWND の作成をカスタマイズすることはできません。HWND の作成は、FireMonkey が内部で使用するプライベート インターフェイスの背後に隠されています ( TPlatformWin.CreateWindow())。CreateParamsそのため、FireMonkeyにはありません。

ただし、HWND にアクセスすることはできますが、それは作成された後でのみ可能です。関数 (古い関数WindowHandleToPlatform()を置き換える) と関数 (内部で使用する) があります。これらの関数はすべて Windows 固有であるため、複数のプラットフォームで実行される FireMonkey コードを作成する場合は、関数を でラップする必要があります。FmxHandleToHWND()FormToHWNDWindowHandleToPlatform()#ifdef

これを試して:

#ifdef _Windows
#include <FMX.Platform.Win.hpp>
#endif

...

#ifdef _Windows
//HWND hWnd = FmxHandleToHWND(Form2->Handle);
//HWND hWnd = WindowHandleToPlatform(Form2->Handle)->Wnd;
HWND hWnd = FormToHWND(Form2);
if (hWnd != NULL)
{
    LONG Style = GetWindowLong(hWnd, GWL_EXSTYLE); // <-- don't forget this step!
    SetWindowLong(hWnd, GWL_EXSTYLE, Style | WS_EX_APPWINDOW); 
}
#endif

以下も参照してください。

embarcadero WindowHandleToPlatform c++ の例

于 2015-03-08T20:17:19.620 に答える