有没有对BCB也熟的富翁帮忙看看啊???(50分)

  • 主题发起人 主题发起人 诸葛白痴
  • 开始时间 开始时间

诸葛白痴

Unregistered / Unconfirmed
GUEST, unregistred user!
因为经常要创建,删除新建表单,所有代码很烦,看别的Delphi里可以将Form类作为参数
传给函数,于是我用BCB也试了,不行
Delphi:
ShowFormModal(FormClass: FormClass,pForm: ^TForm)
{
pForm = FormClass.Create(Self);
pForm.ShowModal();
pForm.Free();
}
BCB:
ShowFormModal(TFormClass FormClass,TForm *pForm)
{
pForm = new FormClass(Application);
pForm->ShowModal();
delete Form;
}

编译不成功,后面查看了TApplication->Create的帮助,发现用TMataClass *,结果还
是不行,为什么,有谁用过啊???

在Delphi里很好实玩,就是在BCB实现不了,还有在BCB里用
Application->CreateForm(FormClass,&Form);也可以实现,就是不能用new来实现,
为什么啊,天啊!!!

NEW
NEW
NEW


 
ShowFormModal(TForm *pForm)
{
pForm = new TForm(Application);
pForm->ShowModal();
delete pForm;
}
 
bool OpenForm(TForm *wForm)
{
int i;
bool FormExist;
if (wForm==NULL) return False;
FormExist=False;
for (i=0;i<Screen->FormCount;i++)
if (Screen->Forms->ClassType()==wForm->ClassType())
{ FormExist=True;
break;
}
if (FormExist==False) return FormExist;
if (wForm->WindowState==wsMinimized)
ShowWindow(wForm->Handle,SW_SHOWNORMAL);
else
ShowWindow(wForm->Handle,SW_SHOWNA);
if (!wForm->Visible) wForm->Visible=True;
wForm->BringToFront();
wForm->SetFocus();
return True;
}
//調用函數 Fkfzl 為FORM NAME.
if (OpenForm(Fkfzl)==False)
Fkfzl=new TFkfzl(Application);
 
delphi中声明的
一个类变量实际上也是指针,
eg :
procedure open(AForm:TFrom);
AForm实际是一个指针变量
在cb种类变量可通过两种方式作为参数
指针如楼上兄所示,还有一种就是
就是引用,建议你用CB前好好看一下C++这样才能学好CB
 
不知雨人兄是否有用过BCB,但在在下在BCB下用gonghh的方法确定不行,得到的是一个
新的普通form,而不是其他的已经有些控件在上面的form,如果那么简单,我想在下也
不至于在花这个点数来问了
 
ShowFormModal(TFormClass FormClass,TForm *pForm)
{
pForm = new FormClass(this);
////
pForm->ShowModal();
delete pForm;
// p
}
 
不行啊,这不是抄我的代码吗?就是不通过啊
 
1.用.pas写一个动态创建模块的单元加入工程,在BC里面调用
2.直接访问VTable
 
>> 8715:
第一种方法提问前已试过,不行
第二种还没到那种水平,可否给个代码看如何访问VTable
 
pForm = new FormClass(this);

在 VC++ 中 RunTimeclass 的概念。
 
编译都通不过,也许BCB的RealtimeClass机制不一样吧,不知道,但我搜全球也没找到,
也许没找到吧
 
1. 一个组件
unit ComponentCreator;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TComponentCreator = class(TComponent)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
function CreateComponent( InstanceClass: TComponentClass; AOwner: TComponent ): TComponent ;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyCtrls', [TComponentCreator]);
end;
function TComponentCreator.CreateComponent( InstanceClass: TComponentClass; AOwner: TComponent ): TComponent ;
var
Instance: TComponent;
begin
Instance := TComponent(InstanceClass.NewInstance);
Result := Instance;
try
Instance.Create(AOwner);
except
Result := nil;
raise;
end;
end;
end.
2.我也没敢真用,试试看吧
int nSize=FForm->InstanceSize();
void *pMem=(void *)new char[nSize];
TComponent *pObj=(TComponent *)FForm->InitInstance( pMem );
DWORD app=(DWORD)Application;
asm
{
mov eax,pObj
mov ebx,eax
mov ecx,app
mov edx,-1
mov edi,[eax]
call [edi+0x2c]
};
 
多人接受答案了。
 
后退
顶部