• 全部
  • Windows SDK/API
  • 基础类
  • ActiveX
  • 数据库及相关技术
  • 网络及通讯开发
  • VCL组件使用和开发
  • 问答

初学者对BCB的一些心得和看法以及猜测[讨论]

goldolphin 2002-08-02 08:35:43
在下是BCB初学者,学用了不到一个月的BCB,这感觉当真是
——用得越久,就觉得不懂的东东越多。

我就随便说说,

1.在设计期,新建一个form,似乎系统生成的新类总是从TForm派生的,能不能选其它的类作为父类呢?是否非得手工改?除了C++代码中,别的文件中有关于类的信息吗(像VC的.clw文件一样)?
2.form文件(.dfm)应该就是BCB规定的一种资源文件吧,它经过编译也是要生成.res文件吧。但是标准Win32资源没有form这种资源,那么有关form的这部分是转化为对话框还是转化为C++代码插入到C++代码文件中?BCB是否支持标准的Windows资源脚本(.rc)?BCB提供了什么样的工具来管理资源(包括Cursor,icon,bitmap,string等等)?
3.在设计期对一个form的属性的改动应该对由这个form类动态生成(运行期)的实例没有影响吧?这些属性的修改应该是保存在.dfm文件中的吧(我看过内容,似乎是这样)。
4.与不可作为独立窗口的控件的泊定有关,有一个属性FloatingDockSiteClass可以用来指定当控件浮动后动态生成的窗口的类来作为该控件的Parent,我新建了一个Form类,用__classid赋给我的控件的属性FloatingDockSiteClass。但是发现我在TMyForm类中添加的修改form的属性,响应事件的代码均不起作用。TMyForm是从TCustomDockForm派生的。程序运行中,将控件拖出成浮动状态时,动态生成的窗口的外观和行为仍和默认的一样,我的修改没有任何体现,包括对OnCreate,OnPaint,Onclose的响应,不知为什么,还请指教。
5.和上面相关,如何正确地泊定一个可作为独立窗口的控件?
6。对于同一个Form类,我如何从同一个的*.dfm生成多个窗口,就像系统给我们做的那样,不同的是它只生成了一个,我尝试修改代码,但失败了。

说是讨论,还是提问居多啊,劳烦各位了。
...全文
9 点赞 收藏 19
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
goldolphin 2002-08-05
这边先结,不过
http://www.csdn.net/Expert/TopicView1.asp?id=921548
还有些个问题没解决,希望大家能去看看。
Thank you all.
回复
goldolphin 2002-08-03
自己再UP,4和5是我目前最关心最急切的,希望高手指点!!
回复
hlmsoft 2002-08-03
可知查看,form是以rcdata格式的资源存放的,而rcdata是dephi自己的标准资源
回复
yangguo_god 2002-08-03
好东东,看看先
回复
goldolphin 2002-08-03
6 中的this是MDI主窗口的指针。
谢谢各位帮助。

4 和 5 应该怎样解决呢?(注意我的补充)

关于4,
我的主窗口是MDI的,其上有一个TTreeView控件,响应主窗口的OnCreate事件,写了如下代码
void __fastcall TMainWnd::FormCreate(TObject *Sender)
{
trvMyTree->FloatingDockSiteClass=__classid(TPrjMgrForm);
}

新建了一个Form类TMyForm。
响应其OnCreate事件,写了如下代码
Caption="My Tree";
在其构造函数中也有上面这行代码。

但在运行中,将这个TreeView(trvMyTree)拖出主窗口成为浮动窗口时,浮动窗口标题栏仍是空的,而我在TMyForm类中写的其它响应OnPaint,OnClose等事件的代码也都没有得到执行,这是怎么回事,应该如何做才能用代码控制这个浮动窗口,修改它的属性?
回复
bigwhiteshark 2002-08-03
1修改后把它存到对象库中 ,然后设置它为主要和新的
2不是FORM而是该单元,BCB有工具制作RES:ICO,BMP,CUROSE
其他类型必须用TXT->save .rc 再用命令行工具编译RES
3 会影响的
6
TPForm * p1=new TPForm(this);
p1->Parent=this;//可能会是 P1
p1->Show();
构照时已经指定了Parent

7.我的BCB6的view菜单下没有class explore项,怎么打开它?(帮助里说有的)
级联菜单
8.我的BCB6的帮助主题只有内容和索引方式,没有搜索,怎么回事?太郁闷了。
我也想 ,不过重装了
回复
lw_yx 2002-08-03
upupup!!
回复
goldolphin 2002-08-03
分不够可以再开帖,拜托各位。
回复
2,3
dfm是VCL对象持久性的根本所在,所有从TPersistent继承而来的vcl对象都具有自动读写dfm文件的"本能"。但是这里要澄清的一点是,在程序编译完毕之后,dfm文件并没有随您的程序发布,这就是说,dfm文件在运行期已经被编译器编译进入了exe或者dll中了。
并且似乎不是以标准的windows资源格式存放的。。。。。,但毫无疑问的是,按照VCL的继承策略,TPersistent类实现的方法负责完成了这一部分的内容:在设计期从dfm读取form的相关信息,并保持在运行期恢复这些信息的能力。

正因为如此,你在设计期对form所作的修改,会代入运行期动态生成的实例中去的。
回复
1》当然可以,而且也不是非的从手工改cpp文件。
1.a 考察这样的情况,工程中有一个form叫做ParentForm,要新建一个从此继承的子form,你可以选择file->new->other->ProjectXXX(你自己的工程名字)选项卡下的ParentForm,在此选项卡的下方有三个选项,选取inherit就可以了。
1.b 考察NeoForm这个比较著名的第三方Form,你不止想在一个工程中使用它,那么直接打开NeoForm Unit,然后在NeoForm上单击右键,你可以看到add to repository...选项,填写一部分简单信息后,你可以指定repository中的neoform的存放位置。
经过这个步骤之后,你就可以在以后的项目中相当方便的使用这个自定义的Form作为继承的新起点了。
新建一个工程,然后在view->projecgt manager下面手动删除缺省的form1。接着选择file->new->other->{你存放NeoForm的类别选项卡}->找到NeoForm,再选Inherit就可以了。IDE自动添加NeoForm Unit和你的新form。
作为一个题外话,你可以试着在NeoForm上添加一个Button,会看到你的新Form上一样自动出现了一个同样的Button,这就是继承的可视化了吧:)
回复
goldolphin 2002-08-02
aawolf(羌狼)的方法确实可行,如果用Show(),就可以成为无模式的。奇怪的是当我写了如下代码
TPForm * p1=new TPForm(this);
p1->Show();
生成无模式窗口,没问题,但是写成
TPForm * p1=new TPForm(this);
p1->Parent=this;
p1->Show();
生成的窗口似乎不能被激活,标题栏总是灰的,但可以拖动,但不能获得输入焦点。

关于4,
我的主窗口是MDI的,其上有一个TTreeView控件,响应主窗口的OnCreate事件,写了如下代码
void __fastcall TMainWnd::FormCreate(TObject *Sender)
{
trvMyTree->FloatingDockSiteClass=__classid(TPrjMgrForm);
}

新建了一个Form类TMyForm。
响应其OnCreate事件,写了如下代码
Caption="My Tree";
在其构造函数中也有上面这行代码。

但在运行中,将这个TreeView(trvMyTree)拖出主窗口成为浮动窗口时,浮动窗口标题栏仍是空的,而我在TMyForm类中写的其它响应OnPaint,OnClose等事件的代码也都没有得到执行,这是怎么回事,应该如何做才能用代码控制这个浮动窗口,修改它的属性?
回复
goldolphin 2002-08-02
aawolf(羌狼)的方法确实可行,如果用Show(),就可以成为无模式的。奇怪的是当我写了如下代码
TPrjMgrForm * p1=new TPrjMgrForm(this);
p1->Show();
生成无模式窗口,没问题,但是写成
TPrjMgrForm * p1=new TPrjMgrForm(this);

p1->Show();

关于4,
回复
goldolphin 2002-08-02
按aawolf(羌狼) 对6的这种方法,可以使设计期对属性修改生效吗?
回复
aawolf 2002-08-02
BCB当然支持RC了,你生成一个项目后,会自动生成一个RC和一个RES的。如果你想自己加入资源的话,可以在一个项目中加入RC文件,可惜的是BCB不支持VC那种资源编辑器,但直接写的效果是一样的。
6,你可以这样生成多个窗体。
TForm * Form2=new TForm1(this);
Form2->ShowModal();
delete Form2;
回复
goldolphin 2002-08-02
对于1,如果不用.rc文件的话,如何将Cursor,icon,bitmap,string等资源加入.exe文件?
补充两个问题:
7.我的BCB6的view菜单下没有class explore项,怎么打开它?(帮助里说有的)
8.我的BCB6的帮助主题只有内容和索引方式,没有搜索,怎么回事?太郁闷了。
回复
goldolphin 2002-08-02
还有一个小问题。
7.我的BCB6的view菜单下没有class explore这项,怎么打开它呢?帮助中说有,可我的就是没有。还有帮助只有内容和索引,没有搜索,不会这么弱吧?
回复
wxcwuxuchun 2002-08-02
1.可以,但是需要手工写代码
2.支持,直接加入项目就行了,但是没有工具,只好自己手工写
3.设计期的改动会被编译进入资源(BCB特有的),动态生成会根据这些来
456没看明白,最好你贴出你的代码
回复
goldolphin 2002-08-02
继续 UP
希望前辈帮忙!!
回复
HelloThis 2002-08-02
5.和上面相关,如何正确地泊定一个可作为独立窗口的控件?
6。对于同一个Form类,我如何从同一个的*.dfm生成多个窗口,就像系统给我们做的那样,不同的是它只生成了一个,我尝试修改代码,但失败了。

我也想知道这两个问题。
回复
发帖
C++ Builder
创建于2007-08-02

1.3w+

社区成员

C++ Builder相关内容讨论区
申请成为版主
帖子事件
创建了帖子
2002-08-02 08:35
社区公告
暂无公告