Difference between revisions of "MSEide MSEgui Howto"
m (Add category) |
(+dynamic widget creation (based on answers in http://freepascal.ru/forum/viewtopic.php?f=11&t=43228 and http://mseide-msegui-talk.13964.n8.nabble.com/MSEide-MSEgui-talk-Answer-to-msegui-Russian-forum-to-dyamically-create-a-frame-td2845.html )) |
||
Line 12: | Line 12: | ||
FILETYPE 1 | FILETYPE 1 | ||
{ | { | ||
− | BLOCK | + | BLOCK "StringFileInfo" |
{ | { | ||
− | BLOCK | + | BLOCK "040904E4" |
{ | { | ||
− | VALUE | + | VALUE "CompanyName","JSC TashkentP" |
− | VALUE | + | VALUE "FileDescription","The main program file" |
− | VALUE | + | VALUE "FileVersion","0.9a" |
− | VALUE | + | VALUE "InternalName","ARM Podpiska" |
− | VALUE | + | VALUE "LegalCopyright","JSC TashkentP’s property" |
− | VALUE | + | VALUE "OriginalFilename","podpiska.pas" |
− | VALUE | + | VALUE "ProductName","The program for ARM Podpiska" |
− | VALUE | + | VALUE "ProductVersion","0.9a" |
} | } | ||
} | } | ||
} | } | ||
− | File | + | File "icon_data.rc": |
− | AppIcon ICON | + | AppIcon ICON "app_icon.ico" |
− | where | + | where "app_icon.ico" is 128x128 24bit ICO image. You may use any size at your favour (usually depends on preferable destop resolution/size) commonly greater or equal to 24x24 pixels. |
− | My favorite editor to prepare such ( and any kind of image ) files is | + | My favorite editor to prepare such (and any kind of image) files is "Embellish". |
− | 2) From within Win-32 command shell, | + | 2) From within Win-32 command shell, compile the prepared files with the supplied |
FPC resource compiler: | FPC resource compiler: | ||
Line 79: | Line 79: | ||
That's all at the moment. | That's all at the moment. | ||
+ | == Dynamic widget creation == | ||
+ | |||
+ | To dynamically create a new widget (without using IDE), you need to do the following steps: | ||
+ | |||
+ | * Instantiate a class with its <code>Create</code> constructor (passing the owner as the argument). | ||
+ | * Create a <code>frame</code> for the component and set up its properties. | ||
+ | * Optionally, create a <code>face</code> for the component and set up its properties. | ||
+ | * Set up the component size with <code>bounds_cx</code> and <code>bounds_cy</code> properties. | ||
+ | * Add the component to the window or other container by calling the container's <code>insertwidget</code>. | ||
+ | * Show the component by calling its <code>show</code> method, or by setting <code>visible</code> to <code>true</code>. | ||
+ | |||
+ | Here is an example of dynamically creating a <code>tedit</code> (for this code to work, you need to add <code>dynedit: tedit;</code> property declaration): | ||
+ | |||
+ | <syntaxhighlight lang=pascal> | ||
+ | procedure tmainfo.mainformcreated(const sender: TObject); | ||
+ | begin | ||
+ | dynedit := tedit.Create(self); | ||
+ | dynedit.bounds_cx := 100; | ||
+ | dynedit.bounds_cy := 21; | ||
+ | dynedit.frame := tcaptionframe.create(iscrollframe(self)); | ||
+ | dynedit.frame.levelo := -2; | ||
+ | insertwidget(dynedit, makepoint(300, 10)); | ||
+ | dynedit.show; | ||
+ | end; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | If you need custom value for the <code>face</code> property, you can set it up as follows: | ||
+ | |||
+ | <syntaxhighlight lang=pascal> | ||
+ | dynedit.face := tface.create(iface(self)); | ||
+ | with dynedit.face do begin | ||
+ | fade_color.count := 2; | ||
+ | fade_color[0] := cl_ltgreen; | ||
+ | fade_color[1] := cl_dkgreen; | ||
+ | fade_direction := gd_down; | ||
+ | end; | ||
+ | </syntaxhighlight> | ||
[[Category:MSEide+MSEgui]] | [[Category:MSEide+MSEgui]] | ||
[[Category:Tutorials]] | [[Category:Tutorials]] | ||
[[category:Windows]] | [[category:Windows]] |
Revision as of 21:30, 30 March 2021
Win32 Application Icon and Properties
1) Prepare the resource source files in the directory of your program:
File "version_data.rc":
1 VERSIONINFO FILEVERSION 4,0,3,17 PRODUCTVERSION 3,0,0,0 FILEFLAGSMASK 0 FILEOS 0x40000 FILETYPE 1 { BLOCK "StringFileInfo" { BLOCK "040904E4" { VALUE "CompanyName","JSC TashkentP" VALUE "FileDescription","The main program file" VALUE "FileVersion","0.9a" VALUE "InternalName","ARM Podpiska" VALUE "LegalCopyright","JSC TashkentP’s property" VALUE "OriginalFilename","podpiska.pas" VALUE "ProductName","The program for ARM Podpiska" VALUE "ProductVersion","0.9a" } } }
File "icon_data.rc":
AppIcon ICON "app_icon.ico"
where "app_icon.ico" is 128x128 24bit ICO image. You may use any size at your favour (usually depends on preferable destop resolution/size) commonly greater or equal to 24x24 pixels.
My favorite editor to prepare such (and any kind of image) files is "Embellish".
2) From within Win-32 command shell, compile the prepared files with the supplied FPC resource compiler:
# windres -O res -i version_data.rc -o version_data.res # windres -O res -i icon_data.rc -o icon_data.res
3) use the compiled resources in your application :
program super_puper;
{$ifdef FPC}{$mode objfpc}{$h+}{$INTERFACES CORBA}{$endif}
{$ifdef FPC}
{$ifdef mswindows}
{$apptype console}
{$endif}
{$endif}
uses
{$ifdef FPC}{$ifdef linux}cthreads,{$endif}{$endif}msegui,mseforms,
main,dmmain,dmprint, dmacnt1, dmf18,dmrefs,
connsetupform,mseconsts,mseconsts_ru,mseconsts_uzcyr;
// importing the compiled resources
{$ifdef mswindows}
{$R version_data.res}
{$R icon_data.res}
{$endif}
begin
setlangconsts('ru');
application.createdatamodule(tdmmainmo,dmmainmo);
application.createdatamodule(tdmprintmo, dmprintmo);
application.createdatamodule(tdmacnt1mo, dmacnt1mo);
application.createdatamodule(tdmf18mo, dmf18mo);
application.createdatamodule(tdmrefsmo, dmrefsmo);
application.createform(tmainfo,mainfo);
application.run;
end.
That's all at the moment.
Dynamic widget creation
To dynamically create a new widget (without using IDE), you need to do the following steps:
- Instantiate a class with its
Create
constructor (passing the owner as the argument). - Create a
frame
for the component and set up its properties. - Optionally, create a
face
for the component and set up its properties. - Set up the component size with
bounds_cx
andbounds_cy
properties. - Add the component to the window or other container by calling the container's
insertwidget
. - Show the component by calling its
show
method, or by settingvisible
totrue
.
Here is an example of dynamically creating a tedit
(for this code to work, you need to add dynedit: tedit;
property declaration):
procedure tmainfo.mainformcreated(const sender: TObject);
begin
dynedit := tedit.Create(self);
dynedit.bounds_cx := 100;
dynedit.bounds_cy := 21;
dynedit.frame := tcaptionframe.create(iscrollframe(self));
dynedit.frame.levelo := -2;
insertwidget(dynedit, makepoint(300, 10));
dynedit.show;
end;
If you need custom value for the face
property, you can set it up as follows:
dynedit.face := tface.create(iface(self));
with dynedit.face do begin
fade_color.count := 2;
fade_color[0] := cl_ltgreen;
fade_color[1] := cl_dkgreen;
fade_direction := gd_down;
end;