BCB4.0, MDI中调用自定义类(200)?(200分)

  • 主题发起人 主题发起人 laolor
  • 开始时间 开始时间
L

laolor

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用MDI来编程:
自定义一些图形类,line,circle(继承Graph类)等,写再一个单元里,unit1.
在MainForm里,点击line按钮时,就画直线,点circle就画圆,但那些接口很麻烦
首先,在unit1中,我不知道该不该写上画直线的函数,(我用Pixels[][]=Color)
如果要写,??????->Image1->Canvas->Pixels[X[j]][Y[j]]=PointColor;
??该写什么?
其次,就算定义了这样一些类,我在MainForm中该怎样引用,就是我昨晚已经问
的问题.
ActiveMDIChild->ThisGraph=ThisLINE;
[C++ Error] Main.cpp(70): E2316 'ThisGraph' is not a member of
'TForm'.
 
TMDIForm *pForm = static_cast<TMDIForm*>(MainForm->MDIChildren[n]);
if(pForm != NULL)
{
pForm->ThisGraph = ThisLINE;
}
 
在你的类中定义一个IMAGE然后在建立类的变量是把外部的IMAGE赋值给它就行了!!!
 
要把activemdiform转成子form的类(虽然它就是). 才能使用子form中定义的构件.
 
在DreamTiger的回答中
TMDIForm *pForm = static_cast(MainForm->MDIChildren[n]);
n是什么? MDIChildren数组序号吗? 那就是说,每生成一个MDIChild就该加进这个数组?
 
fsm:
怎么自定义那个Image?
class Graph
{
public:
TImage *Image0=new TImage();........
 
不好意思,写错了。
应该是:
TEditForm *pForm = static_cast<TEditForm*>(MainForm->ActiveMDIChild);
MDIChildren是主窗口的一个属性,你可以通过他来访问所有的子窗口。
例如,把所有字窗口的标题写到一个弹出窗口(用ShowModal)的SendList(TListBox类)中:
(FrameForm为fsMDIForm窗口,EditForm为fsMDIChild窗口)
SendList->Items->Clear();
TListItem* pItem;
for(int i = 0;i < FrameForm->MDIChildCount;i++){
TEditForm *pForm1 = static_cast<TEditForm*>(FrameForm->MDIChildren);
if(pForm1){
pItem = SendList->Items->Add();
pItem->Caption = pForm1->Caption;
pItem->SubItems->Add(IntToStr(i));
}
}
以后就可以通过
TListItem* pItem;
int i;
pItem = SendList->ItemFocused;
if(pItem){
int n = StrToInt(pItem->SubItems->Strings[0]);
TEditForm *pForm = static_cast<TEditForm*>(FrameForm->MDIChildren[n]);
if(pFrom){
......
}
}
对选择的子窗口进行调用。
 
怎么回事,我明明写了
TEditForm *pForm = static_cast{TEditForm*}(FrameForm->MDIChildren[n]);
(这里的'{'是'<','}'是'>')我直接写老是显示不出来。难道'<*>'会被忽略?
 
DreamTiger: 这里的BBS支持html语法,它把你的&amp;lt;&amp;gt;解释成html语法了.
 
cAKK:多谢。我想也是怎么回事。
 
DreamTiger:谢谢你,最后疑问,(跟这个题目无关)不过还是MDI的,请你帮忙
对这个Graph类,我自然要定义颜色,MainForm中,我定义了public TColor ForColor,BgColor;
在ChildWin.cpp中,我要画网格(图形类的显示是通过填充网格实现的)
Image1->Canvas->Brush->Color=MainForm->ForColor;时出错说MainForm没有定义.
如果我包含进来头文件Main.h,无疑,我就会重复定义所有unit1的内容.因为
Main.h中已经包含了#include "ChildWin.h".
"ChildWin.h"又包含了unit1.cpp,在反过来包含一次......糟透了.怎么办?
 
这个应该不会的。你可以看到ChildWin.h的前几行应该是这样定义的:
#ifndef ChildWinH
#define ChildWinH
下面是
class TEditForm : public TForm
{
...
}
最后是
#endif
这样,如果你包含了一次ChildWin.h,ChildWinH就得到了定义,
第二次包含ChildWin.h的时候,就不会再包含下面的定义,直
接跳到了#endif上。这也是一种防止重复包含同一个头文件的
方法。如果自己写.h文件时,最好也按这种方法写。
 
大虾,请在指点一下,下面的错误怎么改?如果我写成:
virtual ~Graph()=0;
那么,我就不能在建立每一个子窗口的时候初始化一个Graph ThisGraph;
class Graph
{
public:
virtual ~Graph();
};
class LINE:public Graph
{
public:
~LINE();
};
[Linker Error] Unresolved external 'Graph::~Graph()' referenced from E:/GRAPHICS/MAIN.OBJ.
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部