Serge Girard

Member since: Thursday, 23 April 2015
Last login: 2 months ago
Profile viewed: 594 views

Your Rank: 93
Points: 1

Serge Girard thanked Emailx45 in topic TTabControl and close button 2 months ago
Serge Girard thanked Assapan in topic TTabControl and close button 2 months ago
Serge Girard replied to the topic 'TTabControl and close button' in the forum. 2 months ago

Well, i understand your way but don't focus on my adding button it's not the guilty.
On a form put a TTabControl, add 2 or more tab items, on each add a button.
Code the onClick event

procedure TForm1.ButtononthetabClick(Sender: TObject);
begin
TabControl1.Delete(tabcontrol1.tabindex);
end;
And you will have the same behaviour !

I also think about changing activetab before deleting but with the same result : BorderIcons still remains inactive till i click on the tabcontrol !
procedure TForm1.Button3Click(Sender: TObject);
var i : integer;
begin
i:=tabcontrol1.tabindex;
TabControl1.Next();
TabControl1.Delete(i);
end;


Read More...

Serge Girard replied to the topic 'TTabControl and close button' in the forum. 2 months ago

Thanks,
SetFocus i tried but that don't do the trick

I thougth also about Owner and Parent but using AddObject is where i'm lost !
Does AddObject change the parent/the owner/none that is a question ?

Read More...

Serge Girard created a new topic ' TTabControl and close button' in the forum. 2 months ago

Hello,
I managed to have a CloseButton on the tabitems (two ways with a perso Style or without)
My only problem is when i close a TabItem, Main form seems to loose focus, on windows the system menu is inactive, i have to click on the tabcontrol once to regain focus !

I tried this with Tokyo and Rio : same problem !
Using an independant button to close tabs don't cause difficulties. So my question : did i miss something and what if so ?

Not attached but supplied the code

unit UnitAddTab;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.TabControl,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, FMX.Layouts, FMX.PlatForm,
  FMX.Edit;

type
  TForm1 = class(TForm)
    TabControl1: TTabControl;
    BtnStyle: TButton;
    BtnAddButton: TButton;
    StyleBook1: TStyleBook;
    procedure BtnStyleClick(Sender: TObject);
    procedure BtnAddButtonClick(Sender: TObject);
    procedure TabControl1Click(Sender: TObject);
  private
    { Déclarations privées }
    procedure CloseTab(sender : TObject);
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.BtnAddButtonClick(Sender: TObject);
var ATab : TTabItem;
    AButton : TButton;
    ARectangle : TRectangle;
    ForeNumber : Integer;
begin
ForeNumber:=TabControl1.TabCount;
ATab:=TabControl1.Add();
ATab.Text:='tabitem '+ForeNumber.ToString;
AButton:=TButton.Create(Self);
AButton.StyleLookup:='cleareditbutton';
AButton.Align:=TAlignLayout.Right;
case TabControl1.EffectiveTabPosition of
  TTabPosition.Bottom: ARectangle:=TRectangle(ATab.FindStyleResource('Bottom'));
  else  ARectangle:=TRectangle(ATab.FindStyleResource('Top'));
end;
AButton.Margins.Top:=2;
AButton.Margins.Bottom:=2;
AButton.Width:=TLayout(ARectangle.Owner).Height-4;
AButton.TagObject:=ATab;
AButton.TabStop:=False;
AButton.OnClick:=CloseTab;
ARectangle.AddObject(AButton);
TabControl1.ActiveTab:=ATab;
end;

procedure TForm1.BtnStyleClick(Sender: TObject);
var ATab : TTabItem;
    ForeNumber : Integer;
begin
ForeNumber:=TabControl1.TabCount;
ATab:=TabControl1.Add();
ATab.Text:='tabitem '+ForeNumber.ToString;
ATab.StyleLookup:='CloseTabItem';  // perso Style 
case TabControl1.EffectiveTabPosition of
  TTabPosition.Bottom: begin
    TButton(ATab.FindStyleResource('Bottom.CloseButton')).OnClick:=CloseTab;
    TButton(ATab.FindStyleResource('Bottom.CloseButton')).TagObject:=ATab;
  end;
  else begin
    TButton(ATab.FindStyleResource('Top.CloseButton')).OnClick:=CloseTab;
    TButton(ATab.FindStyleResource('Top.CloseButton')).TagObject:=ATab;
  end;
end;
TabControl1.ActiveTab:=ATab;
end;


procedure TForm1.CloseTab(sender: TObject);
var i : Integer;
begin
// a better way ?
for I := 0 to TabControl1.TabCount-1 do
  if TabControl1.Tabs[i]=TButton(Sender).TagObject then Break;
if i<TabControl1.TabCount then TabControl1.Delete(i);

// la main form seems to loose focus 
end;

end.

FMX
object Form1: TForm1
  Left = 0
  Top = 0
  ActiveControl = BtnStyle
  Caption = 'Form1'
  ClientHeight = 480
  ClientWidth = 640
  StyleBook = StyleBook1
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [Desktop]
  DesignerMasterStyle = 0
  object TabControl1: TTabControl
    FullSize = True
    Position.X = 16.000000000000000000
    Position.Y = 80.000000000000000000
    Size.Width = 513.000000000000000000
    Size.Height = 385.000000000000000000
    Size.PlatformDefault = False
    StyleLookup = 'tabcontrolstyle'
    TabOrder = 2
    TabPosition = PlatformDefault
    OnClick = TabControl1Click
  end
  object BtnStyle: TButton
    Position.X = 56.000000000000000000
    Position.Y = 8.000000000000000000
    Size.Width = 281.000000000000000000
    Size.Height = 22.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 0
    Text = 'Add Styled Tab'
    OnClick = BtnStyleClick
  end
  object BtnAddButton: TButton
    Position.X = 56.000000000000000000
    Position.Y = 40.000000000000000000
    Size.Width = 281.000000000000000000
    Size.Height = 22.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 1
    Text = 'Add button'
    OnClick = BtnAddButtonClick
  end
  object StyleBook1: TStyleBook
    Styles = <
      item
        ResourcesBin = {
          464D585F5354594C4520322E3501060C436C6F73655461624974656D032C2B00
          5450463007544C61796F757400095374796C654E616D65060C436C6F73655461
          624974656D05416C69676E070643656E7465720A53697A652E57696474680500
          0000000000008A05400B53697A652E4865696768740500000000000000D00340
          1453697A652E506C6174666F726D44656661756C7408085461624F7264657202
          00000F545461625374796C654F626A65637400095374796C654E616D65060374
          6F7005416C69676E0708436F6E74656E74730C436C69704368696C6472656E09
          064C6F636B6564090C536F757263654C6F6F6B7570061B57696E646F77732031
          30204465736B746F707374796C652E706E670A53697A652E5769647468050000
          00000000008A05400B53697A652E4865696768740500000000000000D0034014
          53697A652E506C6174666F726D44656661756C74080D41637469766554726967
          676572070853656C65637465640A4163746976654C696E6B0E010E436170496E
          736574732E4C65667405000000000000008001400D436170496E736574732E54
          6F7005000000000000008001400F436170496E736574732E5269676874050000
          000000000080014010436170496E736574732E426F74746F6D05000000000000
          008001400F536F75726365526563742E4C6566740500000000000000DC04400E
          536F75726365526563742E546F700500000000000000B4054010536F75726365
          526563742E52696768740500000000000000C2054011536F7572636552656374
          2E426F74746F6D0500000000000000E4054000010E436170496E736574732E4C
          6566740500000000000000C001400D436170496E736574732E546F7005000000
          00000000C001400F436170496E736574732E52696768740500000000000000C0
          014010436170496E736574732E426F74746F6D0500000000000000C001400553
          63616C650500000000000000C0FF3F0F536F75726365526563742E4C65667405
          00000000000000A405400E536F75726365526563742E546F7005000000000000
          0087064010536F75726365526563742E52696768740500000000000000910640
          11536F75726365526563742E426F74746F6D0500000000000000AA064000010E
          436170496E736574732E4C65667405000000000000008002400D436170496E73
          6574732E546F7005000000000000008002400F436170496E736574732E526967
          6874050000000000000080024010436170496E736574732E426F74746F6D0500
          000000000000800240055363616C6505000000000000008000400F536F757263
          65526563742E4C6566740500000000000000DC05400E536F7572636552656374
          2E546F700500000000000000B4064010536F75726365526563742E5269676874
          0500000000000000C2064011536F75726365526563742E426F74746F6D050000
          0000000000E4064000000A536F757263654C696E6B0E010E436170496E736574
          732E4C65667405000000000000008001400D436170496E736574732E546F7005
          000000000000008001400F436170496E736574732E5269676874050000000000
          000080014010436170496E736574732E426F74746F6D05000000000000008001
          400F536F75726365526563742E4C6566740500000000000000A001400E536F75
          726365526563742E546F700500000000000000B4054010536F75726365526563
          742E52696768740500000000000000BC044011536F75726365526563742E426F
          74746F6D0500000000000000E2054000010E436170496E736574732E4C656674
          0500000000000000C001400D436170496E736574732E546F7005000000000000
          00C001400F436170496E736574732E52696768740500000000000000C0014010
          436170496E736574732E426F74746F6D0500000000000000C00140055363616C
          650500000000000000C0FF3F0F536F75726365526563742E4C65667405000000
          00000000E001400E536F75726365526563742E546F7005000000000000008706
          4010536F75726365526563742E526967687405000000000000008C054011536F
          75726365526563742E426F74746F6D0500000000000000A9064000010E436170
          496E736574732E4C65667405000000000000008002400D436170496E73657473
          2E546F7005000000000000008002400F436170496E736574732E526967687405
          0000000000000080024010436170496E736574732E426F74746F6D0500000000
          000000800240055363616C6505000000000000008000400F536F757263655265
          63742E4C6566740500000000000000A002400E536F75726365526563742E546F
          700500000000000000B4064010536F75726365526563742E5269676874050000
          0000000000BC054011536F75726365526563742E426F74746F6D050000000000
          0000E20640000007486F744C696E6B0E010E436170496E736574732E4C656674
          05000000000000008001400D436170496E736574732E546F7005000000000000
          008001400F436170496E736574732E5269676874050000000000000080014010
          436170496E736574732E426F74746F6D05000000000000008001400F536F7572
          6365526563742E4C6566740500000000000000D205400E536F75726365526563
          742E546F700500000000000000B4054010536F75726365526563742E52696768
          74050000000000000093064011536F75726365526563742E426F74746F6D0500
          000000000000E2054000010E436170496E736574732E4C656674050000000000
          0000C001400D436170496E736574732E546F700500000000000000C001400F43
          6170496E736574732E52696768740500000000000000C0014010436170496E73
          6574732E426F74746F6D0500000000000000C00140055363616C650500000000
          000000C0FF3F0F536F75726365526563742E4C65667405000000000000009D06
          400E536F75726365526563742E546F70050000000000000087064010536F7572
          6365526563742E52696768740500000000000000DC064011536F757263655265
          63742E426F74746F6D0500000000000000A9064000010E436170496E73657473
          2E4C65667405000000000000008002400D436170496E736574732E546F700500
          0000000000008002400F436170496E736574732E526967687405000000000000
          0080024010436170496E736574732E426F74746F6D0500000000000000800240
          055363616C6505000000000000008000400F536F75726365526563742E4C6566
          740500000000000000D206400E536F75726365526563742E546F700500000000
          000000B4064010536F75726365526563742E5269676874050000000000000093
          074011536F75726365526563742E426F74746F6D0500000000000000E2064000
          000D416374697665486F744C696E6B0E010E436170496E736574732E4C656674
          05000000000000008001400D436170496E736574732E546F7005000000000000
          008001400F436170496E736574732E5269676874050000000000000080014010
          436170496E736574732E426F74746F6D05000000000000008001400F536F7572
          6365526563742E4C6566740500000000000000DC04400E536F75726365526563
          742E546F700500000000000000B4054010536F75726365526563742E52696768
          740500000000000000C2054011536F75726365526563742E426F74746F6D0500
          000000000000E4054000010E436170496E736574732E4C656674050000000000
          0000C001400D436170496E736574732E546F700500000000000000C001400F43
          6170496E736574732E52696768740500000000000000C0014010436170496E73
          6574732E426F74746F6D0500000000000000C00140055363616C650500000000
          000000C0FF3F0F536F75726365526563742E4C6566740500000000000000A405
          400E536F75726365526563742E546F70050000000000000087064010536F7572
          6365526563742E5269676874050000000000000091064011536F757263655265
          63742E426F74746F6D0500000000000000AA064000010E436170496E73657473
          2E4C65667405000000000000008002400D436170496E736574732E546F700500
          0000000000008002400F436170496E736574732E526967687405000000000000
          0080024010436170496E736574732E426F74746F6D0500000000000000800240
          055363616C6505000000000000008000400F536F75726365526563742E4C6566
          740500000000000000DC05400E536F75726365526563742E546F700500000000
          000000B4064010536F75726365526563742E52696768740500000000000000C2
          064011536F75726365526563742E426F74746F6D0500000000000000E4064000
          000B466F63757365644C696E6B0E010E436170496E736574732E4C6566740500
          0000000000008001400D436170496E736574732E546F70050000000000000080
          01400F436170496E736574732E52696768740500000000000000800140104361
          70496E736574732E426F74746F6D05000000000000008001400F536F75726365
          526563742E4C6566740500000000000000A001400E536F75726365526563742E
          546F700500000000000000B4054010536F75726365526563742E526967687405
          00000000000000BC044011536F75726365526563742E426F74746F6D05000000
          00000000E2054000010E436170496E736574732E4C6566740500000000000000
          C001400D436170496E736574732E546F700500000000000000C001400F436170
          496E736574732E52696768740500000000000000C0014010436170496E736574
          732E426F74746F6D0500000000000000C00140055363616C6505000000000000
          00C0FF3F0F536F75726365526563742E4C6566740500000000000000E001400E
          536F75726365526563742E546F70050000000000000087064010536F75726365
          526563742E526967687405000000000000008C054011536F7572636552656374
          2E426F74746F6D0500000000000000A9064000010E436170496E736574732E4C
          65667405000000000000008002400D436170496E736574732E546F7005000000
          000000008002400F436170496E736574732E5269676874050000000000000080
          024010436170496E736574732E426F74746F6D05000000000000008002400553
          63616C6505000000000000008000400F536F75726365526563742E4C65667405
          00000000000000A002400E536F75726365526563742E546F7005000000000000
          00B4064010536F75726365526563742E52696768740500000000000000BC0540
          11536F75726365526563742E426F74746F6D0500000000000000E20640000011
          416374697665466F63757365644C696E6B0E010E436170496E736574732E4C65
          667405000000000000008001400D436170496E736574732E546F700500000000
          0000008001400F436170496E736574732E526967687405000000000000008001
          4010436170496E736574732E426F74746F6D05000000000000008001400F536F
          75726365526563742E4C6566740500000000000000D205400E536F7572636552
          6563742E546F700500000000000000EC054010536F75726365526563742E5269
          676874050000000000000093064011536F75726365526563742E426F74746F6D
          05000000000000008E064000010E436170496E736574732E4C65667405000000
          00000000C001400D436170496E736574732E546F700500000000000000C00140
          0F436170496E736574732E52696768740500000000000000C001401043617049
          6E736574732E426F74746F6D0500000000000000C00140055363616C65050000
          0000000000C0FF3F0F536F75726365526563742E4C6566740500000000000000
          9D06400E536F75726365526563742E546F700500000000000000B1064010536F
          75726365526563742E52696768740500000000000000DC064011536F75726365
          526563742E426F74746F6D0500000000000000D4064000010E436170496E7365
          74732E4C65667405000000000000008002400D436170496E736574732E546F70
          05000000000000008002400F436170496E736574732E52696768740500000000
          00000080024010436170496E736574732E426F74746F6D050000000000000080
          0240055363616C6505000000000000008000400F536F75726365526563742E4C
          6566740500000000000000D206400E536F75726365526563742E546F70050000
          0000000000EC064010536F75726365526563742E526967687405000000000000
          0093074011536F75726365526563742E426F74746F6D05000000000000008E07
          400000000E5452656374416E696D6174696F6E00084475726174696F6E050000
          000000ACC5A7EE3F0C50726F70657274794E616D6506074D617267696E730F53
          7461727456616C75652E4C656674050000000000000080FFBF0E537461727456
          616C75652E546F70050000000000000080004010537461727456616C75652E52
          69676874050000000000000080FFBF0E53746F7056616C75652E4C6566740500
          00000000000080FFBF0F53746F7056616C75652E526967687405000000000000
          0080FFBF1053746F7056616C75652E426F74746F6D05000000000000008000C0
          0754726967676572060F497353656C65637465643D547275650E547269676765
          72496E76657273650610497353656C65637465643D66616C736500000654476C
          79706800095374796C654E616D65060A676C7970687374796C650C4D61726769
          6E732E4C65667405000000000000008001400D4D617267696E732E5269676874
          05000000000000008001C005416C69676E07044C6566740A506F736974696F6E
          2E5805000000000000008001400A53697A652E57696474680500000000000000
          8003400B53697A652E4865696768740500000000000000D003401453697A652E
          506C6174666F726D44656661756C7408000013545461625374796C6554657874
          4F626A65637400095374796C654E616D6506047465787405416C69676E070643
          6C69656E74064C6F636B6564090C4D617267696E732E4C656674050000000000
          00008002400B4D617267696E732E546F7005000000000000008001400D4D6172
          67696E732E526967687405000000000000008002400E4D617267696E732E426F
          74746F6D05000000000000008001400A53697A652E5769647468050000000000
          0000D002400B53697A652E48656967687405000000000000009003401453697A
          652E506C6174666F726D44656661756C7408155465787453657474696E67732E
          576F726457726170080D536861646F7756697369626C65080D41637469766554
          726967676572070853656C65637465640B416374697665436F6C6F720708636C
          61426C61636B08486F74436F6C6F720708636C61426C61636B00000754427574
          746F6E00095374796C654E616D65060B436C6F7365427574746F6E05416C6967
          6E07094D6F737452696768740A506F736974696F6E2E580500000000000000B4
          04400A53697A652E57696474680500000000000000C003400B53697A652E4865
          696768740500000000000000D003401453697A652E506C6174666F726D446566
          61756C74080B5374796C654C6F6F6B7570060F636C6561726564697462757474
          6F6E085461624F72646572020000000007544C61796F757400095374796C654E
          616D650606626F74746F6D05416C69676E0708436F6E74656E74730C436C6970
          4368696C6472656E09064C6F636B6564090A53697A652E576964746805000000
          000000008A05400B53697A652E4865696768740500000000000000D003401453
          697A652E506C6174666F726D44656661756C7408000E5452656374416E696D61
          74696F6E00084475726174696F6E050000000000ACC5A7EE3F0C50726F706572
          74794E616D6506074D617267696E730F537461727456616C75652E4C65667405
          0000000000000080FFBF10537461727456616C75652E52696768740500000000
          00000080FFBF11537461727456616C75652E426F74746F6D0500000000000000
          8000400E53746F7056616C75652E4C656674050000000000000080FFBF0D5374
          6F7056616C75652E546F7005000000000000008000C00F53746F7056616C7565
          2E5269676874050000000000000080FFBF0754726967676572060F497353656C
          65637465643D547275650E54726967676572496E76657273650610497353656C
          65637465643D66616C736500000F545461625374796C654F626A656374000541
          6C69676E0708436F6E74656E7473064C6F636B6564090C536F757263654C6F6F
          6B7570061B57696E646F7773203130204465736B746F707374796C652E706E67
          0D526F746174696F6E416E676C650500000000000000B406400A53697A652E57
          6964746805000000000000008A05400B53697A652E4865696768740500000000
          000000D003401453697A652E506C6174666F726D44656661756C74080D416374
          69766554726967676572070853656C65637465640A4163746976654C696E6B0E
          010E436170496E736574732E4C65667405000000000000008001400D43617049
          6E736574732E546F7005000000000000008001400F436170496E736574732E52
          69676874050000000000000080014010436170496E736574732E426F74746F6D
          05000000000000008001400F536F75726365526563742E4C6566740500000000
          000000DC04400E536F75726365526563742E546F700500000000000000B40540
          10536F75726365526563742E52696768740500000000000000C2054011536F75
          726365526563742E426F74746F6D0500000000000000E4054000010E43617049
          6E736574732E4C6566740500000000000000C001400D436170496E736574732E
          546F700500000000000000C001400F436170496E736574732E52696768740500
          000000000000C0014010436170496E736574732E426F74746F6D050000000000
          0000C00140055363616C650500000000000000C0FF3F0F536F75726365526563
          742E4C6566740500000000000000A405400E536F75726365526563742E546F70
          050000000000000087064010536F75726365526563742E526967687405000000
          0000000091064011536F75726365526563742E426F74746F6D05000000000000
          00AA064000010E436170496E736574732E4C6566740500000000000000800240
          0D436170496E736574732E546F7005000000000000008002400F436170496E73
          6574732E5269676874050000000000000080024010436170496E736574732E42
          6F74746F6D0500000000000000800240055363616C6505000000000000008000
          400F536F75726365526563742E4C6566740500000000000000DC05400E536F75
          726365526563742E546F700500000000000000B4064010536F75726365526563
          742E52696768740500000000000000C2064011536F75726365526563742E426F
          74746F6D0500000000000000E4064000000A536F757263654C696E6B0E010E43
          6170496E736574732E4C65667405000000000000008001400D436170496E7365
          74732E546F7005000000000000008001400F436170496E736574732E52696768
          74050000000000000080014010436170496E736574732E426F74746F6D050000
          00000000008001400F536F75726365526563742E4C6566740500000000000000
          A001400E536F75726365526563742E546F700500000000000000B4054010536F
          75726365526563742E52696768740500000000000000BC044011536F75726365
          526563742E426F74746F6D0500000000000000E2054000010E436170496E7365
          74732E4C6566740500000000000000C001400D436170496E736574732E546F70
          0500000000000000C001400F436170496E736574732E52696768740500000000
          000000C0014010436170496E736574732E426F74746F6D0500000000000000C0
          0140055363616C650500000000000000C0FF3F0F536F75726365526563742E4C
          6566740500000000000000E001400E536F75726365526563742E546F70050000
          000000000087064010536F75726365526563742E526967687405000000000000
          008C054011536F75726365526563742E426F74746F6D0500000000000000A906
          4000010E436170496E736574732E4C65667405000000000000008002400D4361
          70496E736574732E546F7005000000000000008002400F436170496E73657473
          2E5269676874050000000000000080024010436170496E736574732E426F7474
          6F6D0500000000000000800240055363616C6505000000000000008000400F53
          6F75726365526563742E4C6566740500000000000000A002400E536F75726365
          526563742E546F700500000000000000B4064010536F75726365526563742E52
          696768740500000000000000BC054011536F75726365526563742E426F74746F
          6D0500000000000000E20640000007486F744C696E6B0E010E436170496E7365
          74732E4C65667405000000000000008001400D436170496E736574732E546F70
          05000000000000008001400F436170496E736574732E52696768740500000000
          00000080014010436170496E736574732E426F74746F6D050000000000000080
          01400F536F75726365526563742E4C6566740500000000000000D205400E536F
          75726365526563742E546F700500000000000000B4054010536F757263655265
          63742E5269676874050000000000000093064011536F75726365526563742E42
          6F74746F6D0500000000000000E2054000010E436170496E736574732E4C6566
          740500000000000000C001400D436170496E736574732E546F70050000000000
          0000C001400F436170496E736574732E52696768740500000000000000C00140
          10436170496E736574732E426F74746F6D0500000000000000C0014005536361
          6C650500000000000000C0FF3F0F536F75726365526563742E4C656674050000
          00000000009D06400E536F75726365526563742E546F70050000000000000087
          064010536F75726365526563742E52696768740500000000000000DC06401153
          6F75726365526563742E426F74746F6D0500000000000000A9064000010E4361
          70496E736574732E4C65667405000000000000008002400D436170496E736574
          732E546F7005000000000000008002400F436170496E736574732E5269676874
          050000000000000080024010436170496E736574732E426F74746F6D05000000
          00000000800240055363616C6505000000000000008000400F536F7572636552
          6563742E4C6566740500000000000000D206400E536F75726365526563742E54
          6F700500000000000000B4064010536F75726365526563742E52696768740500
          00000000000093074011536F75726365526563742E426F74746F6D0500000000
          000000E2064000000D416374697665486F744C696E6B0E010E436170496E7365
          74732E4C65667405000000000000008001400D436170496E736574732E546F70
          05000000000000008001400F436170496E736574732E52696768740500000000
          00000080014010436170496E736574732E426F74746F6D050000000000000080
          01400F536F75726365526563742E4C6566740500000000000000DC04400E536F
          75726365526563742E546F700500000000000000B4054010536F757263655265
          63742E52696768740500000000000000C2054011536F75726365526563742E42
          6F74746F6D0500000000000000E4054000010E436170496E736574732E4C6566
          740500000000000000C001400D436170496E736574732E546F70050000000000
          0000C001400F436170496E736574732E52696768740500000000000000C00140
          10436170496E736574732E426F74746F6D0500000000000000C0014005536361
          6C650500000000000000C0FF3F0F536F75726365526563742E4C656674050000
          0000000000A405400E536F75726365526563742E546F70050000000000000087
          064010536F75726365526563742E526967687405000000000000009106401153
          6F75726365526563742E426F74746F6D0500000000000000AA064000010E4361
          70496E736574732E4C65667405000000000000008002400D436170496E736574
          732E546F7005000000000000008002400F436170496E736574732E5269676874
          050000000000000080024010436170496E736574732E426F74746F6D05000000
          00000000800240055363616C6505000000000000008000400F536F7572636552
          6563742E4C6566740500000000000000DC05400E536F75726365526563742E54
          6F700500000000000000B4064010536F75726365526563742E52696768740500
          000000000000C2064011536F75726365526563742E426F74746F6D0500000000
          000000E4064000000B466F63757365644C696E6B0E010E436170496E73657473
          2E4C65667405000000000000008001400D436170496E736574732E546F700500
          0000000000008001400F436170496E736574732E526967687405000000000000
          0080014010436170496E736574732E426F74746F6D0500000000000000800140
          0F536F75726365526563742E4C6566740500000000000000A001400E536F7572
          6365526563742E546F700500000000000000B4054010536F7572636552656374
          2E52696768740500000000000000BC044011536F75726365526563742E426F74
          746F6D0500000000000000E2054000010E436170496E736574732E4C65667405
          00000000000000C001400D436170496E736574732E546F700500000000000000
          C001400F436170496E736574732E52696768740500000000000000C001401043
          6170496E736574732E426F74746F6D0500000000000000C00140055363616C65
          0500000000000000C0FF3F0F536F75726365526563742E4C6566740500000000
          000000E001400E536F75726365526563742E546F700500000000000000870640
          10536F75726365526563742E526967687405000000000000008C054011536F75
          726365526563742E426F74746F6D0500000000000000A9064000010E43617049
          6E736574732E4C65667405000000000000008002400D436170496E736574732E
          546F7005000000000000008002400F436170496E736574732E52696768740500
          00000000000080024010436170496E736574732E426F74746F6D050000000000
          0000800240055363616C6505000000000000008000400F536F75726365526563
          742E4C6566740500000000000000A002400E536F75726365526563742E546F70
          0500000000000000B4064010536F75726365526563742E526967687405000000
          00000000BC054011536F75726365526563742E426F74746F6D05000000000000
          00E20640000011416374697665466F63757365644C696E6B0E010E436170496E
          736574732E4C65667405000000000000008001400D436170496E736574732E54
          6F7005000000000000008001400F436170496E736574732E5269676874050000
          000000000080014010436170496E736574732E426F74746F6D05000000000000
          008001400F536F75726365526563742E4C6566740500000000000000D205400E
          536F75726365526563742E546F700500000000000000EC054010536F75726365
          526563742E5269676874050000000000000093064011536F7572636552656374
          2E426F74746F6D05000000000000008E064000010E436170496E736574732E4C
          6566740500000000000000C001400D436170496E736574732E546F7005000000
          00000000C001400F436170496E736574732E52696768740500000000000000C0
          014010436170496E736574732E426F74746F6D0500000000000000C001400553
          63616C650500000000000000C0FF3F0F536F75726365526563742E4C65667405
          000000000000009D06400E536F75726365526563742E546F7005000000000000
          00B1064010536F75726365526563742E52696768740500000000000000DC0640
          11536F75726365526563742E426F74746F6D0500000000000000D4064000010E
          436170496E736574732E4C65667405000000000000008002400D436170496E73
          6574732E546F7005000000000000008002400F436170496E736574732E526967
          6874050000000000000080024010436170496E736574732E426F74746F6D0500
          000000000000800240055363616C6505000000000000008000400F536F757263
          65526563742E4C6566740500000000000000D206400E536F7572636552656374
          2E546F700500000000000000EC064010536F75726365526563742E5269676874
          050000000000000093074011536F75726365526563742E426F74746F6D050000
          00000000008E0740000000000654476C79706800095374796C654E616D65060A
          676C7970687374796C650C4D617267696E732E4C656674050000000000000080
          01400D4D617267696E732E526967687405000000000000008001C005416C6967
          6E07044C6566740A506F736974696F6E2E5805000000000000008001400A5369
          7A652E576964746805000000000000008003400B53697A652E48656967687405
          00000000000000D003401453697A652E506C6174666F726D44656661756C7408
          000013545461625374796C65546578744F626A65637400095374796C654E616D
          6506047465787405416C69676E0706436C69656E74064C6F636B6564090C4D61
          7267696E732E4C65667405000000000000008002400B4D617267696E732E546F
          7005000000000000008001400D4D617267696E732E5269676874050000000000
          00008002400E4D617267696E732E426F74746F6D05000000000000008001400A
          53697A652E57696474680500000000000000D002400B53697A652E4865696768
          7405000000000000009003401453697A652E506C6174666F726D44656661756C
          74080454657874060454657874155465787453657474696E67732E576F726457
          726170080D536861646F7756697369626C65080D416374697665547269676765
          72070853656C65637465640B416374697665436F6C6F720708636C61426C6163
          6B08486F74436F6C6F720708636C61426C61636B00000754427574746F6E0009
          5374796C654E616D65060B436C6F7365427574746F6E05416C69676E07094D6F
          737452696768740A506F736974696F6E2E580500000000000000B404400A5369
          7A652E57696474680500000000000000C003400B53697A652E48656967687405
          00000000000000D003401453697A652E506C6174666F726D44656661756C7408
          0B5374796C654C6F6F6B7570060F636C65617265646974627574746F6E085461
          624F72646572020000000000}
      end
      item
        Platform = 'Windows 10 Desktop'
        ResourcesBin = {
          464D585F5354594C4520322E3501060C436C6F73655461624974656D03002B00
          5450463007544C61796F757400095374796C654E616D65060C436C6F73655461
          624974656D05416C69676E070643656E7465720A53697A652E57696474680500
          0000000000008A05400B53697A652E4865696768740500000000000000D00340
          1453697A652E506C6174666F726D44656661756C7408085461624F7264657202
          00000F545461625374796C654F626A65637400095374796C654E616D65060374
          6F7005416C69676E0708436F6E74656E74730C436C69704368696C6472656E09
          064C6F636B6564090C536F757263654C6F6F6B7570061B57696E646F77732031
          30204465736B746F707374796C652E706E670A53697A652E5769647468050000
          00000000008A05400B53697A652E4865696768740500000000000000D0034014
          53697A652E506C6174666F726D44656661756C74080D41637469766554726967
          676572070853656C65637465640A4163746976654C696E6B0E010E436170496E
          736574732E4C65667405000000000000008001400D436170496E736574732E54
          6F7005000000000000008001400F436170496E736574732E5269676874050000
          000000000080014010436170496E736574732E426F74746F6D05000000000000
          008001400F536F75726365526563742E4C6566740500000000000000DC04400E
          536F75726365526563742E546F700500000000000000B4054010536F75726365
          526563742E52696768740500000000000000C2054011536F7572636552656374
          2E426F74746F6D0500000000000000E4054000010E436170496E736574732E4C
          6566740500000000000000C001400D436170496E736574732E546F7005000000
          00000000C001400F436170496E736574732E52696768740500000000000000C0
          014010436170496E736574732E426F74746F6D0500000000000000C001400553
          63616C650500000000000000C0FF3F0F536F75726365526563742E4C65667405
          00000000000000A405400E536F75726365526563742E546F7005000000000000
          0087064010536F75726365526563742E52696768740500000000000000910640
          11536F75726365526563742E426F74746F6D0500000000000000AA064000010E
          436170496E736574732E4C65667405000000000000008002400D436170496E73
          6574732E546F7005000000000000008002400F436170496E736574732E526967
          6874050000000000000080024010436170496E736574732E426F74746F6D0500
          000000000000800240055363616C6505000000000000008000400F536F757263
          65526563742E4C6566740500000000000000DC05400E536F7572636552656374
          2E546F700500000000000000B4064010536F75726365526563742E5269676874
          0500000000000000C2064011536F75726365526563742E426F74746F6D050000
          0000000000E4064000000A536F757263654C696E6B0E010E436170496E736574
          732E4C65667405000000000000008001400D436170496E736574732E546F7005
          000000000000008001400F436170496E736574732E5269676874050000000000
          000080014010436170496E736574732E426F74746F6D05000000000000008001
          400F536F75726365526563742E4C6566740500000000000000A001400E536F75
          726365526563742E546F700500000000000000B4054010536F75726365526563
          742E52696768740500000000000000BC044011536F75726365526563742E426F
          74746F6D0500000000000000E2054000010E436170496E736574732E4C656674
          0500000000000000C001400D436170496E736574732E546F7005000000000000
          00C001400F436170496E736574732E52696768740500000000000000C0014010
          436170496E736574732E426F74746F6D0500000000000000C00140055363616C
          650500000000000000C0FF3F0F536F75726365526563742E4C65667405000000
          00000000E001400E536F75726365526563742E546F7005000000000000008706
          4010536F75726365526563742E526967687405000000000000008C054011536F
          75726365526563742E426F74746F6D0500000000000000A9064000010E436170
          496E736574732E4C65667405000000000000008002400D436170496E73657473
          2E546F7005000000000000008002400F436170496E736574732E526967687405
          0000000000000080024010436170496E736574732E426F74746F6D0500000000
          000000800240055363616C6505000000000000008000400F536F757263655265
          63742E4C6566740500000000000000A002400E536F75726365526563742E546F
          700500000000000000B4064010536F75726365526563742E5269676874050000
          0000000000BC054011536F75726365526563742E426F74746F6D050000000000
          0000E20640000007486F744C696E6B0E010E436170496E736574732E4C656674
          05000000000000008001400D436170496E736574732E546F7005000000000000
          008001400F436170496E736574732E5269676874050000000000000080014010
          436170496E736574732E426F74746F6D05000000000000008001400F536F7572
          6365526563742E4C6566740500000000000000D205400E536F75726365526563
          742E546F700500000000000000B4054010536F75726365526563742E52696768
          74050000000000000093064011536F75726365526563742E426F74746F6D0500
          000000000000E2054000010E436170496E736574732E4C656674050000000000
          0000C001400D436170496E736574732E546F700500000000000000C001400F43
          6170496E736574732E52696768740500000000000000C0014010436170496E73
          6574732E426F74746F6D0500000000000000C00140055363616C650500000000
          000000C0FF3F0F536F75726365526563742E4C65667405000000000000009D06
          400E536F75726365526563742E546F70050000000000000087064010536F7572
          6365526563742E52696768740500000000000000DC064011536F757263655265
          63742E426F74746F6D0500000000000000A9064000010E436170496E73657473
          2E4C65667405000000000000008002400D436170496E736574732E546F700500
          0000000000008002400F436170496E736574732E526967687405000000000000
          0080024010436170496E736574732E426F74746F6D0500000000000000800240
          055363616C6505000000000000008000400F536F75726365526563742E4C6566
          740500000000000000D206400E536F75726365526563742E546F700500000000
          000000B4064010536F75726365526563742E5269676874050000000000000093
          074011536F75726365526563742E426F74746F6D0500000000000000E2064000
          000D416374697665486F744C696E6B0E010E436170496E736574732E4C656674
          05000000000000008001400D436170496E736574732E546F7005000000000000
          008001400F436170496E736574732E5269676874050000000000000080014010
          436170496E736574732E426F74746F6D05000000000000008001400F536F7572
          6365526563742E4C6566740500000000000000DC04400E536F75726365526563
          742E546F700500000000000000B4054010536F75726365526563742E52696768
          740500000000000000C2054011536F75726365526563742E426F74746F6D0500
          000000000000E4054000010E436170496E736574732E4C656674050000000000
          0000C001400D436170496E736574732E546F700500000000000000C001400F43
          6170496E736574732E52696768740500000000000000C0014010436170496E73
          6574732E426F74746F6D0500000000000000C00140055363616C650500000000
          000000C0FF3F0F536F75726365526563742E4C6566740500000000000000A405
          400E536F75726365526563742E546F70050000000000000087064010536F7572
          6365526563742E5269676874050000000000000091064011536F757263655265
          63742E426F74746F6D0500000000000000AA064000010E436170496E73657473
          2E4C65667405000000000000008002400D436170496E736574732E546F700500
          0000000000008002400F436170496E736574732E526967687405000000000000
          0080024010436170496E736574732E426F74746F6D0500000000000000800240
          055363616C6505000000000000008000400F536F75726365526563742E4C6566
          740500000000000000DC05400E536F75726365526563742E546F700500000000
          000000B4064010536F75726365526563742E52696768740500000000000000C2
          064011536F75726365526563742E426F74746F6D0500000000000000E4064000
          000B466F63757365644C696E6B0E010E436170496E736574732E4C6566740500
          0000000000008001400D436170496E736574732E546F70050000000000000080
          01400F436170496E736574732E52696768740500000000000000800140104361
          70496E736574732E426F74746F6D05000000000000008001400F536F75726365
          526563742E4C6566740500000000000000A001400E536F75726365526563742E
          546F700500000000000000B4054010536F75726365526563742E526967687405
          00000000000000BC044011536F75726365526563742E426F74746F6D05000000
          00000000E2054000010E436170496E736574732E4C6566740500000000000000
          C001400D436170496E736574732E546F700500000000000000C001400F436170
          496E736574732E52696768740500000000000000C0014010436170496E736574
          732E426F74746F6D0500000000000000C00140055363616C6505000000000000
          00C0FF3F0F536F75726365526563742E4C6566740500000000000000E001400E
          536F75726365526563742E546F70050000000000000087064010536F75726365
          526563742E526967687405000000000000008C054011536F7572636552656374
          2E426F74746F6D0500000000000000A9064000010E436170496E736574732E4C
          65667405000000000000008002400D436170496E736574732E546F7005000000
          000000008002400F436170496E736574732E5269676874050000000000000080
          024010436170496E736574732E426F74746F6D05000000000000008002400553
          63616C6505000000000000008000400F536F75726365526563742E4C65667405
          00000000000000A002400E536F75726365526563742E546F7005000000000000
          00B4064010536F75726365526563742E52696768740500000000000000BC0540
          11536F75726365526563742E426F74746F6D0500000000000000E20640000011
          416374697665466F63757365644C696E6B0E010E436170496E736574732E4C65
          667405000000000000008001400D436170496E736574732E546F700500000000
          0000008001400F436170496E736574732E526967687405000000000000008001
          4010436170496E736574732E426F74746F6D05000000000000008001400F536F
          75726365526563742E4C6566740500000000000000D205400E536F7572636552
          6563742E546F700500000000000000EC054010536F75726365526563742E5269
          676874050000000000000093064011536F75726365526563742E426F74746F6D
          05000000000000008E064000010E436170496E736574732E4C65667405000000
          00000000C001400D436170496E736574732E546F700500000000000000C00140
          0F436170496E736574732E52696768740500000000000000C001401043617049
          6E736574732E426F74746F6D0500000000000000C00140055363616C65050000
          0000000000C0FF3F0F536F75726365526563742E4C6566740500000000000000
          9D06400E536F75726365526563742E546F700500000000000000B1064010536F
          75726365526563742E52696768740500000000000000DC064011536F75726365
          526563742E426F74746F6D0500000000000000D4064000010E436170496E7365
          74732E4C65667405000000000000008002400D436170496E736574732E546F70
          05000000000000008002400F436170496E736574732E52696768740500000000
          00000080024010436170496E736574732E426F74746F6D050000000000000080
          0240055363616C6505000000000000008000400F536F75726365526563742E4C
          6566740500000000000000D206400E536F75726365526563742E546F70050000
          0000000000EC064010536F75726365526563742E526967687405000000000000
          0093074011536F75726365526563742E426F74746F6D05000000000000008E07
          400000000E5452656374416E696D6174696F6E00084475726174696F6E050000
          000000ACC5A7EE3F0C50726F70657274794E616D6506074D617267696E730F53
          7461727456616C75652E4C656674050000000000000080FFBF0E537461727456
          616C75652E546F70050000000000000080004010537461727456616C75652E52
          69676874050000000000000080FFBF0E53746F7056616C75652E4C6566740500
          00000000000080FFBF0F53746F7056616C75652E526967687405000000000000
          0080FFBF1053746F7056616C75652E426F74746F6D05000000000000008000C0
          0754726967676572060F497353656C65637465643D547275650E547269676765
          72496E76657273650610497353656C65637465643D66616C736500000654476C
          79706800095374796C654E616D65060A676C7970687374796C650C4D61726769
          6E732E4C65667405000000000000008001400D4D617267696E732E5269676874
          05000000000000008001C005416C69676E07044C6566740A53697A652E576964
          746805000000000000008003400B53697A652E48656967687405000000000000
          008003401453697A652E506C6174666F726D44656661756C7408000013545461
          625374796C65546578744F626A65637400095374796C654E616D650604746578
          7405416C69676E0706436C69656E74064C6F636B6564090C4D617267696E732E
          4C65667405000000000000008002400B4D617267696E732E546F700500000000
          0000008001400D4D617267696E732E526967687405000000000000008002400E
          4D617267696E732E426F74746F6D05000000000000008001400A53697A652E57
          696474680500000000000000E803400B53697A652E4865696768740500000000
          0000009003401453697A652E506C6174666F726D44656661756C740815546578
          7453657474696E67732E576F726457726170080D536861646F7756697369626C
          65080D41637469766554726967676572070853656C65637465640B4163746976
          65436F6C6F720708636C61426C61636B08486F74436F6C6F720708636C61426C
          61636B00000754427574746F6E00095374796C654E616D65060B436C6F736542
          7574746F6E05416C69676E07094D6F737452696768740A506F736974696F6E2E
          580500000000000000B404400A53697A652E57696474680500000000000000C0
          03400B53697A652E4865696768740500000000000000D003401453697A652E50
          6C6174666F726D44656661756C74080B5374796C654C6F6F6B7570060F636C65
          617265646974627574746F6E085461624F72646572020000000007544C61796F
          757400095374796C654E616D650606626F74746F6D05416C69676E0708436F6E
          74656E74730C436C69704368696C6472656E09064C6F636B6564090A53697A65
          2E576964746805000000000000008A05400B53697A652E486569676874050000
          0000000000D003401453697A652E506C6174666F726D44656661756C7408000E
          5452656374416E696D6174696F6E00084475726174696F6E050000000000ACC5
          A7EE3F0C50726F70657274794E616D6506074D617267696E730F537461727456
          616C75652E4C656674050000000000000080FFBF10537461727456616C75652E
          5269676874050000000000000080FFBF11537461727456616C75652E426F7474
          6F6D05000000000000008000400E53746F7056616C75652E4C65667405000000
          0000000080FFBF0D53746F7056616C75652E546F7005000000000000008000C0
          0F53746F7056616C75652E5269676874050000000000000080FFBF0754726967
          676572060F497353656C65637465643D547275650E54726967676572496E7665
          7273650610497353656C65637465643D66616C736500000F545461625374796C
          654F626A6563740005416C69676E0708436F6E74656E7473064C6F636B656409
          0C536F757263654C6F6F6B7570061B57696E646F7773203130204465736B746F
          707374796C652E706E670D526F746174696F6E416E676C650500000000000000
          B406400A53697A652E576964746805000000000000008A05400B53697A652E48
          65696768740500000000000000D003401453697A652E506C6174666F726D4465
          6661756C74080D41637469766554726967676572070853656C65637465640A41
          63746976654C696E6B0E010E436170496E736574732E4C656674050000000000
          00008001400D436170496E736574732E546F7005000000000000008001400F43
          6170496E736574732E5269676874050000000000000080014010436170496E73
          6574732E426F74746F6D05000000000000008001400F536F7572636552656374
          2E4C6566740500000000000000DC04400E536F75726365526563742E546F7005
          00000000000000B4054010536F75726365526563742E52696768740500000000
          000000C2054011536F75726365526563742E426F74746F6D0500000000000000
          E4054000010E436170496E736574732E4C6566740500000000000000C001400D
          436170496E736574732E546F700500000000000000C001400F436170496E7365
          74732E52696768740500000000000000C0014010436170496E736574732E426F
          74746F6D0500000000000000C00140055363616C650500000000000000C0FF3F
          0F536F75726365526563742E4C6566740500000000000000A405400E536F7572
          6365526563742E546F70050000000000000087064010536F7572636552656374
          2E5269676874050000000000000091064011536F75726365526563742E426F74
          746F6D0500000000000000AA064000010E436170496E736574732E4C65667405
          000000000000008002400D436170496E736574732E546F700500000000000000
          8002400F436170496E736574732E526967687405000000000000008002401043
          6170496E736574732E426F74746F6D0500000000000000800240055363616C65
          05000000000000008000400F536F75726365526563742E4C6566740500000000
          000000DC05400E536F75726365526563742E546F700500000000000000B40640
          10536F75726365526563742E52696768740500000000000000C2064011536F75
          726365526563742E426F74746F6D0500000000000000E4064000000A536F7572
          63654C696E6B0E010E436170496E736574732E4C656674050000000000000080
          01400D436170496E736574732E546F7005000000000000008001400F43617049
          6E736574732E5269676874050000000000000080014010436170496E73657473
          2E426F74746F6D05000000000000008001400F536F75726365526563742E4C65
          66740500000000000000A001400E536F75726365526563742E546F7005000000
          00000000B4054010536F75726365526563742E52696768740500000000000000
          BC044011536F75726365526563742E426F74746F6D0500000000000000E20540
          00010E436170496E736574732E4C6566740500000000000000C001400D436170
          496E736574732E546F700500000000000000C001400F436170496E736574732E
          52696768740500000000000000C0014010436170496E736574732E426F74746F
          6D0500000000000000C00140055363616C650500000000000000C0FF3F0F536F
          75726365526563742E4C6566740500000000000000E001400E536F7572636552
          6563742E546F70050000000000000087064010536F75726365526563742E5269
          67687405000000000000008C054011536F75726365526563742E426F74746F6D
          0500000000000000A9064000010E436170496E736574732E4C65667405000000
          000000008002400D436170496E736574732E546F700500000000000000800240
          0F436170496E736574732E526967687405000000000000008002401043617049
          6E736574732E426F74746F6D0500000000000000800240055363616C65050000
          00000000008000400F536F75726365526563742E4C6566740500000000000000
          A002400E536F75726365526563742E546F700500000000000000B4064010536F
          75726365526563742E52696768740500000000000000BC054011536F75726365
          526563742E426F74746F6D0500000000000000E20640000007486F744C696E6B
          0E010E436170496E736574732E4C65667405000000000000008001400D436170
          496E736574732E546F7005000000000000008001400F436170496E736574732E
          5269676874050000000000000080014010436170496E736574732E426F74746F
          6D05000000000000008001400F536F75726365526563742E4C65667405000000
          00000000D205400E536F75726365526563742E546F700500000000000000B405
          4010536F75726365526563742E5269676874050000000000000093064011536F
          75726365526563742E426F74746F6D0500000000000000E2054000010E436170
          496E736574732E4C6566740500000000000000C001400D436170496E73657473
          2E546F700500000000000000C001400F436170496E736574732E526967687405
          00000000000000C0014010436170496E736574732E426F74746F6D0500000000
          000000C00140055363616C650500000000000000C0FF3F0F536F757263655265
          63742E4C65667405000000000000009D06400E536F75726365526563742E546F
          70050000000000000087064010536F75726365526563742E5269676874050000
          0000000000DC064011536F75726365526563742E426F74746F6D050000000000
          0000A9064000010E436170496E736574732E4C65667405000000000000008002
          400D436170496E736574732E546F7005000000000000008002400F436170496E
          736574732E5269676874050000000000000080024010436170496E736574732E
          426F74746F6D0500000000000000800240055363616C65050000000000000080
          00400F536F75726365526563742E4C6566740500000000000000D206400E536F
          75726365526563742E546F700500000000000000B4064010536F757263655265
          63742E5269676874050000000000000093074011536F75726365526563742E42
          6F74746F6D0500000000000000E2064000000D416374697665486F744C696E6B
          0E010E436170496E736574732E4C65667405000000000000008001400D436170
          496E736574732E546F7005000000000000008001400F436170496E736574732E
          5269676874050000000000000080014010436170496E736574732E426F74746F
          6D05000000000000008001400F536F75726365526563742E4C65667405000000
          00000000DC04400E536F75726365526563742E546F700500000000000000B405
          4010536F75726365526563742E52696768740500000000000000C2054011536F
          75726365526563742E426F74746F6D0500000000000000E4054000010E436170
          496E736574732E4C6566740500000000000000C001400D436170496E73657473
          2E546F700500000000000000C001400F436170496E736574732E526967687405
          00000000000000C0014010436170496E736574732E426F74746F6D0500000000
          000000C00140055363616C650500000000000000C0FF3F0F536F757263655265
          63742E4C6566740500000000000000A405400E536F75726365526563742E546F
          70050000000000000087064010536F75726365526563742E5269676874050000
          000000000091064011536F75726365526563742E426F74746F6D050000000000
          0000AA064000010E436170496E736574732E4C65667405000000000000008002
          400D436170496E736574732E546F7005000000000000008002400F436170496E
          736574732E5269676874050000000000000080024010436170496E736574732E
          426F74746F6D0500000000000000800240055363616C65050000000000000080
          00400F536F75726365526563742E4C6566740500000000000000DC05400E536F
          75726365526563742E546F700500000000000000B4064010536F757263655265
          63742E52696768740500000000000000C2064011536F75726365526563742E42
          6F74746F6D0500000000000000E4064000000B466F63757365644C696E6B0E01
          0E436170496E736574732E4C65667405000000000000008001400D436170496E
          736574732E546F7005000000000000008001400F436170496E736574732E5269
          676874050000000000000080014010436170496E736574732E426F74746F6D05
          000000000000008001400F536F75726365526563742E4C656674050000000000
          0000A001400E536F75726365526563742E546F700500000000000000B4054010
          536F75726365526563742E52696768740500000000000000BC044011536F7572
          6365526563742E426F74746F6D0500000000000000E2054000010E436170496E
          736574732E4C6566740500000000000000C001400D436170496E736574732E54
          6F700500000000000000C001400F436170496E736574732E5269676874050000
          0000000000C0014010436170496E736574732E426F74746F6D05000000000000
          00C00140055363616C650500000000000000C0FF3F0F536F7572636552656374
          2E4C6566740500000000000000E001400E536F75726365526563742E546F7005
          0000000000000087064010536F75726365526563742E52696768740500000000
          0000008C054011536F75726365526563742E426F74746F6D0500000000000000
          A9064000010E436170496E736574732E4C65667405000000000000008002400D
          436170496E736574732E546F7005000000000000008002400F436170496E7365
          74732E5269676874050000000000000080024010436170496E736574732E426F
          74746F6D0500000000000000800240055363616C650500000000000000800040
          0F536F75726365526563742E4C6566740500000000000000A002400E536F7572
          6365526563742E546F700500000000000000B4064010536F7572636552656374
          2E52696768740500000000000000BC054011536F75726365526563742E426F74
          746F6D0500000000000000E20640000011416374697665466F63757365644C69
          6E6B0E010E436170496E736574732E4C65667405000000000000008001400D43
          6170496E736574732E546F7005000000000000008001400F436170496E736574
          732E5269676874050000000000000080014010436170496E736574732E426F74
          746F6D05000000000000008001400F536F75726365526563742E4C6566740500
          000000000000D205400E536F75726365526563742E546F700500000000000000
          EC054010536F75726365526563742E5269676874050000000000000093064011
          536F75726365526563742E426F74746F6D05000000000000008E064000010E43
          6170496E736574732E4C6566740500000000000000C001400D436170496E7365
          74732E546F700500000000000000C001400F436170496E736574732E52696768
          740500000000000000C0014010436170496E736574732E426F74746F6D050000
          0000000000C00140055363616C650500000000000000C0FF3F0F536F75726365
          526563742E4C65667405000000000000009D06400E536F75726365526563742E
          546F700500000000000000B1064010536F75726365526563742E526967687405
          00000000000000DC064011536F75726365526563742E426F74746F6D05000000
          00000000D4064000010E436170496E736574732E4C6566740500000000000000
          8002400D436170496E736574732E546F7005000000000000008002400F436170
          496E736574732E5269676874050000000000000080024010436170496E736574
          732E426F74746F6D0500000000000000800240055363616C6505000000000000
          008000400F536F75726365526563742E4C6566740500000000000000D206400E
          536F75726365526563742E546F700500000000000000EC064010536F75726365
          526563742E5269676874050000000000000093074011536F7572636552656374
          2E426F74746F6D05000000000000008E0740000000000654476C797068000953
          74796C654E616D65060A676C7970687374796C650C4D617267696E732E4C6566
          7405000000000000008001400D4D617267696E732E5269676874050000000000
          00008001C005416C69676E07044C6566740A53697A652E576964746805000000
          000000008003400B53697A652E48656967687405000000000000008003401453
          697A652E506C6174666F726D44656661756C7408000013545461625374796C65
          546578744F626A65637400095374796C654E616D6506047465787405416C6967
          6E0706436C69656E74064C6F636B6564090C4D617267696E732E4C6566740500
          0000000000008002400B4D617267696E732E546F700500000000000000800140
          0D4D617267696E732E526967687405000000000000008002400E4D617267696E
          732E426F74746F6D05000000000000008001400A53697A652E57696474680500
          000000000000E803400B53697A652E4865696768740500000000000000900340
          1453697A652E506C6174666F726D44656661756C740804546578740604546578
          74155465787453657474696E67732E576F726457726170080D536861646F7756
          697369626C65080D41637469766554726967676572070853656C65637465640B
          416374697665436F6C6F720708636C61426C61636B08486F74436F6C6F720708
          636C61426C61636B00000754427574746F6E00095374796C654E616D65060B43
          6C6F7365427574746F6E05416C69676E07094D6F737452696768740A506F7369
          74696F6E2E580500000000000000B404400A53697A652E576964746805000000
          00000000C003400B53697A652E4865696768740500000000000000D003401453
          697A652E506C6174666F726D44656661756C74080B5374796C654C6F6F6B7570
          060F636C65617265646974627574746F6E085461624F72646572020000000000}
      end>
    Left = 424
    Top = 32
  end
end


Read More...

Hello,
I don't really understood Markus need but his subject launch me on a test : Is it possible to avoid TDataset to pass parameters and use livebindings instead ?
Response is Yes you can (hope this sentence is not a registered one ;-) )

You can see how i achieve that in my blog (sorry french one) but googletrad is your friend
I shouldn't recommend this way though, it's a 2 steps way perhaps difficult to maintain in a staff !

Serge

Read More...

Serge Girard replied to the topic 'A DBRadiGroupbox equivalent in Firemonkey' in the forum. 2 months ago

YOU DONT NEED, REALLY, CREATE A NEW CLASS/OBJECT!

Sorry but this I desagree, did you ever try to Livebind a 6 state column of a Table with a set of radiobuttons ?
You have to bind all the six ones ! (Ok one solution is to use a combobox instead but the users don't want that)
My goal is to have a only one link

The Firemonkey is a framework in evolution,

I am aware of that, and there are more than one difference between XE3 (I am testing Ray Konopka's Coderage 7 stuff here ) and 10.2.3 !

if using FMX dont anymire FreAndNil() in a multiplatform is not desired and cannit works as expected - use always DisposeOf + nil, if necessary

Yes those "free" are a bit "old vcl way point of view" (underlined by syntax checker ;-) ) but i don't think that change the face of my trys .

Another example of difference Ray Konopka prone to use Locked:=true and Stored:=false for all the added objects
constructor TRkSpinBox.Create( AOwner: TComponent );
var
  T: TRkTriangle;
  B: TButton;
begin
  inherited;

  CanFocus := True;
  Height := 25;
  Width := 100;

  FBox := TRectangle.Create( Self );
  FBox.Parent := Self;
  FBox.Align := TAlignLayout.alContents;
  FBox.Fill.Color := claWhite;
  FBox.Stroke.Color := claDarkgray;
  FBox.HitTest := False;
  FBox.Locked := True;
  FBox.Stored := False;

  // Decrement Button

  B := TButton.Create( Self );
  B.Parent := FBox;
  B.Width := 24;
  B.Align := TAlignLayout.alLeft;
  B.Padding.Rect := RectF( 2, 2, 0, 2 );
  B.CanFocus := False;
  B.RepeatClick := True;
  B.OnClick := DecrementButtonClick;
  B.Locked := True;
  B.Stored := False;

  T := TRkTriangle.Create( Self );
  T.Parent := B;
  T.Height := 8;
  T.Width := 8;
  T.Align := TAlignLayout.alCenter;
  T.RotationAngle := 180;
  T.Fill.Color := claBlack;
  T.HitTest := False;
  T.Locked := True;
  T.Stored := False;

  // Increment Button
  B := TButton.Create( Self );
  B.Parent := FBox;
  B.Width := 24;
  B.Align := TAlignLayout.alRight;
  B.Padding.Rect := RectF( 0, 2, 2, 2 );
  B.CanFocus := False;
  B.RepeatClick := True;
  B.OnClick := IncrementButtonClick;
  B.Locked := True;
  B.Stored := False;

  T := TRkTriangle.Create( Self );
  T.Parent := B;
  T.Height := 8;
  T.Width := 8;
  T.Align := TAlignLayout.alCenter;
  T.Fill.Color := claBlack;
  T.HitTest := False;
  T.Locked := True;
  T.Stored := False;

  FTextBox := TText.Create( Self );
  FTextBox.Parent := FBox;
  FTextBox.Align := TAlignLayout.alClient;
  FTextBox.HorzTextAlign := TTextAlign.taCenter;
  FTextBox.Text := '0';
  FTextBox.Color := claBlack;
  FTextBox.HitTest := False;
  FTextBox.Locked := True;
  FTextBox.Stored := False;

  Value := 0;
end;
If i use the stored:=false my component does not draw,(don't understand why for the moment) if i don't I have 2 GridLayouts !

If you look Ray Konopka's code you will see a
B.OnClick := IncrementButtonClick;
working , my ARadio.OnClick:=ChangeRadioButton; not :-(

I don't saw any doc about FMX 1 vs FMX 2 , is there some ?

unfortunately, im not expert in create class or cmps

me too, my first component (dual VCL/FMX) is a new one and very recent
a TImage descendant with a property FileName i can LiveBind with a table (seems to work though)
Subject to a tutorial (french) comming soon
This TRadioGroupBox should be another one if i can overide all these difficulties (and perhaps others as linking to the DB, i.e TSpinBox supplied don't work [RSP 19158, RSP 16698] )

Read More...

Serge Girard created a new topic ' A DBRadiGroupbox equivalent in Firemonkey' in the forum. 2 months ago

Hi,
Ok, there is none Radiogroupbox in firemonkey (especially with livebinded properties) so i am trying to write one.
On the paper (read it as component created at run time) I can build my component (A groupbox with a GridLayout inside each RadioButton in the grid layout) and get the result value.

My problem is to pass from theory (created at runtime) to usage (designed component ) : i can't assign the onclick event of the created radiobutton , to be more specific i assign one but it does not work

unit SRadioGroupBox;

interface

uses
  System.SysUtils, System.Classes, System.IOUtils, System.Math, System.Types,
  System.Generics.Collections, FMX.dialogs,
  FMX.Types, FMX.Controls, FMX.Stdctrls, FMX.Objects, FMX.Layouts;

type
  [ObservableMembers('grbValue')]
  TSRadioGroupBox = class(TGroupBox)
  strict private
    FIndexItem : Integer;
  private
    FColumns : Word;
    FrbValue : String;
    FrbItems  : TStringList;
    FrbValues : TStringList;
    CLayout : TGridLayout;
    procedure SetColumns(const Value: word);
    procedure SetgrbValue(const Value: string);
    procedure SetrbItems(const Value: TStringList);
    procedure SetrbValues(const Value: TStringList);
    procedure ObserverToggle(const AObserver: IObserver; const Value: Boolean);
  protected
    function CanObserve(const ID: Integer): Boolean; override;                       { declaration is in System.Classes }
    procedure ObserverAdded(const ID: Integer; const Observer: IObserver); override; { declaration is in System.Classes }
    procedure ChangeRadioButton(Sender: TObject);
    function FindValue(const V : String) : Integer;
    procedure OnResize;
  public
   constructor Create(AOwner : TComponent); override;
   destructor Destroy; override;
   procedure AddItem(const Text : String);
   function Paint : Boolean; reintroduce;
  published
    property rbItems : TStringList read FrbItems write SetrbItems;
    property rbValues : TStringList read FrbValues write SetrbValues;
    property grbValue : String read FrbValue write setgrbValue;
    property IndexItem : Integer read FIndexItem; // write SetIndexItem;
    property Columns : word read FColumns write SetColumns stored Paint;
  end;

implementation

procedure TSRadioGroupBox.AddItem(const Text : String);
var ARadio : TRadioButton;
     O: TFMXObject;
begin
try
 ARadio:= TRadioButton.Create(Clayout);
 ARadio.Text:=Text;
 ARadio.OnClick:=ChangeRadioButton;
// O:=ARadio.FindStyleResource('Layout');
// if Assigned(O) then TLayout(O).OnClick:=ChangeRadioButton;
 CLayout.AddObject(ARadio);
except
end;
end;

function TSRadioGroupBox.CanObserve(const ID: Integer): Boolean;
begin
  case ID of
    TObserverMapping.EditLinkID,
    TObserverMapping.ControlValueID: Result := True;
  else
    Result := False;
  end;
end;

procedure TSRadioGroupBox.ChangeRadioButton(Sender: TObject);
begin
FrbValue:='0';  // just to test not working
end;

constructor TSRadioGroupBox.Create(AOwner: TComponent);
begin
  inherited;
  FIndexItem:=-1;
  FColumns:=1;
  Width:=200;
  Padding.Top:=20;
  Padding.Left:=3;
  Padding.Bottom:=3;
  Padding.Right:=3;
  if (csDesigning in ComponentState) then
    begin
    CLayout:=TGridLayout.Create(Self);
    CLayout.Align:=TAlignLayout.Client;
    CLayout.Parent:=Self;
//    CLayout.SetSubComponent(True);
//    CLayout.Stored := False;
//     CLayout.OnDragOver:=OnDragOver;
    end;
  if not Assigned(Frbitems) then FrbItems:=TStringList.Create;
  if not Assigned(FrbValues) then frbValues:=TStringList.Create;
end;

destructor TSRadioGroupBox.Destroy;
begin
  FreeAndNil(FrbItems);
  FreeAndNil(FrbValues);
  FreeAndNil(CLayout);
  inherited;
end;


function TSRadioGroupBox.FindValue(const V: String): Integer;
var i : word;
begin
for i:=0 to FrbValues.Count-1 do
  begin
   if FrbValues[i]=V then
     begin
       FrbValue:=V;
       FIndexItem:=i;
       Exit(i);
     end;
  end;
FrbValue:=EmptyStr;
result:=-1;
end;

procedure TSRadioGroupBox.ObserverAdded(const ID: Integer;
  const Observer: IObserver);
begin
  if ID = TObserverMapping.EditLinkID then
    Observer.OnObserverToggle := ObserverToggle;
end;

procedure TSRadioGroupBox.ObserverToggle(const AObserver: IObserver;
  const Value: Boolean);
var LEditLinkObserver: IEditLinkObserver;
begin
  if Value then
  begin
    if Supports(AObserver, IEditLinkObserver, LEditLinkObserver) then
      Enabled := not LEditLinkObserver.IsReadOnly;
  end
  else Enabled := True;
end;

procedure TSRadioGroupBox.OnResize;
begin
Paint;
end;

function TSRadioGroupBox.Paint : Boolean;
var Rows : word;
begin
  CLayout.Width:=Self.Width-Self.Padding.Left-Self.Padding.Right;
  CLayout.ItemWidth:=CLayout.Width/FColumns;
  CLayout.Height:=Self.Height-Self.Padding.Top-Self.Padding.Bottom;
  if frbItems.Count<=1
   then CLayout.ItemHeight:=CLayout.Height
   else  begin
         if FrbItems.Count mod FColumns=0
               then Rows:=frbItems.Count div FColumns
               else Rows:=(frbItems.Count div FColumns) + 1;
          CLayout.ItemHeight:=CLayout.Height/Rows;
   end;
  result:=true;
end;

procedure TSRadioGroupBox.SetColumns(const Value: word);
begin
  if FColumns<>Value then
   begin
    FColumns := Value;
    Paint;
   end;
end;

procedure TSRadioGroupBox.SetrbItems(const Value: TStringList);
var  i : Integer;
     Valeur : String;
begin
  CLayout.DeleteChildren;
  FrbItems.Assign(Value);
  for i := 0 to  frbItems.Count-1 do
    begin
     try
      Valeur:=frbValues[i];
     except
      Valeur:=i.ToString;
     end;
     AddItem(FrbItems[i]);
    end;
  Paint;
end;

procedure TSRadioGroupBox.SetrbValues(const Value: TStringList);
begin
  FrbValues.Assign(Value);
end;


procedure TSRadioGroupBox.SetgrbValue(const Value: string);
var i,R : Integer;
begin
 if Value<>FrbValue then
  begin
   i:=FindValue(Value);
   for r :=0 to Clayout.ChildrenCount-1 do
     begin
      TRadioButton(CLayout.Children[r]).IsChecked:=(r=i);
      if r=1 then break ;
     end;
   Paint;
  end;
end;

end.

3 bugs in this code :
RadioButton Onclick not working
at runtime 2 GridLayouts are created !
Last joke it's Groupbox text that is changed when binded with datas not grbValue !
(As an subsidiary question how can i test livebindings with a runtime created component to debug this "joke")

Is the solution passing by an embedded style in the component ?

@mically

PS. i don't even try to attach files (all my attempts failed)

Read More...

Serge Girard replied to the topic 'Firemonkey Label not have transparent background' in the forum. 4 months ago

OK, there are still bugs with firemonkey especially using styles. But except particular case i discuss on this forum i do not have any problems with TLabel.
By instance did you know there is also a TText component not style related

Read More...

Serge Girard replied to the topic 'Rotating Timage' in the forum. 4 months ago

Hi,
You need to be more explicit ! It's so easy to do with FMX (just changing rotation properties) that i assume you want the how to in VCL framework ?

Read More...

Serge Girard replied to the topic 'FireDac - IndexName & SetRange' in the forum. 4 months ago

Hello,
I am afraid but not 100% you misunderstood firedac indexName property.
Firedac IndexName does not refer to any INDEX you built in database but "internal" index you create in your program, using indexes creation in dfm, AddIndex() function ...

Read More...

Serge Girard replied to the topic 'FMX - esthetic problem with sort of docking form' in the forum. 4 months ago

I change my animation working on Scale.X property and set property autoreverse to true

the code bloc is now

AniScaleX.StartValue:=TScaledLayout(AParent).Scale.X;
  AniScaleX.StopValue:=TScaledLaYout(AParent).Scale.X+0.01;
  AniScaleX.Start;
  AniScaleX.Start;
This works even if i still think it's a dirty solution

Read More...

Serge Girard replied to the topic 'Livebinding with database, what are notable use cases?' in the forum. 4 months ago

Hello

is there any tutorial for that?

I wrote 2 tutorials about (in french but there is a translator motor)
Generalities
Grids

Read More...

Serge Girard replied to the topic 'FMX - esthetic problem with sort of docking form' in the forum. 5 months ago

I wrote a very very dirty animation

procedure TMainForm.EmbeddedForm(AParent: TControl; AForm: TCustomForm);
var AControl : TFMXObject;
begin
 AParent.DeleteChildren;
 if Assigned(CurrentForm) then CurrentForm.Free;
// AParent.AddObject(TLayout(AForm.Children[0]));
//alternative
 AForm.Children[0].Parent:=AParent;
 CurrentForm:=AForm;  // mémoriser
 FloatAnimation1.Inverse:=False;
 FloatAnimation1.Start;
 FloatAnimation1.Inverse:=true;
 FloatAnimation1.Start;
FloatAnimation is attached to TScaledLayout rotation property
object MainLayout: TScaledLayout
    Align = Client
    OriginalWidth = 618.000000000000000000
    OriginalHeight = 387.000000000000000000
    Margins.Left = 10.000000000000000000
    Margins.Top = 10.000000000000000000
    Margins.Right = 10.000000000000000000
    Margins.Bottom = 10.000000000000000000
    Size.Width = 618.000000000000000000
    Size.Height = 387.000000000000000000
    Size.PlatformDefault = False
    object WarfLayout: TLayout
      Align = Client
      Margins.Left = 10.000000000000000000
      Margins.Top = 10.000000000000000000
      Margins.Right = 10.000000000000000000
      Margins.Bottom = 10.000000000000000000
      Size.Width = 598.000000000000000000
      Size.Height = 367.000000000000000000
      Size.PlatformDefault = False
      TabOrder = 0
    end
    object FloatAnimation1: TFloatAnimation
      AnimationType = InOut
      Duration = 0.001000000047497451
      PropertyName = 'RotationAngle'
      StartValue = 0.000000000000000000
      StartFromCurrent = True
      StopValue = 1.000000000000000000
    end
  end
As i wrote, very dirty but worky trick, forcing the "refresh" , the goal !
There is certainly a best way :-) (at least a more clean one)

Read More...

Serge Girard replied to the topic 'FMX - esthetic problem with sort of docking form' in the forum. 5 months ago

Yes, that is my "little" problem.

Before my first question I had test the repaint, invalidaterect (problem is which Rect) even resizing the form but none with satisfaction :-( I think also about changing scale property but not test yet.

Thanks for the link Delphi Haven (i missed this one)
and will be glad if Remy enlight us

Serge

Read More...

Serge Girard replied to the topic 'FMX - esthetic problem with sort of docking form' in the forum. 5 months ago

Hello,

I don't understand why my attachments are not appearing perhaps i'm misunderstanding the tools usage.

Your sources are in the same idea, You are right in with an lightly different approach.

Now, test these steps :

  1. First add a Tlabel to your second form
  2. Click btnCallFormSecondForm
  3. Resize Main Form
  4. Click btCloseFormInRightSize
  5. Click btnCallFormSecondForm
And you will see my (in)esthetic problem :-( , Label text is sort of sourrounded

Read More...

Serge Girard created a new topic ' FMX - esthetic problem with sort of docking form' in the forum. 5 months ago

Hello
I am using sort of docking form.
In main main form i have a TScaledLayout where i "dock" a TLayout of another form(s) as i found somewhere in the doc

procedure TMainForm.EmbeddedForm(AParent: TControl; AForm: TCustomForm);
var AControl : TFMXObject;
begin
 AParent.DeleteChildren;
 if Assigned(CurrentForm) then CurrentForm.Free;
// while AForm.ChildrenCount>0 do
 AForm.Children[0].Parent:=AParent;
 CurrentForm:=AForm;  // mémoriser
end;
Some controls don't draw correctly (except after resizing) i.e. TLabels are shape surrounded (see Picture)
I attach also a little project if you want to test by yourself.

Question : how can i override this/these unwanted effects ? where is my mistake if any ?

N.B. the only docking ok is Layout to Layout

Read More...