MSEide MSEgui Howto

From Free Pascal wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Demos and examples

https://github.com/mse-org/mseuniverse/


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 and bounds_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 setting visible to true.

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.createframe;
  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.createface;
  with dynedit.face do begin
    fade_color.count := 2;
    fade_color[0] := cl_ltgreen;
    fade_color[1] := cl_dkgreen;
    fade_direction := gd_down;
  end;