![]() | ![]() Products ![]() ![]() ![]() ![]() |
Home » Technical Support » Elevate Web Builder Technical Support » Support Forums » Elevate Web Builder General » View Thread |
Messages 1 to 5 of 5 total |
![]() |
Fri, Mar 26 2021 9:49 AM | Permanent Link |
Gyro Cosmic | I'm trying to instantiate a form based on the type of the form.
For example: procedure TMain.Button1Click(Sender: TObject); var tcc: TControlClass; // holds the type of the form frm: TForm; begin // in app, this would be a parameter to a CreateFormByType() function tcc := TControlClass(TMyForm.ClassType()); // get the form's type // how do I instantiate tcc? frm := TForm(tcc.NewInstance()); // what is EWB's equivalent for newInstance(). end; Thanks, --GCR |
Fri, Mar 26 2021 12:10 PM | Permanent Link |
erickengelke | Gyro Cosmic wrote:
I'm trying to instantiate a form based on the type of the form. For example: procedure TMain.Button1Click(Sender: TObject); var tcc: TControlClass; // holds the type of the form frm: TForm; begin // in app, this would be a parameter to a CreateFormByType() function tcc := TControlClass(TMyForm.ClassType()); // get the form's type // how do I instantiate tcc? frm := TForm(tcc.NewInstance()); // what is EWB's equivalent for newInstance(). end; Thanks, --GCR Hi, It looks like you are getting confused based on some other language's way of doing things. What is it you are trying to accomplish in the big picture? If you want to create two forms of the same type: var form1, form2; begin form1 := TForm1.Create( application ); form2 := TForm1.Create(applicaiton); end; EWB Programming Books and Component Library http://www.erickengelke.com |
Fri, Mar 26 2021 12:15 PM | Permanent Link |
Walter Matte Tactical Business Corporation | var
form1of1, form1of2 : TForm1; begin form1of1 := TForm1.Create( application ); form1of2 := TForm1.Create(applicaiton); end; |
Fri, Mar 26 2021 1:56 PM | Permanent Link |
Gyro Cosmic | >> It looks like you are getting confused based on some other language's way of doing things.
Yup, that language is Delph. 😉 >> What is it you are trying to accomplish in the big picture? I'm trying to create a function that will allow me to create a form based on its type. Here's the stripped down Delphi function: class function TfrmBase.EmbedForm( var iVar; classType: TComponentClass; parentWin: TWinControl): TfrmBase; var instance: TComponent; begin Result := TfrmBase(iVar); if TForm(iVar) <> nil then exit; Instance := TComponent( classType.newInstance ); // here's how to create based on type in Delphi TComponent(iVar) := Instance; try Instance.create( parentWin ); TForm(Instance).parent := parentWin; [snip] except TComponent(iVar) := nil; Instance.free; raise; end; Result := TfrmBase(iVar); end; And here's my in work progress equivalent for EWB. class function TMain.EmbedForm(frmRef: TRef; classType: TComponentClass; parentCtrl: TControl); var instance: TControlClass; // or TComponent? begin if TForm(frmRef.RefObj) <> nil then exit; instance := TControlClass(classType.WHAT?); // HOW TO CREATE? frmRef.RefObj := instance; try instance.Create( parentCtrl ); [snip] except TComponent(frmRef.RefObj) := nil; Instance.free; raise; end; end; The goal being to make the form's type a parameter instead of passing it as a concrete type. i.e. not do: form1 := TForm1.Create( mainForm ); but instead the equivalent of: formType := TForm1; // as set elsewhere and then call EmbedForm( var form1, formType, mainForm); This allows me to put my form creation, pinning, and initialization code in the common function, my form types etc. in an array, and pass them into my function. Thanks, --GCR |
Tue, May 4 2021 5:06 PM | Permanent Link |
Tim Young [Elevate Software] Elevate Software, Inc. ![]() | The easiest way to do this is with a function/method like this: function CreateFormByClass(AFormClass: TFormControlClass): TFormControl; begin Result:=AFormClass.Create(Application); end; procedure TForm1.Button12Click(Sender: TObject); var TempForm: TFormControl; begin TempForm:=CreateFormByClass(TForm3); TempForm.Show; end; You can do the same thing with the TComponentClass class in the WebCore unit, and you can use the ClassByName function to get the class of any component that is in the EWB component library by name: https://www.elevatesoft.com/manual?action=viewtopic&id=ewb3&topic=ClassByName Tim Young Elevate Software www.elevatesoft.com |
This web page was last updated on Tuesday, February 11, 2025 at 11:58 AM | Privacy Policy![]() © 2025 Elevate Software, Inc. All Rights Reserved Questions or comments ? ![]() |