过程调用form时报错

KnitsEDI 2016-04-12 03:44:03
procedure TMainForm.ProShowPageControl(frForm, tfrForm: TForm);
begin
if not Assigned(frForm) then
frForm := tfrForm.create(Self);
frForm.show;
end;

在调用这个过程时报错:Icompatible types:'TForm' and 'Class reference'
类型错误 。
...全文
187 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
KnitsEDI 2016-04-13
  • 打赏
  • 举报
回复
@doloopcn 在MAIN单元menu菜单中,这部分是原来的cr程序,是OK的,引用啥的都没问题: if not Assigned(frRZpageControl) then frRZpageControl := TfrRZpageControl.create(Self); frRZpageControl.show; 后面因要使用RZpageControl控件,在main中写了过程,就把是把对象frRZpageControl和类 TfrRZpageControl直接传进来。 procedure TMainForm.ProShowPageControl(frForm, TfrForm: TForm); begin if not Assigned(frForm) then TfrForm(frForm) := TfrForm.create(Self); frForm.show; end; 直接报参数不对,应该就是frForm:TFORM不对,应该定义frForm:TfrForm,但是这样就报错了,TfrForm没有定义。
doloopcn 2016-04-12
  • 打赏
  • 举报
回复
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls; type TForm1 = class(TForm) btn1: TButton; procedure btn1Click(Sender: TObject); private { Private declarations } procedure ProShowPageControl(firForm :TForm;var SecForm:TForm); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses Unit2; { TForm1 } procedure TForm1.btn1Click(Sender: TObject); var crForm:TForm; begin ProShowPageControl(Form1,crForm); crForm.Show; end; procedure TForm1.ProShowPageControl(firForm:TForm;var SecForm: TForm); begin SecForm:=TForm2.Create(Application); end; end. 测试了一下,按照上面的代码测试通过,估计是楼主在cr窗体后,并没有返回TForm,就是在要返回的参数前面加个VAR。 楼主遇到的问题的断点应该不是在代码里面吧
doloopcn 2016-04-12
  • 打赏
  • 举报
回复
忘记说一点TForm2不能为项目自动创建窗口,必须从project -》Remove From project菜单移除 unti2就是TFORM2的单元文件
KnitsEDI 2016-04-12
  • 打赏
  • 举报
回复
@doloopcn 在调用 此过程提示报错:Icompatible types:'TForm' and 'Class reference' 类型错误 。
doloopcn 2016-04-12
  • 打赏
  • 举报
回复
procedure TMainForm.ProShowPageControl(frForm, tfrForm: TForm); begin if not Assigned(frForm) then TfrForm(frForm) := tfrForm.create(Self);//在XE6支持这种语法,不知道XE10支持不 frForm.show; end;
jjpweb 2016-04-12
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TcsClass = class
      public
       sName:string;
  end;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure objectAndClass(obj:TObject;cls:TClass);
  public
    { Public declarations }
  end;


var
  Form1: TForm1;
  csclass:TcsClass;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
     objectAndClass(csclass,TcsClass);
end;

procedure TForm1.objectAndClass(obj: TObject; cls: TClass);
begin
     obj:=cls.Create;
     TcsClass(obj).sName:='Hello';
     ShowMessage(TcsClass(obj).sName);
end;

end.

jjpweb 2016-04-12
  • 打赏
  • 举报
回复
本来以为TComponentClass这个可以的,明天再研究。
KnitsEDI 2016-04-12
  • 打赏
  • 举报
回复
在main中每个FORM都有uses的,之前没有写这个过程,一直都是直接create都没有问题的。现在想写个过程以传参的形式来create.下面是写的过程。 procedure TMainForm.ProShowPageControl(tfrForm: TComponentClass; frForm: tfrForm); begin if not Assigned(frForm) then frForm := TfrForm.create(Self); frForm.show; end; 后续调用ProShowPageControl(frRZpageControl, TfrRZpageControl); 前面有写 uses ufrRZpageControl
jjpweb 2016-04-12
  • 打赏
  • 举报
回复
uses 这个类定义的unit
KnitsEDI 2016-04-12
  • 打赏
  • 举报
回复
@jjpweb 这样写提示没有定义tfrForm, Undeclared identifier 'tfrForm'
jjpweb 2016-04-12
  • 打赏
  • 举报
回复
procedure TMainForm.ProShowPageControl(frForm : tfrForm;tfrForm:TComponentClass);
KnitsEDI 2016-04-12
  • 打赏
  • 举报
回复
在MAIN中有引用的,不写过程可以正常调用。写了上面的过程传参就报错了。
doloopcn 2016-04-12
  • 打赏
  • 举报
回复
是不是忘记引用:tfrForm的单元文件啊!!!! 要在MAIN中uses tfrForm对应的单元文件
KnitsEDI 2016-04-12
  • 打赏
  • 举报
回复
procedure TMainForm.ProShowPageControl(frForm : tfrForm); 用这种方式tfrForm怎么定义,这是类名每次传入的FORM类不一样。 如ProShowPageControl(frRZpageControl, TfrRZpageControl);
jjpweb 2016-04-12
  • 打赏
  • 举报
回复
procedure TMainForm.ProShowPageControl(frForm, tfrForm: TForm); procedure TMainForm.ProShowPageControl(frForm : tfrForm);

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧