繁体   English   中英

E2010 不兼容的类型:“HWND”和“TWindowHandle”

[英]E2010 Incompatible types: 'HWND' and 'TWindowHandle'

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Edit, FMX.Controls.Presentation, Windows, IOUtils;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);

var
  Res : Integer;
begin
  Res := MessageBox(
    Self.Handle
    , PChar('Сообщение в окне диалога.')
    , PChar('Заголовок окна')
    , MB_YESNOCANCEL + MB_ICONINFORMATION
    );

  case Res of
    IDYES : begin
      //Действия в случае, когда пользователь нажал кнопку "Да".
    end;
    IDNO : begin
      //Действия в случае, когда пользователь нажал кнопку "Нет".
    end;
    IDCANCEL : begin
      //Действия в случае, когда пользователь нажал кнопку "Отмена".
    end;
  end;
end;
end.

出现以下错误:

[dcc64 错误] Unit1.pas(34):E2010 不兼容的类型:“HWND”和“TWindowHandle”

[dcc64 致命错误] Project1.dpr(6): F2063 无法编译使用的单元“Unit1.pas”

我该如何解决这些问题?

FMX 中的Self.handle不是 HWND 类型。 您应该使用WindowHandleToPlatform()Wnd属性将 TWindowHandle 转换为 HWND。 所以您的部分代码将如下所示:

...
Res := MessageBox(
    WindowHandleToPlatform(Self.Handle).Wnd
    , PChar('Сообщение в окне диалога.')
    , PChar('Заголовок окна')
    , MB_YESNOCANCEL or MB_ICONINFORMATION
    );


更新 1WindowHandleToPlatform function 位于FMX.Platform.Win单元中。 您应该将其添加到使用条款中。

更新 2:正如评论中提到的@andreas-rejbrand,使用or代替+来组合标志

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM