SRL Archive - Research & Development Lounge

Form Designer for Simba[Coming soon]


CynicRus

2012-07-11 09:54:00

Hi all. Let me introduce you to the forms designer for Simba. While he was at an early stage of development, but may place the components on the form, and change their properties in runtime.
Last update: 11.10.2014. Stable version is available now
All the suggestions - you can send me in private, comments - leave here. Written in Lazarus, full source code included. Thank you for your attention

Stable version has been released now, exe updated. Test form in attachment.

Any suggestion send to PM me, crashes or bugs report - PM me too. Sources available on git.

Virus total: https://www.virustotal.com/ru/file/1048c7b24bd3544316b038b8dca69f4a4afc2f6005388607347f34f7ab505875/analysis/1413056635/

Git: https://github.com/CynicRus/smbfrmdesigner/

Frement

2012-07-11 09:56:17

You should make this an extension.

CynicRus

2012-07-11 09:58:46

Yes, after conversion to stable version - I plan to turn this into a plug-in + extension.

Joe

2012-07-11 10:04:38

This is actually kind of cool looking. Will dl soon.

Abu

2012-07-11 10:46:19

Something I already suggested for the new Simba, no action was taken though.


So it's nice to see it being developed :)

Brandon

2012-07-11 10:54:23

From: abu_jwka
Something I already suggested for the new Simba, no action was taken though.

So it's nice to see it being developed :)


I had started on that but dropped it since I didn't know pascal :c
Only knew how to get it to drag drop components but honestly I'm glad to see this guy doing it. He's not even a member yet.

+1 from me.

NKN

2012-07-11 11:20:58

Wewt.

Finally can create those forms without them looking terrible. :D
Keep up the good work.

Abu

2012-07-11 11:24:16

Any reason as to why Simba didn't 'carry on' the form editor from SCAR?

Or did SCAR integrate the form editor after the SCAR/Simba split?

Kyle Undefined

2012-07-11 11:56:03

Form editor in SCAR has been there for the longest time, as to why Simba didn't carry over the editor, I don't know.

Sex

2012-07-11 12:16:12

From: Kyle Undefined
Form editor in SCAR has been there for the longest time, as to why Simba didn't carry over the editor, I don't know.


Freddy bought the form designer from someone so we couldn't use it.

NKN

2012-07-11 12:24:36

Why did SCAR and Simba split?

Edit:(And is Simba called that because SCAR is the name of the evil uncle? :D)

iBlank

2012-07-11 12:26:06

From: NKN
Why did SCAR and Simba split?


It all started when Nala entered the picture…

Silent

2012-07-11 12:42:48

This looks awesome. I'm going to be keeping a very close eye on this.

CynicRus

2012-07-11 13:57:12

Old bug fixed, new added-) Replacement of the class Tlist on a dynamic array, increasing the stability of the application

ToDo:
-Repair an script generator
-Repair property editor
-Add the normal removal of the form element

CynicRus

2012-07-12 02:52:42

Now a code generation is work, this can generate only components code. Source updated.
Generated script example:

Var
DsgnForm:TForm
TLabel6,: TLabel
Image0,: TImage
TButton2,TButton3,: TButton
TListBox1,: TListBox
TComboBox4,: TComboBox
TProgressBar5,: TProgressBar


procedure InitForm
begin
//DsgnForm\\
DsgnForm:=TDsgnForm.Create(nil)
DsgnForm.Left:=0
DsgnForm.Top:=0
DsgnForm.Width:=578
DsgnForm.Height:=462
DsgnForm.Font.Name:=default
DsgnForm.Font.Color:=clDefault ($20000000)
DsgnForm.Font.Size:=0
//TLabel6\\
TLabel6:=TLabel.Create(TDsgnForm)
TLabel6.Parent:=TDsgnForm
TLabel6.Left:=230
TLabel6.Top:=144
TLabel6.Width:=42
TLabel6.Height:=16
TLabel6.Font.Name:=default
TLabel6.Font.Color:=clDefault ($20000000)
TLabel6.Font.Size:=0
//\\
:=TImage.Create(TDsgnForm)
.Parent:=TDsgnForm
.Left:=141
.Top:=285
.Width:=90
.Height:=90
.Font.Name:=default
.Font.Color:=clDefault ($20000000)
.Font.Size:=0
//TButton2\\
TButton2:=TButton.Create(TDsgnForm)
TButton2.Parent:=TDsgnForm
TButton2.Left:=53
TButton2.Top:=182
TButton2.Width:=75
TButton2.Height:=25
TButton2.Font.Name:=default
TButton2.Font.Color:=clDefault ($20000000)
TButton2.Font.Size:=0
//TButton3\\
TButton3:=TButton.Create(TDsgnForm)
TButton3.Parent:=TDsgnForm
TButton3.Left:=166
TButton3.Top:=184
TButton3.Width:=75
TButton3.Height:=25
TButton3.Font.Name:=default
TButton3.Font.Color:=clDefault ($20000000)
TButton3.Font.Size:=0
//TListBox1\\
TListBox1:=TListBox.Create(TDsgnForm)
TListBox1.Parent:=TDsgnForm
TListBox1.Left:=32
TListBox1.Top:=46
TListBox1.Width:=100
TListBox1.Height:=80
TListBox1.Font.Name:=default
TListBox1.Font.Color:=clDefault ($20000000)
TListBox1.Font.Size:=0
//TComboBox4\\
TComboBox4:=TComboBox.Create(TDsgnForm)
TComboBox4.Parent:=TDsgnForm
TComboBox4.Left:=178
TComboBox4.Top:=42
TComboBox4.Width:=100
TComboBox4.Height:=23
TComboBox4.Font.Name:=default
TComboBox4.Font.Color:=clDefault ($20000000)
TComboBox4.Font.Size:=0
//TProgressBar5\\
TProgressBar5:=TProgressBar.Create(TDsgnForm)
TProgressBar5.Parent:=TDsgnForm
TProgressBar5.Left:=201
TProgressBar5.Top:=97
TProgressBar5.Width:=100
TProgressBar5.Height:=20
TProgressBar5.Font.Name:=default
TProgressBar5.Font.Color:=clDefault ($20000000)
TProgressBar5.Font.Size:=0
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall(''InitForm'', v);
end;


procedure ShowFormModal;
begin
DsgnForm.ShowModal;
end;


procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall(''ShowFormModal'', v);
end;


begin
SafeInitForm;
SafeShowFormModal;
end;


Work in progress-)

Daniel

2012-07-12 03:38:23

:(.

CynicRus

2012-07-12 03:57:07


YoHoJo

2012-07-12 03:59:45

I love when people like you come out of nowhere and produce amazing stuff like this!
Great work! Keep it up!

CynicRus

2012-07-12 04:30:08

Thank you for your kind comments. -) However, I would come in handy your help. It would be priceless - if someone suggested, which generally have components, and most importantly - their properties. No information is silent, the designer will support only 8-component (

Daniel

2012-07-12 04:58:42

TLabel
TButton
TImage
TEdit
TComboBox

would be the most widely used.

/me is still sad :(

YoHoJo

2012-07-12 04:59:20

Okay you big baby, WHY R U SAD?
Were you working on similar project?

Daniel

2012-07-12 05:08:32

From: YoHoJo
Were you working on similar project?

A similar project, yes :( :p

YoHoJo

2012-07-12 05:13:26

Well then?! Keep it going! Or collaborate!

P1ng

2012-07-12 05:28:59

This looks great! I've shyed away from adding forms to my scripts because I haven't been able to get them to look just the way I want, very keen for the release of this!

CynicRus

2012-07-12 05:30:38

So, script gen is work now. And…In theory, this can already be used to design forms.
See s_frm_dsgn_withcode_gen.zip.
Example generated script:


Var
DsgnForm:TForm;
TLabel1,TLabel2: TLabel;
TEdit6,TEdit7: TEdit;
Image0: TImage;
TButton3,TButton4: TButton;
TCheckBox8: TCheckBox;
TListBox9: TListBox;
TComboBox10: TComboBox;


procedure InitForm;
begin
//DsgnForm\\
DsgnForm:=DsgnForm.Create(nil)
DsgnForm.Caption:=DsgnForm;
DsgnForm.Left:=0;
DsgnForm.Top:=0;
DsgnForm.Width:=571;
DsgnForm.Height:=449;
DsgnForm.Font.Name:=default;
DsgnForm.Font.Color:=clDefault ($20000000);
DsgnForm.Font.Size:=0;
//TLabel1\\
TLabel1:=TLabel.Create(DsgnForm);
TLabel1.Parent:=DsgnForm;
TLabel1.Caption:=TLabel1;
TLabel1.Left:=76;
TLabel1.Top:=47;
TLabel1.Width:=42;
TLabel1.Height:=16;
TLabel1.Font.Name:=default;
TLabel1.Font.Color:=clDefault ($20000000);
TLabel1.Font.Size:=0;
//TLabel2\\
TLabel2:=TLabel.Create(DsgnForm);
TLabel2.Parent:=DsgnForm;
TLabel2.Caption:=TLabel2;
TLabel2.Left:=227;
TLabel2.Top:=46;
TLabel2.Width:=42;
TLabel2.Height:=16;
TLabel2.Font.Name:=default;
TLabel2.Font.Color:=clDefault ($20000000);
TLabel2.Font.Size:=0;
//TEdit6\\
TEdit6:=TEdit.Create(DsgnForm);
TEdit6.Parent:=DsgnForm;
TEdit6.Text:=input your text here!;
TEdit6.Left:=223;
TEdit6.Top:=189;
TEdit6.Width:=80;
TEdit6.Height:=23;
TEdit6.Font.Name:=default;
TEdit6.Font.Color:=clDefault ($20000000);
TEdit6.Font.Size:=0;
//TEdit6.MaxLength:=x;
//TEdit6.PasswordChar:=*;
//TEdit7\\
TEdit7:=TEdit.Create(DsgnForm);
TEdit7.Parent:=DsgnForm;
TEdit7.Text:=input your text here!;
TEdit7.Left:=225;
TEdit7.Top:=254;
TEdit7.Width:=80;
TEdit7.Height:=23;
TEdit7.Font.Name:=default;
TEdit7.Font.Color:=clDefault ($20000000);
TEdit7.Font.Size:=0;
//TEdit7.MaxLength:=x;
//TEdit7.PasswordChar:=*;
//Image0\\
Image0:=TImage.Create(DsgnForm);
Image0.Parent:=DsgnForm;
Image0.Left:=49;
Image0.Top:=191;
Image0.Width:=90;
Image0.Height:=90;
//load bitmap to image here
//TButton3\\
TButton3:=TButton.Create(DsgnForm)
TButton3.Parent:=DsgnForm;
TButton3.Caption:=TButton3;
TButton3.Left:=80;
TButton3.Top:=94;
TButton3.Width:=75;
TButton3.Height:=25;
TButton3.OnClick:=@YourClickProcedure;
TButton3.Font.Name:=default;
TButton3.Font.Color:=clDefault ($20000000);
TButton3.Font.Size:=0;
//TButton4\\
TButton4:=TButton.Create(DsgnForm)
TButton4.Parent:=DsgnForm;
TButton4.Caption:=TButton4;
TButton4.Left:=234;
TButton4.Top:=101;
TButton4.Width:=75;
TButton4.Height:=25;
TButton4.OnClick:=@YourClickProcedure;
TButton4.Font.Name:=default;
TButton4.Font.Color:=clDefault ($20000000);
TButton4.Font.Size:=0;
//TCheckBox8\\
TCheckBox8:=TCheckBox.Create(DsgnForm);
TCheckBox8.Parent:=DsgnForm;
TCheckBox8.Caption:=TCheckBox8;
TCheckBox8.Checked:=false;
TCheckBox8.Left:=225;
TCheckBox8.Top:=328;
TCheckBox8.Width:=85;
TCheckBox8.Height:=19;
TCheckBox8.Font.Name:=default;
TCheckBox8.Font.Color:=clDefault ($20000000);
TCheckBox8.Font.Size:=0;
//TListBox9\\
TListBox9:=TListBox.Create(DsgnForm)
TListBox9.Parent:=DsgnForm
TListBox9.Left:=400
TListBox9.Top:=45
TListBox9.Width:=100
TListBox9.Height:=80
//add your items here
TListBox9.Items.Add(YourItem)
//End items
TListBox9.OnClick:=@YourClickProcedure
TListBox9.Font.Name:=default;
TListBox9.Font.Color:=clDefault ($20000000);
TListBox9.Font.Size:=0;
//TComboBox10\\
TComboBox10:=TComboBox.Create(DsgnForm);
TComboBox10.Parent:=DsgnForm;
TComboBox10.Left:=411;
TComboBox10.Top:=201;
TComboBox10.Width:=100;
TComboBox10.Height:=23;
//add your items here
TComboBox10.Items.Add(YourItem);
//End items
TComboBox10.OnClick:=@YourClickProcedure;
TComboBox10.Font.Name:=default;
TComboBox10.Font.Color:=clDefault ($20000000);
TComboBox10.Font.Size:=0;
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall(InitForm, v);
end;


procedure ShowFormModal;
begin
DsgnForm.ShowModal;
end;


procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall(ShowFormModal, v);
end;


begin
SafeInitForm;
SafeShowFormModal;
end.


CynicRus

2012-07-12 06:20:53

Stabilize save state of components, a visual designer - works, generator script - works. The editor component properties - currently not available. So, this app may use for script form design-) Version - alpha. Attachment updated.

grats

2012-07-12 06:25:09

woo fancy it even comments in the generated output

even as is it saves a buttload of time, can't wait to see the final

Daniel

2012-07-12 07:36:11

Nice work thus far :)

Just a suggestion, though: don't add a 'T' in front of the variable names!

Regards,
Daniel. :)

CynicRus

2012-07-12 08:40:54

From: Daniel
Nice work thus far :)

Just a suggestion, though: don't add a 'T' in front of the variable names!

Regards,
Daniel. :)

Noted, I fix that in future versions-)


masterBB

2012-07-12 09:48:17

From: CynicRus
Yes, after conversion to stable version - I plan to turn this into a plug-in + extension.


Simba extensions do not support the loading of libraries. I suggest either add it to simba, or create and extension. If you wish I could do the small conversion to an extension for you.

CynicRus

2012-07-12 09:48:32

Fixed script generator. Now the generated code can be used in the script, without manual editing, just after generation.
example generated code:

var
DsgnForm:TForm;
TEdit1,TEdit2,TEdit3: TEdit;
TButton5: TButton;
TComboBox4: TComboBox;
const
default = 'Comic Sans MS';



procedure YourClickProcedure(Sender: TObject);
begin
ShowMessage('click');
end;


procedure InitForm;
begin
//DsgnForm\\
DsgnForm:=TForm.Create(nil)
DsgnForm.Caption:='DsgnForm';
DsgnForm.Left:=0;
DsgnForm.Top:=0;
DsgnForm.Width:=469;
DsgnForm.Height:=385;
DsgnForm.Font.Name:=default;
DsgnForm.Font.Color:=clDefault;
DsgnForm.Font.Size:=0;
//TEdit1\\
TEdit1:=TEdit.Create(DsgnForm);
TEdit1.Parent:=DsgnForm;
TEdit1.Text:='input your text here!';
TEdit1.Left:=23;
TEdit1.Top:=23;
TEdit1.Width:=80;
TEdit1.Height:=23;
TEdit1.Font.Name:=default;
TEdit1.Font.Color:=clDefault;
TEdit1.Font.Size:=0;
//TEdit1.MaxLength:=x;
//TEdit1.PasswordChar:=*;
//TEdit2\\
TEdit2:=TEdit.Create(DsgnForm);
TEdit2.Parent:=DsgnForm;
TEdit2.Text:='input your text here!';
TEdit2.Left:=24;
TEdit2.Top:=73;
TEdit2.Width:=80;
TEdit2.Height:=23;
TEdit2.Font.Name:=default;
TEdit2.Font.Color:=clDefault;
TEdit2.Font.Size:=0;
//TEdit2.MaxLength:=x;
//TEdit2.PasswordChar:=*;
//TEdit3\\
TEdit3:=TEdit.Create(DsgnForm);
TEdit3.Parent:=DsgnForm;
TEdit3.Text:='input your text here!';
TEdit3.Left:=24;
TEdit3.Top:=127;
TEdit3.Width:=80;
TEdit3.Height:=23;
TEdit3.Font.Name:=default;
TEdit3.Font.Color:=clDefault;
TEdit3.Font.Size:=0;
//TEdit3.MaxLength:=x;
//TEdit3.PasswordChar:=*;
//TButton5\\
TButton5:=TButton.Create(DsgnForm)
TButton5.Parent:=DsgnForm;
TButton5.Caption:='TButton5';
TButton5.Left:=184;
TButton5.Top:=87;
TButton5.Width:=75;
TButton5.Height:=25;
TButton5.OnClick:=@YourClickProcedure;
TButton5.Font.Name:=default;
TButton5.Font.Color:=clDefault;
TButton5.Font.Size:=0;
//TComboBox4\\
TComboBox4:=TComboBox.Create(DsgnForm);
TComboBox4.Parent:=DsgnForm;
TComboBox4.Left:=177;
TComboBox4.Top:=21;
TComboBox4.Width:=100;
TComboBox4.Height:=23;
//add your items here
TComboBox4.Items.Add('YourItem');
//End items
TComboBox4.OnClick:=@YourClickProcedure;
TComboBox4.Font.Name:=default;
TComboBox4.Font.Color:=clDefault;
TComboBox4.Font.Size:=0;
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;


procedure ShowFormModal;
begin
DsgnForm.ShowModal;
end;


procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;


begin
SafeInitForm;
SafeShowFormModal;
end.

masterBB

2012-07-12 09:50:44

From: masterBB
Simba extensions do not support the loading of libraries. I suggest either add it to simba, or create and extension. If you wish I could do the small conversion to an extension for you.


I meant if you wish I could add it to simba for you. Extension would be a challenge.

CynicRus

2012-07-12 09:52:40

From: masterBB
Simba extensions do not support the loading of libraries. I suggest either add it to simba, or create and extension. If you wish I could do the small conversion to an extension for you.

The code is open, you can freely use it. I do not do the expansion - because it will not be able to maintain and debug, I do not have the necessary knowledge-(

Wizzup?

2012-07-12 09:53:28

Whoa! This is very nice. I'll definitely want to integrate this into Simba. May I suggest not going for an extension, as that will probably greatly complicate things. Extensions are nice for more simple tasks, I think. Not so much for very complicated tasks. Integrating it into Simba is probably a lot easier. Of course, if you don't have the time to integrate it, someone else can integrate it.

To answer a few questions: We never got a Form Designer, simply because there isn't an existing one that we can use. We never shared any source with SCAR, simply because SCAR doesn't share its source with the rest of the world. So there is no ``Form Designer'' to ``copy'' to start with. Both Raymond and I never felt a form designer was something we'd like to make, so it never really happened.

But, this is great. We might be able to merge this into Simba 1.0, too. :)

CynicRus

2012-07-12 09:55:15

From: masterBB
I meant if you wish I could add it to simba for you. Extension would be a challenge.

Add to Simba? Of course add to Simba, a program for it is written - to someday become a part of Simba.

CynicRus

2012-07-12 10:11:08

From: Wizzup?
Whoa! This is very nice. I'll definitely want to integrate this into Simba. May I suggest not going for an extension, as that will probably greatly complicate things. Extensions are nice for more simple tasks, I think. Not so much for very complicated tasks. Integrating it into Simba is probably a lot easier. Of course, if you don't have the time to integrate it, someone else can integrate it.

To answer a few questions: We never got a Form Designer, simply because there isn't an existing one that we can use. We never shared any source with SCAR, simply because SCAR doesn't share its source with the rest of the world. So there is no ``Form Designer'' to ``copy'' to start with. Both Raymond and I never felt a form designer was something we'd like to make, so it never really happened.

But, this is great. We might be able to merge this into Simba 1.0, too. :)

I'm glad you enjoyed it. If someone can move it in the Simba - I'll be happy. Thank you all for your positive feedback. Unfortunately I still can't move it myself, because I will not have enough time to understand with source code Simba

Janilabo

2012-07-12 10:16:54

Nice work, CynicRus! Keep working on it man, it sure looks very promising so far.
Thumbs up for integrating this to Simba v1.0! :p

Abu

2012-07-12 10:17:13

Does it have the same property as the SCAR Form Editor where it produces these lines in the editor to help you allign buttons and labels?

That helps me a lot when making my forms.

CynicRus

2012-07-12 10:21:05

I have not seen the forms designer SCAR, but if you mean manually editing the component's properties - it will be added in future versions.

CynicRus

2012-07-12 14:48:38

Work over an editor component has begun.

ReadySteadyGo

2012-07-12 15:32:14

From: CynicRus
I have not seen the forms designer SCAR, but if you mean manually editing the component's properties - it will be added in future versions.


I think he means a guide lines so that when you drag a component it will snap to the lines creating harmonious padding/margins.

E: Great work by the way!

Brotein

2012-07-12 15:58:28

Dude this looks amazing, I was hoping for something like this to come about for a few months now.

CynicRus

2012-07-13 08:37:53

New Dev version added(in sources). Property editor logic is work, but i have some trouble with Grid component in Lazarus. If someone can help with fix them - I'll be very grateful to him.

CynicRus

2012-07-13 08:42:38

A bug in the method ShowEditor of a TGsvCustomObjectInspectorGrid class.
"TControl.InvalidatePreferredSize loop detected" and i don't know, this is my error or lazarus bug. Because in Delphi this work finest.

Daniel

2012-07-13 10:38:45

From: CynicRus
but i have some trouble with Grid component in Lazarus. If someone can help with fix them - I'll be very grateful to him.


Do you mean component/grid snapping? Just do something like:

component.Left := (component.Left div 8) * 8;
component.Top := (component.Top div 8) * 8;

:)

CynicRus

2012-07-13 10:59:06

No, no. Component of the grid for editing properties of the object. For details, see GSVObjectInspector

Abu

2012-07-13 14:06:16

From: ReadySteadyGo
I think he means a guide lines so that when you drag a component it will snap to the lines creating harmonious padding/margins.


Exactly that.

CynicRus

2012-07-13 14:41:12

From: abu_jwka
Exactly that.

I will try to implement this in the future, but am not sure that this will happen rapidly)
**********

Well, fixed a component of the attempt failed. Although the idea of metaclasses in it - I very much liked. I leave it solely for the story and write their own implementation of such a functional.

CynicRus

2012-07-13 15:48:05

Minor update, source updated too.
Example generated scipt:

var
DsgnForm:TForm;
Label2: TLabel;
Edit3: TEdit;
Button1: TButton;
ListBox4: TListBox;
const
default = 'Comic Sans MS';



procedure YourClickProcedure(Sender: TObject);
begin
ShowMessage('click');
end;


procedure InitForm;
begin
//DsgnForm\\
DsgnForm:=TForm.Create(nil)
DsgnForm.Caption:='DsgnForm';
DsgnForm.Left:=0;
DsgnForm.Top:=0;
DsgnForm.Width:=336;
DsgnForm.Height:=278;
DsgnForm.Font.Name:=default;
DsgnForm.Font.Color:=clDefault;
DsgnForm.Font.Size:=0;
//Label2\\
Label2:=TLabel.Create(DsgnForm);
Label2.Parent:=DsgnForm;
Label2.Caption:='Label2';
Label2.Left:=35;
Label2.Top:=17;
Label2.Width:=42;
Label2.Height:=16;
Label2.Font.Name:=default;
Label2.Font.Color:=clDefault;
Label2.Font.Size:=0;
//Edit3\\
Edit3:=TEdit.Create(DsgnForm);
Edit3.Parent:=DsgnForm;
Edit3.Text:='input your text here!';
Edit3.Left:=35;
Edit3.Top:=46;
Edit3.Width:=80;
Edit3.Height:=23;
Edit3.Font.Name:=default;
Edit3.Font.Color:=clDefault;
Edit3.Font.Size:=0;
//Edit3.MaxLength:=x;
//Edit3.PasswordChar:=*;
//Button1\\
Button1:=TButton.Create(DsgnForm)
Button1.Parent:=DsgnForm;
Button1.Caption:='Button1';
Button1.Left:=110;
Button1.Top:=164;
Button1.Width:=75;
Button1.Height:=25;
Button1.OnClick:=@YourClickProcedure;
Button1.Font.Name:=default;
Button1.Font.Color:=clDefault;
Button1.Font.Size:=0;
//ListBox4\\
ListBox4:=TListBox.Create(DsgnForm)
ListBox4.Parent:=DsgnForm
ListBox4.Left:=164;
ListBox4.Top:=29;
ListBox4.Width:=100;
ListBox4.Height:=80;
//add your items here
ListBox4.Items.Add('YourItem');
//End items
ListBox4.OnClick:=@YourClickProcedure;
ListBox4.Font.Name:=default;
ListBox4.Font.Color:=clDefault;
ListBox4.Font.Size:=0;
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;


procedure ShowFormModal;
begin
DsgnForm.ShowModal;
end;


procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;


begin
SafeInitForm;
SafeShowFormModal;
end.

CynicRus

2012-07-14 03:05:49

Property editor added. Only view property only, work in progress.

source updated.

PS: Exe updated too, but in home i can compile only 64 bit exe-(

CynicRus

2012-07-14 07:00:00

Properties editro has been aviable now.
source and exe updated.

Janilabo

2012-07-14 07:03:06

Starting to look pretty good, Cynic! Nice.

CynicRus

2012-07-14 07:29:13

Thanks!-)
Fixed code generator with taking on the availability a Property Editor.
Generated script:

var
DsgnForm:TForm;
lbl: TLabel;
mEdt: TEdit;
BtnClick: TButton;
const
default = 'Comic Sans MS';



procedure YourClickProcedure(Sender: TObject);
begin
ShowMessage('click');
end;


procedure InitForm;
begin
//DsgnForm\\
DsgnForm:=TForm.Create(nil)
DsgnForm.Caption:='DsgnForm';
DsgnForm.Left:=0;
DsgnForm.Top:=0;
DsgnForm.Width:=139;
DsgnForm.Height:=149;
DsgnForm.Font.Name:=default;
DsgnForm.Font.Color:=clDefault;
DsgnForm.Font.Size:=0;
//lbl\\
lbl:=TLabel.Create(DsgnForm);
lbl.Parent:=DsgnForm;
lbl.Caption:='MyLabel';
lbl.Left:=20;
lbl.Top:=8;
lbl.Width:=46;
lbl.Height:=16;
lbl.Font.Name:=default;
lbl.Font.Color:=clDefault;
lbl.Font.Size:=0;
//mEdt\\
mEdt:=TEdit.Create(DsgnForm);
mEdt.Parent:=DsgnForm;
mEdt.Text:='input your text here!';
mEdt.Left:=53;
mEdt.Top:=53;
mEdt.Width:=80;
mEdt.Height:=23;
mEdt.Font.Name:=default;
mEdt.Font.Color:=clDefault;
mEdt.Font.Size:=0;
//mEdt.MaxLength:=x;
//mEdt.PasswordChar:=*;
//BtnClick\\
BtnClick:=TButton.Create(DsgnForm)
BtnClick.Parent:=DsgnForm;
BtnClick.Caption:='MyButton';
BtnClick.Left:=18;
BtnClick.Top:=70;
BtnClick.Width:=75;
BtnClick.Height:=25;
BtnClick.OnClick:=@YourClickProcedure;
BtnClick.Font.Name:=default;
BtnClick.Font.Color:=clDefault;
BtnClick.Font.Size:=0;
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;


procedure ShowFormModal;
begin
DsgnForm.ShowModal;
end;


procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;


begin
SafeInitForm;
SafeShowFormModal;
end.
Source aviable now.

Abu

2012-07-14 09:28:18

Would love to test this out but don't have access to Simba.

Looking great though!


EDIT: Could you add TComboBox and TListBox?

Home

2012-07-14 09:31:40

Awesome work mate, keep up the good work!

Rep +

~Home

CynicRus

2012-07-14 09:52:43

From: abu_jwka
Would love to test this out but don't have access to Simba.

Looking great though!


EDIT: Could you add TComboBox and TListBox?

And, in general ListBox and Combobox has long been available.
If you mean add it to form and generate script - take this:
Generated script:

var
DsgnForm:TForm;
blnClick: TButton;
MyListBox: TListBox;
MyBox: TComboBox;
const
default = 'Comic Sans MS';



procedure YourClickProcedure(Sender: TObject);
begin
ShowMessage('click');
end;


procedure InitForm;
begin
//DsgnForm\\
DsgnForm:=TForm.Create(nil)
DsgnForm.Caption:='DsgnForm';
DsgnForm.Left:=0;
DsgnForm.Top:=0;
DsgnForm.Width:=495;
DsgnForm.Height:=400;
DsgnForm.Font.Name:=default;
DsgnForm.Font.Color:=clDefault;
DsgnForm.Font.Size:=0;
//blnClick\\
blnClick:=TButton.Create(DsgnForm)
blnClick.Parent:=DsgnForm;
blnClick.Caption:='MyBtn';
blnClick.Left:=303;
blnClick.Top:=120;
blnClick.Width:=75;
blnClick.Height:=25;
blnClick.OnClick:=@YourClickProcedure;
blnClick.Font.Name:=default;
blnClick.Font.Color:=clDefault;
blnClick.Font.Size:=0;
//MyListBox\\
MyListBox:=TListBox.Create(DsgnForm)
MyListBox.Parent:=DsgnForm
MyListBox.Left:=16;
MyListBox.Top:=8;
MyListBox.Width:=243;
MyListBox.Height:=315;
//add your items here
MyListBox.Items.Add('YourItem');
//End items
MyListBox.OnClick:=@YourClickProcedure;
MyListBox.Font.Name:=default;
MyListBox.Font.Color:=clDefault;
MyListBox.Font.Size:=0;
//MyBox\\
MyBox:=TComboBox.Create(DsgnForm);
MyBox.Parent:=DsgnForm;
MyBox.Left:=295;
MyBox.Top:=9;
MyBox.Width:=100;
MyBox.Height:=23;
//add your items here
MyBox.Items.Add('YourItem');
//End items
MyBox.OnClick:=@YourClickProcedure;
MyBox.Font.Name:=default;
MyBox.Font.Color:=clDefault;
MyBox.Font.Size:=0;
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;


procedure ShowFormModal;
begin
DsgnForm.ShowModal;
end;


procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;


begin
SafeInitForm;
SafeShowFormModal;
end.

CynicRus

2012-07-16 14:10:46

Update:
- fixed a lot of crashes
- add font properties editor
-add image loading
-code generator updated
generated script example:

var
MyForm:TForm;
TLabel0: TLabel;
medit: TEdit;
myImg: TImage;
cbox: TCheckBox;
lbox: TListBox;
combBox: TComboBox;
b, w, h: Integer;
const
default = 'Comic Sans MS';



procedure YourClickProcedure(Sender: TObject);
begin
ShowMessage('click');
end;


procedure InitForm;
begin
//MyForm\\
MyForm:=TForm.Create(nil)
MyForm.Caption:='Hello';
MyForm.Left:=0;
MyForm.Top:=0;
MyForm.Width:=510;
MyForm.Height:=364;
MyForm.Font.Name:=default;
MyForm.Font.Color:=clDefault;
MyForm.Font.Size:=0;
//TLabel0\\
TLabel0:=TLabel.Create(MyForm);
TLabel0.Parent:=MyForm;
TLabel0.Caption:='TLabel0';
TLabel0.Left:=33;
TLabel0.Top:=33;
TLabel0.Width:=60;
TLabel0.Height:=17;
TLabel0.Font.Name:='@Batang';
TLabel0.Font.Color:=clRed;
TLabel0.Font.Size:=12;
//medit\\
medit:=TEdit.Create(MyForm);
medit.Parent:=MyForm;
medit.Text:='input your text here!';
medit.Left:=239;
medit.Top:=138;
medit.Width:=80;
medit.Height:=27;
medit.Font.Name:='Broadway';
medit.Font.Color:=clMaroon;
medit.Font.Size:=12;
//medit.MaxLength:=x;
//medit.PasswordChar:=*;
//myImg\\
myImg:=TImage.Create(MyForm);
myImg.Parent:=MyForm;
myImg.Left:=40;
myImg.Top:=161;
myImg.Width:=24;
myImg.Height:=24;
b := loadbitmap('C:\smbFrmDesigner_src_new\smbFrmDesigner\img\2.bmp');
getbitmapsize(b, w, h);
copycanvas(getbitmapcanvas(b),myImg.canvas, 0, 0, w, h, 0, 0, w, h);
//cbox\\
cbox:=TCheckBox.Create(MyForm);
cbox.Parent:=MyForm;
cbox.Caption:='myBox';
cbox.Checked:=false;
cbox.Left:=39;
cbox.Top:=79;
cbox.Width:=70;
cbox.Height:=20;
cbox.Font.Name:='@Gulim';
cbox.Font.Color:=clOlive;
cbox.Font.Size:=12;
//lbox\\
lbox:=TListBox.Create(MyForm)
lbox.Parent:=MyForm
lbox.Left:=223;
lbox.Top:=22;
lbox.Width:=100;
lbox.Height:=80;
//add your items here
lbox.Items.Add('YourItem');
//End items
lbox.OnClick:=@YourClickProcedure;
lbox.Font.Name:=default;
lbox.Font.Color:=clDefault;
lbox.Font.Size:=0;
//combBox\\
combBox:=TComboBox.Create(MyForm);
combBox.Parent:=MyForm;
combBox.Left:=49;
combBox.Top:=22;
combBox.Width:=100;
combBox.Height:=23;
//add your items here
combBox.Items.Add('YourItem');
//End items
combBox.OnClick:=@YourClickProcedure;
combBox.Font.Name:='Broadway';
combBox.Font.Color:=clMaroon;
combBox.Font.Size:=12;
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;


procedure ShowFormModal;
begin
Hello.ShowModal;
end;


procedure SafeShowFormModal;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;


begin
SafeInitForm;
SafeShowFormModal;
end.

Wizzup?

2012-07-16 16:40:57

Very cool. I can definitely agree with your signature, too. ;)

m3gaman3g3nd

2012-07-16 18:37:53

didnt they already have 1 of these ? oh wait for simba…. yeah scar has 1 buit in… man scar still has great stuff

CynicRus

2012-07-17 04:17:26


CynicRus

2012-07-17 04:42:05

Git link: https://github.com/CynicRus/smbfrmdesigner/

Le Jingle

2012-07-17 04:46:16

From: CynicRus
Git link: https://github.com/CynicRus/smbfrmdesigner/


Awesome Sauce! :>
Watched & Forked.
Might I add; great work you've done too.

Janilabo

2012-07-17 05:25:27

Project is nicely progressing - good work, Cynic.
Happy to see you added it to GitHub. Thumbs up!

CynicRus

2012-07-17 10:26:13

Update.
Load\Save designed form is work now, see Github.

CynicRus

2012-07-17 13:48:25

Current status: beta released, exe updated. Enjoy for designing! Cynic.

Kyle Undefined

2012-07-17 14:12:56

Nice work :) Now integrate it with Simba :p

Watched on GH.

CynicRus

2012-07-18 02:24:48

From: Kyle Undefined
Nice work :) Now integrate it with Simba :p

Watched on GH.

Integrated-) See Github-)

Wizzup?

2012-07-19 06:26:36

Terrific. I'll look at merging this to Simba 1.0 after I've finished the SetClientArea stuff. :)

putonajonny

2012-07-20 07:29:13

This looks like it will come in really useful, just one thing I have noticed, It generates code like this:
TEdit0:=TEdit.Create(DsgnForm);
TEdit0.Parent:=DsgnForm;
TEdit0.Text:='input your text here!';
TEdit0.Left:=19;
TEdit0.Top:=37;
TEdit0.Width:=82;
TEdit0.Height:=21;
TEdit0.Font.Name:=default;
TEdit0.Font.Color:=clDefault;
TEdit0.Font.Size:=0;
It would be a lot neeter if it was like this:
TEdit0:=TEdit.Create(DsgnForm);
with TEdit0 do
begin
Parent:=DsgnForm;
Text:='input your text here!';
Left:=19;
Top:=37;
Width:=82;
Height:=21;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
end;

CynicRus

2012-07-20 09:43:56

Update code gen, code formatting also added. Exe updated.
Example generated code:

program new;
var
DsgnForm:TForm;
TLabel2: TLabel;
TEdit0,TEdit1: TEdit;
TButton3: TButton;
TCheckBox4: TCheckBox;
TListBox5: TListBox;
TRadioButton6: TRadioButton;
const
default = 'Comic Sans MS';



procedure YourClickProcedure(Sender: TObject);
begin
ShowMessage('click');
end;


procedure InitForm;
begin
//DsgnForm\\
DsgnForm:=TForm.Create(nil);
with DsgnForm do
begin
Caption:='DsgnForm';
Left:=0;
Top:=0;
Width:=336;
Height:=278;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
end;
//TLabel2\\
TLabel2:=TLabel.Create(DsgnForm);
with TLabel2 do
begin
Parent:=DsgnForm;
Caption:='TLabel2';
Left:=29;
Top:=53;
Width:=42;
Height:=16;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
end;
//TEdit0\\
TEdit0:=TEdit.Create(DsgnForm);
with TEdit0 do
begin
Parent:=DsgnForm;
Text:='input your text here!';
Left:=26;
Top:=12;
Width:=80;
Height:=23;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
//TEdit0.MaxLength:=x;
//TEdit0.PasswordChar:=*;
end;
//TEdit1\\
TEdit1:=TEdit.Create(DsgnForm);
with TEdit1 do
begin
Parent:=DsgnForm;
Text:='input your text here!';
Left:=27;
Top:=78;
Width:=80;
Height:=23;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
//TEdit1.MaxLength:=x;
//TEdit1.PasswordChar:=*;
end;
//TButton3\\
TButton3:=TButton.Create(DsgnForm);
with TButton3 do
begin
Parent:=DsgnForm;
Caption:='TButton3';
Left:=28;
Top:=116;
Width:=75;
Height:=25;
OnClick:=@YourClickProcedure;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
end;
//TCheckBox4\\
TCheckBox4:=TCheckBox.Create(DsgnForm);
with TCheckBox4 do
begin
Parent:=DsgnForm;
Caption:='TCheckBox4';
Checked:=false;
Left:=132;
Top:=13;
Width:=85;
Height:=19;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
end;
//TListBox5\\
TListBox5:=TListBox.Create(DsgnForm);
with TListBox5 do
begin
Parent:=DsgnForm;
Left:=131;
Top:=45;
Width:=181;
Height:=175;
//add your items here
Items.Add('YourItem');
//End items
OnClick:=@YourClickProcedure;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
end;
//TRadioButton6\\
TRadioButton6:=TRadioButton.Create(DsgnForm);
with TRadioButton6 do
begin
Parent:=DsgnForm;
Caption:='TRadioButton6';
Left:=16;
Top:=182;
Width:=99;
Height:=19;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
end;
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;


procedure ShowFormModal;
begin
DsgnForm.ShowModal;
end;


procedure SafeShowFormModal;
var
v: TVariantArray;
begin
SetArrayLength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;


begin
SafeInitForm;
SafeShowFormModal;
end.

J J

2012-07-23 18:31:25

Great! I've never used Forms in any of my scripts but I think I'll look into them fairly soon and I might even use this if I'm feeling lazy hehe.

[F]aceless

2012-07-23 18:48:16

Is this the GUIs that are used on scripts?

NKN

2012-07-23 19:13:32

From: henrik30796
Is this the GUIs that are used on scripts?


Yes.

[F]aceless

2012-07-23 19:38:40

So this means that in the new simba, scripts will come with this GUIs? Awesome! :f:

Abu

2012-07-23 19:49:32

From: henrik30796
So this means that in the new simba, scripts will come with this GUIs? Awesome! :f:


If the user decides to make them then yes.

In fact, forms (gui's) can already be made on Simba, there's just no tool for it. The tool form creators use is on SCAR.

VastlySuperior

2012-07-24 03:18:48

@ CynicRus.

Thanks for this, it is awesome. One suggestion, I think that it will be real easy to use this code and even develop a on screen display of the reports using this generator.

Just a suggestion.

CynicRus

2012-07-25 02:59:35

What do you mean? PS. Thx for all our comments!

VastlySuperior

2012-07-25 05:25:11

@ CynicRus

Look at his Tut to do progress reports on screen. I think you will be able to adapt your current code to generate a form for your script, to also do the same as what this tut teaches with minor editing of your form editor.

This will be awesome to have to create easy on screen reports. Just fill in the variables you use to create your progress report and it converts it to an on screen display for your scripts. I think it will be possible to do with your current code, maybe I`m wrong.

E.
You can also look at what Daniel has done here. I think it will complement what I have told you.

Ashaman88

2012-07-25 10:17:01

This is looking great, thanks for your hard work!

CynicRus

2012-07-25 11:39:55

From: VastlySuperior
@ CynicRus

Look at his Tut to do progress reports on screen. I think you will be able to adapt your current code to generate a form for your script, to also do the same as what this tut teaches with minor editing of your form editor.

This will be awesome to have to create easy on screen reports. Just fill in the variables you use to create your progress report and it converts it to an on screen display for your scripts. I think it will be possible to do with your current code, maybe I`m wrong.

E.
You can also look at what Daniel has done here. I think it will complement what I have told you.

Ah, I understand. I will make this functional available when I finish creating wizard module for designer. The forms templates will also be available.

Le Jingle

2012-07-29 02:48:36

Is there a way to assign not bitmaps into the GUI? or is it strictly bitmaps? I ask because when loading a large bitmap as a "background," the image doesn't load fully before opening.

Thanks again for working on this, it's lots of fun to play with! :>

Edit; nevermind, it loads, but I do still wonder about .png/other files extensions

Also —> Noticed that when closing the form/continuing through it, the Bitmaps do not become free, cluttering up memory (I think)

CynicRus

2012-07-29 06:38:31

Thanks for the tip, I'll look into what could be the problem. With regard to other formats - will support jpg, png.

CynicRus

2012-07-29 10:51:53

Codegen update. Now Image converting to string and load into Simba TImage(tnx Bart).
Git updated, exe updated too.
Script example:

var
MyForm:TForm;
MyLbl: TLabel;
MyEdit: TEdit;
Img2,Img1,Img3: TImage;
myBtn: TButton;
mchbox: TCheckBox;
lbox: TListBox;
somecbox: TComboBox;
MyRadioBtn: TRadioButton;
bmps0,bmps1,bmps2: TMufasaBitmap;
bmp0,bmp1,bmp2: TBitmap;
const
default = 'Comic Sans MS';



procedure YourClickProcedure(Sender: TObject);
begin
ShowMessage('click');
end;


procedure InitForm;
begin
//MyForm\\
MyForm:=TForm.Create(nil);
with MyForm do
begin
Caption:='Hello';
Left:=0;
Top:=0;
Width:=346;
Height:=383;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
end;
//MyLbl\\
MyLbl:=TLabel.Create(MyForm);
with MyLbl do
begin
Parent:=MyForm;
Caption:='This label';
Left:=20;
Top:=23;
Width:=63;
Height:=21;
Font.Name:='Impact';
Font.Color:=clRed;
Font.Size:=12;
end;
//MyEdit\\
MyEdit:=TEdit.Create(MyForm);
with MyEdit do
begin
Parent:=MyForm;
Text:='input your text here!';
Left:=19;
Top:=55;
Width:=80;
Height:=33;
Font.Name:='Kozuka Gothic Pro EL';
Font.Color:=clPurple;
Font.Size:=14;
//MyEdit.MaxLength:=x;
//MyEdit.PasswordChar:=*;
end;
//Img2\\
Img2:=TImage.Create(MyForm);
with Img2 do
begin
Parent:=MyForm;
Left:=15;
Top:=106;
Width:=24;
Height:=24;
bmp0:=TBitmap.Create;
bmps0:=GetMufasaBitmap(BitmapFromString(24,24,'meJzt08EKACAIA1D//6cXSIiUJzfw4tjVF4XBgO1QzSNx4CG1cEgqOwz1OG3qd3pU6TSo8l6Rqfe5p3NODDJUHlHttpyS/Nwt2QO512HX'));
bmp0:=bmps0.ToTBitmap;
Picture.Bitmap:=bmp0;
end;
//Img1\\
Img1:=TImage.Create(MyForm);
with Img1 do
begin
Parent:=MyForm;
Left:=56;
Top:=105;
Width:=24;
Height:=24;
bmp1:=TBitmap.Create;
bmps1:=GetMufasaBitmap(BitmapFromString(24,24,'meJzt0sEKACAIA1A/3T+3IJChQbk6Krs2XqWJWaeTIjCqSvfMs1j1xUOTHIOFNGYZvLNKQky4I40Jzfek8E15aAxByi+z3QQaUyIdH+F9LTt0Bjyf9lI='));
bmp1:=bmps1.ToTBitmap;
Picture.Bitmap:=bmp1;
end;
//Img3\\
Img3:=TImage.Create(MyForm);
with Img3 do
begin
Parent:=MyForm;
Left:=97;
Top:=105;
Width:=24;
Height:=24;
bmp2:=TBitmap.Create;
bmps2:=GetMufasaBitmap(BitmapFromString(24,24,'meJz7z/D//yiiF2qgGMDNYaAMIJvzn2yA5C/izYE6AIlBpDlAuQYMWRT1NDYHohGuF85FNo1498A1YjJIdQ8l5uDRPiDm4PIX2eGMC5CdDokwGtUcapQb5DsG1UnDDAEAnvt0FQ=='));
bmp2:=bmps2.ToTBitmap;
Picture.Bitmap:=bmp2;
end;
//myBtn\\
myBtn:=TButton.Create(MyForm);
with myBtn do
begin
Parent:=MyForm;
Caption:='JustButton';
Left:=33;
Top:=174;
Width:=75;
Height:=25;
OnClick:=@YourClickProcedure;
Font.Name:='Cooper Std Black';
Font.Color:=clLime;
Font.Size:=8;
end;
//mchbox\\
mchbox:=TCheckBox.Create(MyForm);
with mchbox do
begin
Parent:=MyForm;
Caption:='cBox';
Checked:=false;
Left:=162;
Top:=29;
Width:=43;
Height:=19;
Font.Name:='Franklin Gothic Medium';
Font.Color:=clYellow;
Font.Size:=8;
end;
//lbox\\
lbox:=TListBox.Create(MyForm);
with lbox do
begin
Parent:=MyForm;
Left:=160;
Top:=69;
Width:=100;
Height:=80;
//add your items here
Items.Add('YourItem');
//End items
OnClick:=@YourClickProcedure;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
end;
//somecbox\\
somecbox:=TComboBox.Create(MyForm);
with somecbox do
begin
Parent:=MyForm;
Left:=156;
Top:=175;
Width:=100;
Height:=21;
//add your items here
Items.Add('YourItem');
//End items
OnClick:=@YourClickProcedure;
Font.Name:='Gentium Book Basic';
Font.Color:=clNavy;
Font.Size:=8;
end;
//MyRadioBtn\\
MyRadioBtn:=TRadioButton.Create(MyForm);
with MyRadioBtn do
begin
Parent:=MyForm;
Caption:='rbox';
Left:=83;
Top:=230;
Width:=43;
Height:=19;
Font.Name:='Gentium Book Basic';
Font.Color:=clFuchsia;
Font.Size:=8;
end;
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;


procedure ShowFormModal;
begin
MyForm.ShowModal;
end;


procedure SafeShowFormModal;
var
v: TVariantArray;
begin
SetArrayLength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;


begin
SafeInitForm;
SafeShowFormModal;
end.

NKN

2012-07-29 12:31:30

This is awesome. :)

Keep up the good work.

CynicRus

2012-07-30 07:26:18

Add bitmap string formating.
example generated code:

//Img3\\
Img3:=TImage.Create(MyForm);
with Img3 do
begin
Parent:=MyForm;
Left:=97;
Top:=105;
Width:=24;
Height:=24;
bmp2:=TBitmap.Create;
bmps2:=GetMufasaBitmap(BitmapFromString(24,24,
'meJz7z/D//yiiF2qgGMDN'+
'YaAMIJvzn2yA5C/izYE6'+
'AIlBpDlAuQYMWRT1NDYH'+
'ohGuF85FNo1498A1YjJI'+
'dQ8l5uDRPiDm4PIX2eGM'+
'C5CdDokwGtUcapQb5DsG'+
'1UnDDAEAnvt0FQ=='));
bmp2:=bmps2.ToTBitmap;
Picture.Bitmap.handle:=bmp2.handle;
end;

CynicRus

2012-07-31 05:36:13

Add jpg and png support for TImage. Fixed codegen.

Script example:

var
DsgnForm:TForm;
TImage0: TImage;
bmps0: TMufasaBitmap;
bmp0: TBitmap;
const
default = 'Comic Sans MS';



procedure YourClickProcedure(Sender: TObject);
begin
ShowMessage('click');
end;


procedure InitForm;
begin
//DsgnForm\\
DsgnForm:=TForm.Create(nil);
with DsgnForm do
begin
Caption:='DsgnForm';
Left:=0;
Top:=0;
Width:=336;
Height:=278;
Font.Name:=default;
Font.Color:=clDefault;
Font.Size:=0;
end;
//TImage0\\
TImage0:=TImage.Create(DsgnForm);
with TImage0 do
begin
Parent:=DsgnForm;
Left:=126;
Top:=50;
Width:=64;
Height:=64;
bmp0:=TBitmap.Create;
bmps0:=GetMufasaBitmap(BitmapFromString(64,64,
'meJztmAdQXGeSxyV713dre8Ot17uWZVtMZMggEZSz'+
'mADMDDnnYQABQiCCABGEkEARlHNCiJxzziCCAIHI'+
'OYmMJBBxUt83T/aub+vqJPvsVdXVdXW9ejUU/X7f'+
'/+vur99bs+b/7f+yydlHyNqFf2iKn2PUy3nKATE4'+
'LS9pq3MfmuXn2P6oOpP7ZcouN7dG5Cm43v7QOD/N'+
'GDHP9OIbbSPLNU8mqHk8/tA472X6Z1qNzzTT/cq1'+
'TlXteVhjF1tjdaNAzv7qNodErYAKdkDDhwb8Z9M/'+
'365zqokZ1kYNadO/OuKePO+TwwvMF3DjRrSu5HHv'+
'FO7zjdzlmXA0VeAavWBzbVz3RIe659PtznW7DpZp'+
'+jz/gOSawY37A5vsIicDiwShZYKgIgE3lXe2gh9e'+
'yb9UJTS4XGl0LtX2QirF9LTpuYrT+fwTmcv+yYue'+
'0XPGl14xT7+0uvxa73j3Ade6bZxSqnvTv5KcGdLE'+
'vtDHSeZxU/kO6bxzlfwb9YK7DQL/It65Kv6tet7d'+
'RuEBnxirk7EmQQ8l2H6cq09CM195Rw0eutXpfm+A'+
'dWYyKP6Nf/S8x4PXtMApdd/JXc7Nu+3Ld9lX/drk'+
'e7yqNcI6DmfyTxQLwqvF2BE1Aq9C3u1GQVyb8GS5'+
'wL9EcKlWdKUedjtfsQmJZHlcldD0kLe8aHK2zii0'+
'wiys2v72OPvimwuZi0FxbwzOzh59+Nov8pX3nZeO'+
'EbNM7255w4JN5mW/Evx29wrtO/MH0/ge2Xy/Ql5Q'+
'ieDME8H9ZkFEncC/jH+qWuBbumIa17MtMEVC97iO'+
'xyVO8B2689nvqM7f7rf7arPet3s4ZPbxzS451OBe'+
'k8szWmEvj8fOB0TPmZ+fYQVOHPAaU/cY2+UyKmPY'+
'KG+Q/8uS00+27PRp1IvmOWbzj5Xzg2sFx6sFx8r4'+
'vqX8wAr+iWp+aK3QM2dSyTdK3u0O2SRss0WQXeB1'+
'buANKjd4/W7r9bstv95mhLnhV5t1N1lFHjjWzjoz'+
'wz49o3FiWvf0rHH4rPmlWbPwGYNTU2z/sW12gxRW'+
'3ibT8l8GPqR517FWbpbAr1IQ9ITvXcLzK+WF1AjO'+
'NwrD6oQna4Rn6oXoPqhklmIcStQLJrB9zD3P2Qde'+
'dgy8ouMc/NVWw7/Dr9tqsG6Lvqp9grp/G+vMNCvs'+
'JevUjE7YjF7YtM6JSbQLhqFTZuenjcMmNTxfEDSq'+
'pHVy/5fw6kFNO32aHXP4PuX8w3n8Q9mrp+oF4S3C'+
'C8/4J2uFofWCy82CG+2C622ia62ii0086xsVWx3C'+
'N+yzpRywOmDpybY/Rtxr9jdVnW93W0iyvFW5d+kn'+
'WlhnR7UvzOhceK1z9qXumVnTS69sb72yufHK8tKs'+
'bvCEhtcLw5AJk9AJBevB79SrSczs/w3/5kNPOOk8'+
'ryKebeKKWz7/5FPBmUZx8gRU8q+2Ce73iKL6RTED'+
'olsdoge9ouh+0eMBeNgPN9vhTM2qV+aMS8LYwYSZ'+
'g0mL9omr1rGrFlGrZveWrR8uuSQtO0YvOkYt2N2b'+
'N4mYZR2fMj07bXV51iJixvT0lKbHiI7/2Eb7YVmz'+
'vu+o5SStn7kENYdiw0dL7gWr1nHLh9Cp9ERwsk6A'+
'1nKsnHetXXi7W/SwTxQzKLqHbnqFqS+EKaPC+GHR'+
'437Rgx7RnS7RaVTXpQKvPIFnPt8zj++ezXdOWbV8'+
'uGx0c8Hq7hunmEX7qAX7B3N2d+dsrr9C+aN9fMLi'+
'woz5uWmzM5P7nIdkzPsVbfqljbtw1HwSs+inwu90'+
'f7I35IVz1go3ccUuacWvgh9UIzhSwPMs4F1sEVzv'+
'EN7uEUUOiCL7RXd6hKljkDYO6JowIoweRMsR3ekU'+
'hdUK/Uv4IdWCk08EgeUC3yK+Vx7vSOYKJ2rJ6Oq8'+
'zb15pL/Dgznu7TnOzde211/qnZhg+Y2ZnZsyOz2l'+
'7v2CoNMjb9GnaNVN1nmOp6f+VP5N9lXGkcuHM1aM'+
'7y/6lCDN+Z7FfMd0XthTwcVW4fVOwd1uMf+NLlHs'+
'qChllJ85DSljwoRR8Y5E9ohud4lCa/lI/xNV/JNP'+
'hEHlAp9CvncezyNr1T1thfto0fDiHPfeG4f789w7'+
'c7Y3X3OuzVpfmmX7j7N9X1icmVRzGla0HSSwOhUs'+
'uxUs2vCMKpJm2vvDqzmU7QiadEpbtni44JS6crQI'+
'9Ry+bfKqVwnvTJPwYovwKuJHSdIjutUL58vHdjzq'+
'9krtS50AxI/0v98rut0pOlUjDCjlB1eK+QNKBT5F'+
'3/O7pa4ejJ7bG9q6+XSj/b3XiN/u5kvOlZc2l2Yt'+
'zk8zvUbpnqMbucOKNoNSRj1Shu3y5m3SRs9w1JT3'+
'59/IqdC8NO+atmxw441n/irid8nkcZJXT9Sg+hVG'+
'PBdeaROg/LnULrzZskhNHdr7DDznBHZ5XefLJh8P'+
'wb0e0c12lDbi/EEHREg1uhH4FKx65656ZK5aXO27'+
'VT7gPQw7G0X7TzY7IP1vvOJcFfNbXZgxOjEuZdCL'+
'xJe3HlCw7CVpP5c1bZU1eYbXKCVqvNcWqDg1bjrY'+
'avZgkfN40frRgkfOqncBzzp22TVnNbhGcKpeeK4Z'+
'8QuvdQjDW0Sse+17noH9sDAcIATAafw1J6nzSuPS'+
'zQ7RiSqhXzHfv0wQXIkKmY/ynxs17RPb0bS4Mggw'+
'IBJqNoq2lCzohHRxrr/mXH5pc3Ha6sI0OgVw7B6y'+
'fq+85YC8RY+kfquMUYuMSRORVU2gJ78Pv5JNiYrH'+
'lGPCosnN+YOJS0eyV9yzVs0il3xK+EHVgpBa/tkG'+
'fsRzfvhzoemdLrUqPvWp6A5ABMBJAD+AwwB69SPO'+
'Cf1B5UKfQlS2PHHyF6zY3emI75nsBOgDeAEwC1Dz'+
'RqhaC6oxo1ZnRjlXZm0iZszOTqm6jEiZDHyn0SVn'+
'3i9n1i1r0k7SbpQ2aqTo1UioJ70Pv6JV2Ta/WZfE'+
'Rd2Lr13Tl49krTglL1tHLx0r5QdUCNDwEFYvuNAs'+
'cE8Zp8TNUvJEN5aEiP8ixn8MwA3AHkCre9It+eXR'+
'Ar53AT+oTGB1va0aoBEA8Q8DzAAsAvABwgfFS9hy'+
'oY1zcdY2fHrnkRfKjiPo5PqW3imp3yNr2iVr0kbS'+
'bpA2fCplUCNBzXgvftva/cGzzgmLehGvXFOXPDJW'+
'TK9P2ccvHyvmBZTz0OGFToHQJwvE8P4vE8GjD+IB'+
'3vKHYvyHMX6D3H6/IuGRHL5HDt+/mO8cOxM3ONsE'+
'0AUwCvASYBXjXwLQbRCpVAv3BTw74Dup7DyykTuk'+
'ZDu4gdGF0+yU0m+RNm4laT+VMaqX0q/G03MJjHdX'+
'saxZNSN01jF6QT/i1eGUZdatbu32ZZ2MSU7CtF+J'+
'IKBCPDkoh7b/5gGo5kIOQDTAbaQkwCkAX0x/Dogc'+
'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'+
'WrEErWADLXuzaQHKHBw1kaLx7s7zYyNpFsub9ytz'+
'h9RcRnd4jKGxVs15dIdr/1+Dej99BH+OBeYqMAEY'+
'APsBdgNsBVCamt/i3LfDe2K7x8Q2j3F522Fpy0Ep'+
'84GN9iNicu6wvO2QnMWgotsztHYTrGRMMDdGhf8C'+
'/hAJf4yFb7hVBGoJnlGExCdqZG02zZWgJhHo8VKa'+
'P41fUisDp9m9xWlY0Wpg6+EXm+yHFG2Hth8Z2+bc'+
'96Vf1ycP4D/iYPeKmHw7gBrARgDpqXk1bvcWtzE1'+
'V+QvZCwHKab9FJN+VErof9Fbibz5gIxxv9yhJm10'+
'UqBU/+G6bRQ+vQ+fR8F6a1SwCB6NCvmo4Svq5Sjo'+
'ZuBp8dJMpH/UT9Nfq4RAr1C06pe36N/sNKLqOCxj'+
'0r/l0OhW1Jcc+7482vXxPfg8BjYticnlAaQA8FPz'+
'yjadqi7iPFd1GpU2HyAb9pMMemUtBtDLrJxpn4xJ'+
'L0W/V8a1SR3gAAAVc+UR+OQO/PtD+NqyHK9eIoGU'+
'Z+ShUQf1nB0WuURGEokRr8B+r87/z0vQyCRpdypa'+
'9qnaD6mis0ynR+0gAhtRQ27f94V769o78MlDIC0C'+
'EeA7gHWvFjaatys7jKCE2cgdphj1EXV7iDq90kZi'+
'cmmDPkm9XhK7W8qzaRu2azsAZIfh45vw2zvCdSbF'+
'OKoYHg3JCB5Hy5BipW81y8JT4+TYSYraMT+Dn6yV'+
'i6fXKph1KVr3qNgNENldmzhDKtwhFbtBFfthFdu+'+
'Px9qWXML0Eb8bQH+CvBHHk/esEmJM6RkPaRoPSip'+
'14dn9eC1uiR1e5DsZJ0uknYXmdlBDmhSQsUCQBiC'+
'Nddg7Q3BOqNiHK30e3hGDp6eKaGeusUsS047iaIZ'+
'r6KfIsf8acn/jy2gpxOZzQpmncqcXimDTgXz3o02'+
'A0rWyAc32gxKsjv+Yt+05iasvQufzgOZB7K6dQoo'+
'W8wG5Mz6ieweCY2uDYwOArMLwZPZHWTtNqJWi9yJ'+
'ZhmA9QOw5iriF6zTK0Tw+B/gcTQ06qRStFL2WGeR'+
'GXEbdZNV9ON/HryYXyMVT68mMhs32XbKm7RLGbQr'+
'WfcqWvYoWfUpWvZL6nZLsju/4tajJfwtAfZVLVD0'+
'6qVN+qSNemWMegjMjg30dgl6G5HZJiZnPSexm1Fb'+
'VvSu298GH92ENVdWv9FGqY4KtuB7eEYmgYaGzKSt'+
'phmbDJLl2Qk7TNI26vyc5PnHEhjJOHqdvGmLkiVi'+
'eLbRslPJskvJvFPRolvasJPAbJM37vrKtu6zU6Nk'+
'g1oZ424Zw24Zgy70JxKzTYLeLEF/htdqJrGbSMwm'+
'AquBwKwnMKrWOzz5bcTct+x8PLUYzyjEMXJxP8Dj'+
'aUkyzKR9tply7IQtRqnbjN/9wvU/G4GeTmCUkNn1'+
'G61bCJr1SuatCmZtiuJru6xxG47+TM6kQ9aoXVqn'+
'XsagXeyGaJvapPVbUeJJ0Bsk6E8JGg0k1lOSVj2B'+
'WUvUqCIyKgn0Mrw6aoxFOEYeIicwsgmMdAItBU9P'+
'xlPjd1ulbzFJUTVI3meZqar/7heWd28BPQ6PeqlZ'+
'g6R2raxRo6J5s7xZi4JJs7zJcxytXtqgRcagWcaw'+
'RewGLVJ6LdK6TVJ6z8isBhy9FnUAvGYtiVlD0Kom'+
'albiNcoJ9GIcHWlegKOh91kEn0VgpOEZqQRaEo4W'+
'p2yQRLXLVDFI2muRsdP0vT4YvtOQOCR6qiSrUt6o'+
'lsyuVjBrUDBplDNtkDdpImrVUnQbZAybZAwaZPQa'+
'pfQbpfWfSuvVS+k9JbNqcfRKHL2CoFFO1KwgMkrx'+
'9GICvZDAQJ5PYOR+LzsjFc9IIdIS8bRYaWac1sHs'+
'7Wapu83TGHa5ivTzvwj/GnEVxBLo+Uom1Xh6ibxx'+
'rbxJHVqLnHE9mVVFYlbL6Nchl9Kvk9aro+jUUrRr'+
'pHSeoD/h6KU4RikSnEgvwdOLCIwCDPsteSaeJpYd'+
'T0sm0hIItBgSI4bukEm3y9plnqZlny+3JxA99w9/'+
'lf6llkCmxxA1CuR0SyjapXLG1XJG1bKG1VI6lQSN'+
'Uhn9aim9ammdSop2FfpFil1O0a4gM0vwtEICcnF7'+
'ySPQ8xA2XuyZeHHCIM3FshNpSJloIuMxlZuhcyh3'+
'j3m6ln3uXuMfRuW1v/ml+En0eFQIUsw8aVa+nEGZ'+
'jH6prEG5jC7KigJpnVJp7TKKTokUu5SiXUJhFkuy'+
'i8nMQjwtF/McMbZGFh6dJihh6ClEOtIcjcRxSHYC'+
'/TFZI/oAJ8PYPV/dOkOLm6vjVPrJZ+t+Kewfm8SO'+
'C0RGioJurqxuvqxekYxuIboS6DlkZoGUdqEUq5DC'+
'LiQx0gju1SRaKpGWjT+QgUevTtR0HDUNR03ZoJ78'+
'3f54IjsRp41eRmIItGgSI0paK5rGzTDzLNCwz2ba'+
'5xq7Vf9lw7ZfA/6t/XHDfnSoqRjlKBjmy+jmyujm'+
'icckRqYUO1eSnUth55DV43HPQFnA21s9oB7ZTDv3'+
'RCOkwjCs0vly7YXk1uz2iQfL8C2niEh9RNF8rKAd'+
'q+WYZXW0UNspl+2Yb36kBidv/OvBv7VPv1QiaaL5'+
'JFvJKEdaO4PCTCfSUyisDAorXZKZQVKP+a5KPFHr'+
'Yu9WZ7EvXRXYd9oFgFfoPX0ENnAL5ZnRaoYJBm65'+
'tr7Fei75uk6Flp51FFW7Xxv+rf3uCxkSI267edZm'+
'syxJLXEDIWkmoqEF3ZPUoz69tfJpFMjWAGtA5Dwl'+
'Cn4pujgjOjcssm+AbxJgzXUh2SqTap1mebTQ7lip'+
'vkuh4aFS26MNZGXLfw38W/vk8/X4/bfUjNP2crJk'+
'WfEEaoykRhyZES+pEUugRa23L5EI7ZCPmdhbucBu'+
'4x2oWVRKnsaH9+DcqtXMkozdch38S219ywwOFZu5'+
'V1l7168n7v9Xwr+1tR/99utNR+T1EvdYp+y0SFLU'+
'iSUzooi0SCIjkkx7IEl/QKHdl6I9kGU8VGQ+2qwX'+
'Q7VJMXHPQ+SOgRUWHmUmbuUcnwZdburv/vjNvx7+'+
'7/bZV8pk9WtbTNC5n6rlmHaAk7LHKnGnecJO88Td'+
'FknqtilMx0wj9zzOsWLHoPKDAVXWXhWmbuW23vUI'+
'XkbN5gOS/9i+kNivqHF1n3UGyynb4HCuuVe+tU8h'+
'x6+Y61/qEFDO9auw9amw9KwwP/KE49to5VmjvMf9'+
'o99+/qGp/9l+9ycCTslKlXmZzsnVdSkzdC03Plxp'+
'6l6Neou191P9g/k7NEO+Ie390Jj/ra3F/B/28e/+'+
'8tmfiZ9/Qf79X8if/Ulizdp/+1Bk729r1/5m7Udi'+
'/+jjf1uz9mNU4eLrr2z/CXDKa6k='));
bmp0:=bmps0.ToTBitmap;
Picture.Bitmap.handle:=bmp0.handle;
end;
end;

procedure SafeInitForm;
var
v: TVariantArray;
begin
setarraylength(V, 0);
ThreadSafeCall('InitForm', v);
end;


procedure ShowFormModal;
begin
DsgnForm.ShowModal;
end;


procedure SafeShowFormModal;
var
v: TVariantArray;
begin
SetArrayLength(V, 0);
ThreadSafeCall('ShowFormModal', v);
end;


begin
SafeInitForm;
SafeShowFormModal;
end.

CynicRus

2012-08-01 03:34:33

Fixed image string formatter in codegen(as masterBB adviced). Now image string formated if image size <= 24x24. This will make the code more readable.

Example:

NKN

2012-09-14 18:26:08

Any updates, or is it finished?

CynicRus

2012-09-17 08:09:54

From: NKN
Any updates, or is it finished?


At this stage, it is ready and running. Further updates as needed, if something is missing contact me in private.

CynicRus

2012-11-01 07:35:10

Completely rewritten to work with the code generator for the components. Now faster and more stable. Fixed many bugs. Added more new bugs.

Bobarkinator

2012-11-01 08:22:08

From: CynicRus
Added more new bugs.


The best feature of any update.

xtrapsp

2012-11-01 08:46:37

From: Bobarkinator
The best feature of any update.


I haven't seen Bob reply to anything in too long. Cynic this is a good thing. KEEP AT IT!

CynicRus

2012-11-04 11:22:56

Fixed SIGSEGV bug. Version 0.5 stable is available now.

Olly

2012-11-11 13:15:10

Add tabs to it please :P I cant get my head around them!

CynicRus

2012-11-11 15:03:56

All right. It is noted in the next release will be added. If the scripting engine supports this feature.

Olly

2012-11-13 00:18:01

From: CynicRus
All right. It is noted in the next release will be added. If the scripting engine supports this feature.


Uh yeah you can manually do it but its kinda confusing… atleast for me :P

CynicRus

2013-02-04 02:25:45

Version 0.6 has been released now.

- source codes fully converted for Lazarus 1.0.4

- codegen fixes

- minor fixes

Chris!

2013-02-04 03:04:29

Looks very good. Thank you for this Cynic!

rj

2013-02-16 21:13:11

Has bugged out a couple times saying "access violation press ok to prevent data corruption"

but it's pretty good, I wouldn't be able to make a Tform without it



Just spent 15 minutes on it..

CynicRus

2013-02-17 00:59:46

How I can reproduce this?

rj

2013-02-17 09:50:06

From: CynicRus
How I can reproduce this?


Usually when I start making a lot of labels and text boxes(I think I was on label#29)(like a 400X600 Tform if that helps?) I get this error, when it does it if I press ok it scrambles the last piece I moved, and sometimes like I said above it will keep giving me the message over and it without stopping.

CynicRus

2013-02-17 10:03:24

From: rjj95
Usually when I start making a lot of labels and text boxes(I think I was on label#29)(like a 400X600 Tform if that helps?) I get this error, when it does it if I press ok it scrambles the last piece I moved, and sometimes like I said above it will keep giving me the message over and it without stopping.


Can you save the form layout with an error? If i can load you form It's great to help in debugging.

rj

2013-02-17 10:04:59

From: CynicRus
Can you save the form layout with an error? If i can load you form It's great to help in debugging.


I can save it yes, but you won't be able to edit it I'll see if I have it saved


EDIT: I don't have it saved, I'll work on another one just like it and save it when I get an error

CynicRus

2013-02-17 10:06:52

From: rjj95
I can save it yes, but you won't be able to edit it I'll see if I have it saved


EDIT: I don't have it saved, I'll work on another one just like it and save it when I get an error


Ok, I will wait:)

rj

2013-02-17 10:20:22

Got it:http://uppit.com/ord9wpgihjvq/AutoFighter2.smf

Couldn't upload a .smf to villavu, so I was moving a T label around, and the Tlabel moved about 30 pixels down when my mouse didn't have the left key pressed, then the error came up, pressed ok movd 30 pixels down, error came up and so on.

CynicRus

2013-02-17 11:17:13

From: rjj95
Got it:http://uppit.com/ord9wpgihjvq/AutoFighter2.smf

Couldn't upload a .smf to villavu, so I was moving a T label around, and the Tlabel moved about 30 pixels down when my mouse didn't have the left key pressed, then the error came up, pressed ok movd 30 pixels down, error came up and so on.

Well. I have reproduced. Change the default name of the component, to avoid such an error. Fix it soon.

rj

2013-02-17 11:18:57

Ok great, I'm making a huge ass Tform there's no way I can do it manually

CynicRus

2013-03-31 04:06:52

Form designer has been updated with all last fixes.

Janilabo

2013-03-31 08:07:50

Thanks CR,

Glad to see you are still working on this one!

CynicRus

2014-10-11 08:17:37

Updated to 0.9b.

Supported Lape forms and many other. By default this tool generate code for recently Simba + Lape.

Cheers, Cynic.

Test script:

var
DsgnForm:TForm;
TLabel2: TLabel;
TEdit3: TEdit;
TImage4: TImage;
TButton0,TButton1: TButton;
TCheckBox5: TCheckBox;
TListBox6: TListBox;
TComboBox7: TComboBox;
bmps0: TMufasaBitmap;
bmp0: integer;
const
default = 'Comic Sans MS';
clDefault = $20000000;


procedure procedure_OnClick(sender: TObject);
{$IFNDEF CODEINSIGHT}
native;
{$ENDIF}
begin
client.writeln('click');
end;


procedure InitForm;
{$IFNDEF CODEINSIGHT}
native;
{$ENDIF}
begin
//DsgnForm\\
DsgnForm.Init(nil);
with DsgnForm do
begin
SetCaption('DsgnForm');
SetBounds(0,0,600,600);
SetPosition(poScreenCenter);
GetFont().SetName(default);
GetFont().SetColor(536870912);
GetFont().SetSize(0);
end;
//TLabel2\\
TLabel2.Init(DsgnForm);
with TLabel2 do
begin
SetParent(DsgnForm);
SetCaption('TLabel2');
SetBounds(253,55,42,16);
GetFont().SetName(default);
GetFont().SetColor(536870912);
GetFont().SetSize(0);
end;
//TEdit3\\
TEdit3.Init(DsgnForm);
with TEdit3 do
begin
SetParent(DsgnForm);
SetCaption('TEdit3');
SetText('Input your text here!');
SetBounds(253,99,80,23);
GetFont().SetName(default);
GetFont().SetColor(536870912);
GetFont().SetSize(0);
end;
//TImage4\\
TImage4.Init(DsgnForm);
with TImage4 do
begin
SetParent(DsgnForm);
SetBounds(262,182,110,110);
bmp0:=client.getMBitmaps().CreateBMPFromString(110,110,'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');
bmps0:=client.getMBitmaps().GetBMP(bmp0);
bmps0.DrawToCanvas(0,0,getCanvas());
client.getMBitmaps().RemoveBMP(bmp0);
end;
//TButton0\\
TButton0.Init(DsgnForm);
with TButton0 do
begin
SetParent(DsgnForm);
SetCaption('TButton0');
SetBounds(97,50,110,63);
SetOnClick(procedure_OnClick);
GetFont().SetName(default);
GetFont().SetColor(536870912);
GetFont().SetSize(0);
end;
//TButton1\\
TButton1.Init(DsgnForm);
with TButton1 do
begin
SetParent(DsgnForm);
SetCaption('TButton1');
SetBounds(97,124,111,68);
SetOnClick(procedure_OnClick);
GetFont().SetName(default);
GetFont().SetColor(536870912);
GetFont().SetSize(0);
end;
//TCheckBox5\\
TCheckBox5.Init(DsgnForm);
with TCheckBox5 do
begin
SetParent(DsgnForm);
SetCaption('TCheckBox5');
SetBounds(47,237,85,19);
SetOnClick(procedure_OnClick);
GetFont().SetName(default);
GetFont().SetColor(536870912);
GetFont().SetSize(0);
end;
//TListBox6\\
TListBox6.Init(DsgnForm);
with TListBox6 do
begin
SetParent(DsgnForm);
SetBounds(54,364,181,151);
//add your items here
GetItems().Add('YourItem');
//End items
SetOnClick(procedure_OnClick);
GetFont().SetName(default);
GetFont().SetColor(536870912);
GetFont().SetSize(0);
end;
//TComboBox7\\
TComboBox7.Init(DsgnForm);
with TComboBox7 do
begin
SetParent(DsgnForm);
SetBounds(292,363,100,23);
//add your items here
GetItems().Add('YourItem');
//End items
SetOnClick(procedure_OnClick);
GetFont().SetName(default);
GetFont().SetColor(536870912);
GetFont().SetSize(0);
end;
DsgnForm.ShowModal;
end;


procedure Free;
{$IFNDEF CODEINSIGHT}
native;
{$ENDIF}
begin
if (DsgnForm = nil) then
exit();
client.writeln('Freeing form...');
DsgnForm.free;
end;


procedure ShowForm();
begin
try
sync(InitForm);
except
writeln('ERROR: Failed to initialize form');
finally
sync(Free);
end;
end;

begin
ClearDebug();
ShowForm();
end.

CynicRus

2014-10-11 15:45:49

Fixed the sigsegv bug on the component selection. Thank you @hoodz;!

Hoodz

2014-10-11 17:19:13

From: CynicRus
Fixed the sigsegv bug on the component selection. Thank you @hoodz;!


great work!