我用NEW 新建一个自己的控件, 为何出错?

sdjifeng 2002-09-13 11:13:01
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int f;
String fn;
if(OpenDialog1->Execute())
{
fn=OpenDialog1->FileName;

f=FileOpen(fn,fmOpenRead);
FileClose(f);
Memo1->Lines->LoadFromFile(fn); }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo2 = new TMemo2 ((TForm *) Sender) ;
}
//---------------------------------------------------------------------------




//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TOpenDialog *OpenDialog1;
TMemo *Memo1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
TMemo * TMemo2;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
class TMemo2 : public TMemo
{ private:
unsigned int size ;
};






[C++ Error] Unit2.cpp(34): E2451 Undefined symbol 'Memo2'
[C++ Error] Unit2.cpp(34): E2303 Type name expected
[C++ Error] Unit2.cpp(34): E2379 Statement missing ;







...全文
176 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
huzhangyou 2002-09-22
  • 打赏
  • 举报
回复
呵呵
learning.............................................
sdjifeng 2002-09-22
  • 打赏
  • 举报
回复
我发现使用以下代码可以解决问题
MyMemo1 = new TMyMemo (this) ;
MyMemo1->Parent = (this) ;
不容易啊!
sdjifeng 2002-09-15
  • 打赏
  • 举报
回复
谢谢xi8kuang
TMemo *Memo2=new TMemo(this);//
Memo2->Parent = Form1;
是可行的。
但是Memo2仅仅在 TForm1::FormCreate中可用,
在TForm1::Button1Click()中就不可用了,变成了NULL,好奇怪。
我应怎么办?
IT-司马青衫 2002-09-14
  • 打赏
  • 举报
回复
class TMemo2 : public TMemo
{ private:
unsigned int size ;
};
放在这之前
class TForm1 : public TForm
这是C++或C数据类型向前声明

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo2 = new TMemo2 ((TForm *) Sender) ;//因改放在构造函数中
}
//你这个是重载VCL的MEMO类
//NEW时调用默认的构造函数
//Memo2=new TMemo2(this);//THIS表示谁拥有该类的对象

fn=OpenDialog1->FileName;

f=FileOpen(fn,fmOpenRead);//
FileClose(f);//这两行代码多余的,如果采用其它方式来就需要句柄
Memo1->Lines->LoadFromFile(fn); }

Currency 2002-09-14
  • 打赏
  • 举报
回复

我觉得这样可能好理解

Memo2 = new TMemo2(this);
Memo2->Parent = Form1;
gyj_china 2002-09-14
  • 打赏
  • 举报
回复
只要把 Memo2 = new TMemo2 ((TForm *) Sender) ;
改成 Memo2 = new TMemo (this);就可以了。
christopher_hp 2002-09-14
  • 打赏
  • 举报
回复
TMemo *Memo2=new TMemo(NULL);//如果NULL不行就用this
Memo2->Parent=Form1;
在设置它的Top,Left,Height,Width属性
不需要Memo2->Show()这样做
最后看看,需要添加头文件不,自己看看帮助
ThinkX 2002-09-14
  • 打赏
  • 举报
回复
TMemo2没有默认的构造函数,自己写一个了。
sdjifeng 2002-09-14
  • 打赏
  • 举报
回复
谢谢大家,我已经该过了,但怎么仍出错?

//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
class TMemo2 : public TMemo //手工兴建一个Memo2
{
private:
unsigned int size ; //加入一个属性,仅仅是测试用
};

//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TOpenDialog *OpenDialog1;
TMemo *Memo1; // 它的用处仅仅是与Memo2比较,
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private:
TMemo2 * Memo2;
// TMemo * TMemo2;
public:
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif




//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
String fn;
if(OpenDialog1->Execute())
{ fn=OpenDialog1->FileName;
//Memo1->Lines->LoadFromFile(fn); //这样用大家都会
Memo2->Lines->LoadFromFile(fn);
}
}
//---------------------------------------------------------------------------


void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo2 = new TMemo2 (this) ; //系统报告error
Memo2->Parent = Form1;
Memo2->Top=200;
Memo2->Width =49;
Memo2->Left=150;
Memo2->Height=100;
Memo2->Show;

}
//---------------------------------------------------------------------------




// [C++ Error] Unit2.cpp(33): E2125 Compiler could not generate default constructor for class 'TMemo2'
// [C++ Error] Unit2.cpp(35): E2235 Member function must be called or its address taken
chinagy 2002-09-14
  • 打赏
  • 举报
回复
1.头文件写错了,#endif 应放在最后一行;
2.调用时
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo2 = new TMemo2 (this) ;
Memo2->Parent = Form1;
Memo2->Show;
}
kingcaiyao 2002-09-13
  • 打赏
  • 举报
回复
oh,对了楼上说的对,应该放在前面,没看清楚,不好意思:
whitelion 2002-09-13
  • 打赏
  • 举报
回复

class TMemo2 : public TMemo
{ private:
unsigned int size ;
};
放在
TForm1 *Form1;
之前
把TMemo * TMemo2;
改为TMemo2 * Memo2;
kingcaiyao 2002-09-13
  • 打赏
  • 举报
回复
代码看起来很混乱,这样:
//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TOpenDialog *OpenDialog1;
TMemo *Memo1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
TMemo * TMemo2;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
class TMemo2 : public TMemo
{ private:
unsigned int size ;
};
改成:
//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TOpenDialog *OpenDialog1;
TMemo *Memo1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
TMemo * TMemo2;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
class TMemo2 : public TMemo
{ private:
unsigned int size ;
};

//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

whitelion 2002-09-13
  • 打赏
  • 举报
回复
TMemo * TMemo2;
改为:
TMemo * Memo2;
whitelion 2002-09-13
  • 打赏
  • 举报
回复
Memo2 = new TMemo2 ((TForm *) Sender) ;
改为
Memo2 = new TMemo ((TForm *) Sender) ;
vb.net基础教程 第一部分 Visual Basic.net基础 1.vb. net介绍 2.vb.net的优点 3.新建一个vb.net项目 4.编写第一个vb.net应用程序 第二部分 vb.net的语法部分 1.vb.net的Numeric数据类型 2.vb.net的Byte数据类型 3.vb.net的String数据类型 4.vb.net的Boolean数据类型 5.vb.net的Date数据类型 6.vb.net的Object数据类型 7.vb.net的用户自定义类型 8.vb.net的数组定义 9.vb.net的数组列表 10.vb.net的多维数组 11.vb.net类型转换函数 第三部分 visual basic.net的运算 程序设计时经常用到的有6种运算:算术运算(Arithmetic)、赋值运算(Assignment)、二进制运算(Bitwise)、比较运算(Comparison)、连接运算(concatenation)及逻辑运算(Logical),下面对这6种运算进行简单介绍。 1.vb.net的算术运算 2.vb.net的赋值运算符 3.vb.net的二进制运算符 4.vb.net的比较运算符 5.vb.net的连接运算符和逻辑运算符 6.vb.net运算符的优先级 (一) Visual basic.net的常量和变量 1.vb.net的常量 2.vb.net的变量 (二) Visual basic.net的流程和控制结构 1.vb.net条件分支语句 2.vb.net的循环语句 (三) vb.net的过程和函数 1.vb.net的Sub过程 2.vb.net的Funtion过程 3.在vb.net中调用过程 4.如何向过程传递参数 (四)vb.net的类和对象基础 第四部分 visual basic.net的常用控件 1.vb.net的Label控件 2.vb.net的Button控件 3.vb.net的Textbox控件 4.vb.net的MainMenu控件 5.vb.net的Checkbox控件 6.vb.net的Radiobutton控件 7.vb.net的GroupBox控件 8.vb.net的PictureBox控件 9.vb.net的ListBox控件 10.vb.net的CheckedListBox控件 11.vb.net的Combobox控件 12.vb.net的ListView控件 13.vb.net的TreeView控件 14.vb.net的ImageList控件 15.vb.net的Timer控件 16.vb.net的HScrollBar和VScrollBar控件 17.vb.net的ProgressBar控件 18.vb.net的ToolBar控件 19.vb.net的StatusBar控件 20.Vs 2005的ToolStrip控件 21.Vs 2005的StatusStrip控件 22.Vs 2005的MenuStrip控件 第六部分 vb.net的OOP结构 1.什么是oop 2.vb.net的面向对象性 3.vb.net的共享成员(Share Members) 4.类模块和标准代码模块的区别和比较 5.对象浏览器 (一) 建立和使用对象 1.vb.net对象的建立和销毁:对象的生命周期 2.设置和重设vb.net的属性 3.用方法来表现动作 4.vb.net对象变量的声明 5.对一个对象进行多种操作 6.使用New关键字 7.如何释放对对象的引用 8.如何把对象传递到一个过程 (二) 在程序运行中得到一个类的信息: 用一个字符名称调用一个属性或者方法 (三) vb.net中的类、继承与多态性 1.vb.net中给一个类添加方法 2.命名属性、方法和事件 3.vb.net的事件和事件处理 4.类的继承(Inheritance) 5.vb.net继承的规则 6.用继承建立一个继承类 7.重载Windows控件 8.什么时候使用继承 9.什么是命名空间(Namespace) 10.vb.net继承的例子 11.vb.net中用继承实现多态性 12.vb.net中用接口实现多态性 第七部分 数据库访问技术 关于SQL语言的知识,请参考: sql语言教程及Sql语言基础 1.数据库基础知识 2.vb.net数据集(Datasets)的概念 3.什么是dao 4.Dao与Jet数据库引擎 5.Dao对象模型 6.远程数据对象RDO 7.Rdo对象模型 8.odbc api是什么 9.ODBC的结构 10.使用ODBC API访问数据库 11.ado数据对象 12.ado对象模型 13.ADO.NET简介 14.使用ADO.NET的基本方法 第八部分 vb.net的多线程 1.自由线程(Free Threading) 2.关于线程的参数和返回值的问题 3.vb.net的并发性问题 第九部分 vb.net的文件和出错处理 1.vb.net的出错处理 2.vb.net的多种出错处理(Multiple Exceptions) 3.vb.net的文件对象(file object) 4.vb.net文件处理的出错处理 5.检测文件的结束(Testing for End of File) 6.文件的静态方法(Static File Methods)
第一部分 Visual Basic.net基础 1.vb. net介绍 2.vb.net的优点 3.新建一个vb.net项目 4.编写第一个vb.net应用程序 第二部分 vb.net的语法部分 1.vb.net的Numeric数据类型 2.vb.net的Byte数据类型 3.vb.net的String数据类型 4.vb.net的Boolean数据类型 5.vb.net的Date数据类型 6.vb.net的Object数据类型 7.vb.net的用户自定义类型 8.vb.net的数组定义 9.vb.net的数组列表 10.vb.net的多维数组 11.vb.net类型转换函数 第三部分 visual basic.net的运算 程序设计时经常用到的有6种运算:算术运算(Arithmetic)、赋值运算(Assignment)、二进制运算(Bitwise)、比较运算(Comparison)、连接运算(concatenation)及逻辑运算(Logical),下面对这6种运算进行简单介绍。 1.vb.net的算术运算 2.vb.net的赋值运算符 3.vb.net的二进制运算符 4.vb.net的比较运算符 5.vb.net的连接运算符和逻辑运算符 6.vb.net运算符的优先级 (一) Visual basic.net的常量和变量 1.vb.net的常量 2.vb.net的变量 (二) Visual basic.net的流程和控制结构 1.vb.net条件分支语句 2.vb.net的循环语句 (三) vb.net的过程和函数 1.vb.net的Sub过程 2.vb.net的Funtion过程 3.在vb.net中调用过程 4.如何向过程传递参数 (四)vb.net的类和对象基础 第四部分 visual basic.net的常用控件 1.vb.net的Label控件 2.vb.net的Button控件 3.vb.net的Textbox控件 4.vb.net的MainMenu控件 5.vb.net的Checkbox控件 6.vb.net的Radiobutton控件 7.vb.net的GroupBox控件 8.vb.net的PictureBox控件 9.vb.net的ListBox控件 10.vb.net的CheckedListBox控件 11.vb.net的Combobox控件 12.vb.net的ListView控件 13.vb.net的TreeView控件 14.vb.net的ImageList控件 15.vb.net的Timer控件 16.vb.net的HScrollBar和VScrollBar控件 17.vb.net的ProgressBar控件 18.vb.net的ToolBar控件 19.vb.net的StatusBar控件 20.Vs 2005的ToolStrip控件 21.Vs 2005的StatusStrip控件 22.Vs 2005的MenuStrip控件 第六部分 vb.net的OOP结构 1.什么是oop 2.vb.net的面向对象性 3.vb.net的共享成员(Share Members) 4.类模块和标准代码模块的区别和比较 5.对象浏览器 (一) 建立和使用对象 1.vb.net对象的建立和销毁:对象的生命周期 2.设置和重设vb.net的属性 3.用方法来表现动作 4.vb.net对象变量的声明 5.对一个对象进行多种操作 6.使用New关键字 7.如何释放对对象的引用 8.如何把对象传递到一个过程 (二) 在程序运行中得到一个类的信息: 用一个字符名称调用一个属性或者方法 (三) vb.net中的类、继承与多态性 1.vb.net中给一个类添加方法 2.命名属性、方法和事件 3.vb.net的事件和事件处理 4.类的继承(Inheritance) 5.vb.net继承的规则 6.用继承建立一个继承类 7.重载Windows控件 8.什么时候使用继承 9.什么是命名空间(Namespace) 10.vb.net继承的例子 11.vb.net中用继承实现多态性 12.vb.net中用接口实现多态性 第七部分 数据库访问技术 关于SQL语言的知识,请参考: sql语言教程及Sql语言基础 1.数据库基础知识 2.vb.net数据集(Datasets)的概念 3.什么是dao 4.Dao与Jet数据库引擎 5.Dao对象模型 6.远程数据对象RDO 7.Rdo对象模型 8.odbc api是什么 9.ODBC的结构 10.使用ODBC API访问数据库 11.ado数据对象 12.ado对象模型 13.ADO.NET简介 14.使用ADO.NET的基本方法 第八部分 vb.net的多线程 1.自由线程(Free Threading) 2.关于线程的参数和返回值的问题 3.vb.net的并发性问题 第九部分 vb.net的文件和出错处理 1.vb.net的出错处理 2.vb.net的多种出错处理(Multiple Exceptions) 3.vb.net的文件对象(file object) 4.vb.net文件处理的出错处理 5.检测文件的结束(Testing for End of File) 6.文件的静态方法(Static File Methods)
1.所需的三个控件: ChooseWA: TWordApplication; ChooseWD: TWordDocument; ChooseWF: TWordFont; 2.检查计算机是否安装了WORD try ChooseWA.Connect; except MessageBox(handle,'无法链接,请确认电脑上是否安装Word XP/2003及以上版本','连接出错', MB_Ok or MB_ICONERROR); Abort; end; 3.关闭WORD拼写检查 //因为Word进行拼写检查需要很多时间,所以首先关闭检查 ChooseWA.Options.CheckSpellingAsYouType := False; ChooseWA.Options.CheckGrammarAsYouType := False; 4.新建一个文档并设置文档的标题 var NewDocument: _Document; ItemIndex: OleVariant; ItemIndex := 1; NewDocument := ChooseWA.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam); ChooseWD.ConnectTo(NewDocument); ChooseWD.Windows.Item(ItemIndex).Caption := '我新建的第一个文档';//此文档的第一个窗口的标题,试卷 名称 5.写入数据 ChooseWD.Range.InsertAfter('第一行数据'+#13);//#13代表换行 6.设置字体格式 procedure SetFont(aBold,aItalic,aShadow,aSize:integer); begin ChooseWF.ConnectTo(ChooseWD.Sentences.Get_Last.Font); ChooseWF.Name := '宋体'; ChooseWF.Bold := aBold; ChooseWF.Italic := aItalic; ChooseWF.Shadow := aShadow; ChooseWF.Size := aSize; end; 如:SetFont(1,0,0,22);//设置字体为22号 7.向WORD中写入表格 (1)插入表格: ChooseWD.Tables.Add(ChooseWD.Words.Last, RowNum, ColNum,EmptyParam,EmptyParam);//RowNum为行数, ColNum为列数 (2)插入数据: ChooseWD.Tables.Item(1).Cell(1,1).Range.Text := '第一行第一列'; ChooseWD.Tables.Item(1).Cell(2,1).Range.Text := '第二行第一列'; 8.向WORD写入图片 var Img: TImage; MyFormat: Word; AData: Cardinal; APalette: HPALETTE; Img.Picture.LoadFromFile('文件路径');//从文件夹中导入图片至控件 Img.Picture.SaveToClipboardFormat(MyFormat,AData,APalette);//将图片转存到剪贴板中 Clipboard.SetAsHandle(MyFormat,AData);//将剪贴板中的图片复制出来,注意添加Clipbrd单元 ChooseWD.Sentences.Last.Paste;//在WORD中粘贴图片 9.在界面中显示WORD文档 ChooseWA.Visible:=true; 10.断开与WORD的链接 ChooseWA.Disconnect; ChooseWD.Disconnect; Chart1.SaveToBitmapFile(‘文件名.bmp’);

13,874

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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