加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – SmartTabs运行时事件错误

发布时间:2020-12-15 09:14:49 所属栏目:大数据 来源:网络整理
导读:这是我得到错误的代码的一部分: unit Unit1;interfaceuses Winapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,Vcl.Dialogs,cefvcl,Vcl.ExtCtrls,Vcl.StdCtrls,ceflib,Vcl.ComCtrls,Vcl.
这是我得到错误的代码的一部分:

unit Unit1;

interface

uses
  Winapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,Vcl.Controls,Vcl.Forms,Vcl.Dialogs,cefvcl,Vcl.ExtCtrls,Vcl.StdCtrls,ceflib,Vcl.ComCtrls,Vcl.ImgList,Vcl.Imaging.pngimage,Vcl.Buttons,JvSpeedButton,Themes,JvExComCtrls,JvComCtrls,JvgPage,Vcl.ToolWin,JvToolBar,Vcl.Menus,Vcl.Mask,JvExMask,JvToolEdit,JvExButtons,JvButtons,rkSmartTabs,rkAeroTabs;

type
  TForm1 = class(TForm)
    {....}
    procedure FormCreate(Sender: TObject);
    procedure addnewtab (Sender: TObject);
    procedure closetab (Sender: TObject);

private
  { Private declarations }
public
  { Public declarations }
end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

{....}

procedure TForm1.closetab (Sender: TObject);
var
  smarttabs: TrkAeroTabs;
begin
  smarttabs := Sender as TrkAeroTabs;
  smarttabs.DeleteTab(smarttabs.ActiveTab);
end;

procedure TForm1.addnewtab (Sender: TObject);
var
  smarttabs: TrkAeroTabs;
begin
  smarttabs := Sender as TrkAeroTabs;
  smarttabs.AddTab('New Tab');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
with TrkAeroTabs.Create(self) do
  begin
    OnCloseTab := closetab;  //***ERROR HERE***
    OnAddClick := addnewtab;
    Parent := Self;
    Align := alClient;
    AddTab('New Tab');
    if ClassType = TrkAeroTabs then
    begin
      ColorBackground := clBlack;
      with Self do
      begin
        GlassFrame.Top     := 25;
        GlassFrame.Enabled := True;
      end;
    end;
    ShowButton   := True;
    AllowTabDrag := True;
  end;
end;

这是错误:

[DCC Error] Unit1.pas(90): E2009 Incompatible types: 'Parameter lists differ'

addnewtab()工作正常.我不明白为什么closetab()不起作用.谢谢.

解决方法

它不起作用,因为事件是使用与TNotifyEvent不同的类型声明的,并且您的方法参数必须与使用的类型(参数的数量和类型)中声明的内容匹配.

导航到事件声明,您会发现:

TrkAeroTabs = class(TCustomControl)
  ..
  published
  ..
    property OnCloseTab: TOnTabCloseEvent read FOnCloseTab write FOnCloseTab;

然后,导航到TOnTabClos??eEvent声明,您会发现:

TOnTabCloseEvent = procedure(Sender: TObject; Index: Integer;
  var Close: Boolean) of object;

所以,你必须像这样声明你的方法:

TForm1 = class(TForm)
    ..
    procedure closetab (Sender: TObject; Index: Integer; var CanClose: Boolean);


procedure TForm1.closetab (Sender: TObject; Index: Integer; var CanClose: Boolean);
var
  smarttabs: TrkAeroTabs;
begin
  smarttabs := Sender as TrkAeroTabs;
  smarttabs.DeleteTab(smarttabs.ActiveTab);
end;

现在,您可以成功将此方法分配给事件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读