diff --git a/components/jujiboutils/changes.txt b/components/jujiboutils/changes.txt index af00e573f..5ebd30437 100644 --- a/components/jujiboutils/changes.txt +++ b/components/jujiboutils/changes.txt @@ -5,6 +5,9 @@ Note: Lazarus Trunk required Version pre-1.1 -------------------------------------------------- +2013-08-29 Added: TJLabel + TJButton example +2013-08-28 Fixed: A few bugs in design/runtime mode +2013-08-25 Added: New components: TJLabel, TJDBLabel, TJButton. 2013-08-18 Added: Calendar to Date/Date Time components and grid controls. Bug fixes 2013-06-17 Added: TJDBImageBlob. Display raw images from blob fields (read only) 2013-04-29 Fixed: TJDBGridControl Focus issues diff --git a/components/jujiboutils/examples/example1/main.lfm b/components/jujiboutils/examples/example1/main.lfm index b25d107a2..b2c3c8cdb 100644 --- a/components/jujiboutils/examples/example1/main.lfm +++ b/components/jujiboutils/examples/example1/main.lfm @@ -1,18 +1,18 @@ object Form1: TForm1 - Left = 307 - Height = 331 - Top = 233 - Width = 436 + Left = 576 + Height = 332 + Top = 272 + Width = 366 Caption = 'Form1' - ClientHeight = 331 - ClientWidth = 436 + ClientHeight = 332 + ClientWidth = 366 OnCreate = FormCreate - LCLVersion = '1.1' + LCLVersion = '0.9.31' object Label1: TLabel Left = 13 - Height = 17 + Height = 18 Top = 16 - Width = 149 + Width = 150 Caption = 'Testing jujibo db controls' ParentColor = False end @@ -35,9 +35,9 @@ object Form1: TForm1 TabOrder = 4 end object BitBtn1: TBitBtn - Left = 343 + Left = 273 Height = 30 - Top = 288 + Top = 289 Width = 77 Anchors = [akRight, akBottom] Caption = '&Cerrar' @@ -46,7 +46,7 @@ object Form1: TForm1 TabOrder = 5 end object JDBLabeledCurrencyEdit1: TJDBLabeledCurrencyEdit - Left = 298 + Left = 272 Height = 27 Top = 173 Width = 80 @@ -59,9 +59,9 @@ object Form1: TForm1 EditLabel.AnchorSideRight.Control = JDBLabeledCurrencyEdit1 EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = JDBLabeledCurrencyEdit1 - EditLabel.Left = 298 - EditLabel.Height = 17 - EditLabel.Top = 153 + EditLabel.Left = 272 + EditLabel.Height = 18 + EditLabel.Top = 152 EditLabel.Width = 80 EditLabel.Caption = 'Total' EditLabel.ParentColor = False @@ -80,8 +80,8 @@ object Form1: TForm1 EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = JDBLabeledIntegerEdit1 EditLabel.Left = 21 - EditLabel.Height = 17 - EditLabel.Top = 154 + EditLabel.Height = 18 + EditLabel.Top = 153 EditLabel.Width = 80 EditLabel.Caption = 'Id' EditLabel.ParentColor = False @@ -90,28 +90,24 @@ object Form1: TForm1 object JDBLabeledDateEdit1: TJDBLabeledDateEdit Left = 106 Height = 27 - Hint = 'Try Alt+Down arrow key to show the calendar' Top = 173 Width = 80 DataField = 'DATE' DataSource = Datasource1 - ButtonWidth = 23 EditLabel.AnchorSideLeft.Control = JDBLabeledDateEdit1 EditLabel.AnchorSideRight.Control = JDBLabeledDateEdit1 EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = JDBLabeledDateEdit1 EditLabel.Left = 106 - EditLabel.Height = 17 - EditLabel.Top = 153 + EditLabel.Height = 18 + EditLabel.Top = 152 EditLabel.Width = 80 EditLabel.Caption = 'Date' EditLabel.ParentColor = False - ParentShowHint = False - ShowHint = True TabOrder = 1 end object JDBLabeledIntegerEdit2: TJDBLabeledIntegerEdit - Left = 214 + Left = 188 Height = 27 Top = 173 Width = 80 @@ -122,22 +118,47 @@ object Form1: TForm1 EditLabel.AnchorSideRight.Control = JDBLabeledIntegerEdit2 EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = JDBLabeledIntegerEdit2 - EditLabel.Left = 214 - EditLabel.Height = 17 - EditLabel.Top = 153 + EditLabel.Left = 188 + EditLabel.Height = 18 + EditLabel.Top = 152 EditLabel.Width = 80 EditLabel.Caption = 'Id2' EditLabel.ParentColor = False TabOrder = 2 end object Datasource1: TDatasource - DataSet = BufDataset1 - left = 336 + DataSet = MemDataset1 + left = 224 top = 8 end - object BufDataset1: TBufDataset - FieldDefs = <> - left = 248 + object MemDataset1: TMemDataset + Active = True + FieldDefs = < + item + Name = 'ID' + DataType = ftInteger + Precision = 0 + Size = 0 + end + item + Name = 'DATE' + DataType = ftDate + Precision = 0 + Size = 0 + end + item + Name = 'TOTAL' + DataType = ftFloat + Precision = 0 + Size = 0 + end + item + Name = 'ID2' + DataType = ftInteger + Precision = 0 + Size = 0 + end> + left = 184 top = 8 end end diff --git a/components/jujiboutils/examples/example1/main.pas b/components/jujiboutils/examples/example1/main.pas index 6896035ed..0f212f692 100644 --- a/components/jujiboutils/examples/example1/main.pas +++ b/components/jujiboutils/examples/example1/main.pas @@ -5,9 +5,9 @@ unit main; interface uses - Classes, SysUtils, DB, BufDataset, FileUtil, Forms, Controls, Graphics, - Dialogs, StdCtrls, DBCtrls, Buttons, jdblabeledcurrencyedit, - jdblabeledintegeredit, jdblabeleddateedit; + Classes, SysUtils, DB, memds, FileUtil, Forms, Controls, Graphics, Dialogs, + StdCtrls, DBCtrls, Buttons, jdblabeledcurrencyedit, jdblabeledintegeredit, + jdblabeleddateedit; type @@ -15,7 +15,6 @@ type TForm1 = class(TForm) BitBtn1: TBitBtn; - BufDataset1: TBufDataset; Datasource1: TDatasource; DBNavigator1: TDBNavigator; JDBLabeledCurrencyEdit1: TJDBLabeledCurrencyEdit; @@ -25,6 +24,7 @@ type Label1: TLabel; Label4: TLabel; Label5: TLabel; + MemDataset1: TMemDataset; procedure FormCreate(Sender: TObject); private { private declarations } @@ -45,26 +45,17 @@ procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin - // Create BufDataset - with BufDataset1.FieldDefs do - begin - Add('ID', ftInteger, 0, False); - Add('DATE', ftDate, 0, False); - Add('TOTAL', ftCurrency, 0, False); - Add('ID2', ftInteger, 0, False); - end; - BufDataset1.CreateDataset; // populate the memDataset for i := 1 to 10 do begin - BufDataset1.Append; - BufDataset1.FieldByName('ID').AsInteger := i; - BufDataset1.FieldByName('DATE').AsDateTime := Now; - BufDataset1.FieldByName('ID2').AsInteger := i * i; - BufDataset1.FieldByName('TOTAL').AsCurrency := i * i * i; - BufDataset1.Post; + MemDataset1.Append; + MemDataset1.FieldByName('ID').AsInteger := i; + MemDataset1.FieldByName('DATE').AsDateTime := Now; + MemDataset1.FieldByName('ID2').AsInteger := i * i; + MemDataset1.FieldByName('TOTAL').AsFloat := i * i * i; + MemDataset1.Post; end; - BufDataset1.First; + MemDataset1.First; end; end. diff --git a/components/jujiboutils/examples/example1/project1.lpi b/components/jujiboutils/examples/example1/project1.lpi index e2cd65be8..c987c9d32 100644 --- a/components/jujiboutils/examples/example1/project1.lpi +++ b/components/jujiboutils/examples/example1/project1.lpi @@ -1,4 +1,4 @@ - + @@ -25,18 +25,22 @@ + - + - + - + + + + @@ -48,14 +52,13 @@ - - + @@ -64,6 +67,10 @@ + + + + diff --git a/components/jujiboutils/examples/example1/project1.lpr b/components/jujiboutils/examples/example1/project1.lpr index 0175aa8c5..d24ce70b2 100644 --- a/components/jujiboutils/examples/example1/project1.lpr +++ b/components/jujiboutils/examples/example1/project1.lpr @@ -8,7 +8,8 @@ uses {$ENDIF}clocale, {$ENDIF} Interfaces, // this includes the LCL widgetset - Forms, main; + Forms, main, memdslaz + { you can add units after this }; {$R *.res} diff --git a/components/jujiboutils/examples/examplenodb/main.lfm b/components/jujiboutils/examples/examplenodb/main.lfm index 96a06101d..07293e85b 100644 --- a/components/jujiboutils/examples/examplenodb/main.lfm +++ b/components/jujiboutils/examples/examplenodb/main.lfm @@ -1,19 +1,17 @@ object Form1: TForm1 Left = 365 - Height = 184 - Hint = 'Try Alt+Down arrow key to show the calendar' - Top = 261 - Width = 445 + Height = 185 + Top = 260 + Width = 419 Caption = 'Example' - ClientHeight = 184 - ClientWidth = 445 - ShowHint = True - LCLVersion = '1.1' + ClientHeight = 185 + ClientWidth = 419 + LCLVersion = '0.9.31' object Label1: TLabel Left = 8 - Height = 17 + Height = 18 Top = 8 - Width = 252 + Width = 253 Caption = 'Testing non DB-Aware Input Controls' Font.Height = 14 Font.Style = [fsBold] @@ -24,10 +22,10 @@ object Form1: TForm1 Left = 24 Height = 82 Top = 40 - Width = 400 + Width = 375 Caption = 'Labeled controls' ClientHeight = 63 - ClientWidth = 396 + ClientWidth = 371 TabOrder = 0 object JLabeledIntegerEdit1: TJLabeledIntegerEdit Left = 14 @@ -41,8 +39,8 @@ object Form1: TForm1 EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = JLabeledIntegerEdit1 EditLabel.Left = 14 - EditLabel.Height = 17 - EditLabel.Top = 3 + EditLabel.Height = 18 + EditLabel.Top = 2 EditLabel.Width = 80 EditLabel.Caption = 'Integer' EditLabel.ParentColor = False @@ -61,8 +59,8 @@ object Form1: TForm1 EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = JLabeledCurrencyEdit1 EditLabel.Left = 102 - EditLabel.Height = 17 - EditLabel.Top = 3 + EditLabel.Height = 18 + EditLabel.Top = 2 EditLabel.Width = 80 EditLabel.Caption = 'Currency' EditLabel.ParentColor = False @@ -71,28 +69,26 @@ object Form1: TForm1 object JLabeledDateEdit1: TJLabeledDateEdit Left = 190 Height = 27 - Hint = 'Try Alt+Down Arrow key to show the calendar' Top = 22 Width = 80 DisplayFormat = 'dd/mm/yy' Value = 0 - ButtonWidth = 23 EditLabel.AnchorSideLeft.Control = JLabeledDateEdit1 EditLabel.AnchorSideRight.Control = JLabeledDateEdit1 EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = JLabeledDateEdit1 EditLabel.Left = 190 - EditLabel.Height = 17 - EditLabel.Top = 2 + EditLabel.Height = 18 + EditLabel.Top = 1 EditLabel.Width = 80 EditLabel.Caption = 'Date' EditLabel.ParentColor = False TabOrder = 2 end object JLabeledFloatEdit1: TJLabeledFloatEdit - Left = 298 + Left = 280 Height = 27 - Top = 22 + Top = 23 Width = 80 DisplayFormat = '#,0.00' Decimals = 2 @@ -101,8 +97,8 @@ object Form1: TForm1 EditLabel.AnchorSideRight.Control = JLabeledFloatEdit1 EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = JLabeledFloatEdit1 - EditLabel.Left = 298 - EditLabel.Height = 17 + EditLabel.Left = 280 + EditLabel.Height = 18 EditLabel.Top = 2 EditLabel.Width = 80 EditLabel.Caption = 'Float' @@ -111,9 +107,9 @@ object Form1: TForm1 end end object BitBtn1: TBitBtn - Left = 334 + Left = 308 Height = 30 - Top = 138 + Top = 139 Width = 91 Anchors = [akRight, akBottom] Caption = '&Cerrar' diff --git a/components/jujiboutils/examples/examplenodb/testnodb.lpi b/components/jujiboutils/examples/examplenodb/testnodb.lpi index c4a4cc136..fbeefee3a 100644 --- a/components/jujiboutils/examples/examplenodb/testnodb.lpi +++ b/components/jujiboutils/examples/examplenodb/testnodb.lpi @@ -1,4 +1,4 @@ - + @@ -18,13 +18,13 @@ - + @@ -45,14 +45,13 @@ - - + @@ -61,6 +60,10 @@ + + + + diff --git a/components/jujiboutils/examples/jlabel_button_test/panel.lpi b/components/jujiboutils/examples/jlabel_button_test/panel.lpi new file mode 100644 index 000000000..838f26c50 --- /dev/null +++ b/components/jujiboutils/examples/jlabel_button_test/panel.lpi @@ -0,0 +1,143 @@ + + + + + + + + + <ResourceType Value="res"/> + <UseXPManifest Value="True"/> + <Icon Value="0"/> + </General> + <i18n> + <EnableI18N LFM="False"/> + </i18n> + <VersionInfo> + <StringTable ProductVersion=""/> + </VersionInfo> + <BuildModes Count="3"> + <Item1 Name="Default" Default="True"/> + <Item2 Name="Windows"> + <MacroValues Count="1"> + <Macro1 Name="LCLWidgetType" Value="win32"/> + </MacroValues> + <CompilerOptions> + <Version Value="11"/> + <Target> + <Filename Value="panel"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <CodeGeneration> + <TargetOS Value="win32"/> + </CodeGeneration> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerMessages> + <MsgFileName Value=""/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + </Item2> + <Item3 Name="Qt4"> + <MacroValues Count="1"> + <Macro2 Name="LCLWidgetType" Value="qt"/> + </MacroValues> + <CompilerOptions> + <Version Value="11"/> + <Target> + <Filename Value="panel"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerMessages> + <MsgFileName Value=""/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + </Item3> + <SharedMatrixOptions Count="2"> + <Item1 ID="816031965831" Modes="Windows" Type="IDEMacro" MacroName="LCLWidgetType" Value="win32"/> + <Item2 ID="040486138318" Modes="Qt4" Type="IDEMacro" MacroName="LCLWidgetType" Value="qt"/> + </SharedMatrixOptions> + </BuildModes> + <PublishOptions> + <Version Value="2"/> + <DestinationDirectory Value="$(TestDir)/jlabel_button_test/"/> + <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> + <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> + </PublishOptions> + <RunParams> + <local> + <FormatVersion Value="1"/> + </local> + </RunParams> + <RequiredPackages Count="2"> + <Item1> + <PackageName Value="jujiboutils"/> + </Item1> + <Item2> + <PackageName Value="LCL"/> + </Item2> + </RequiredPackages> + <Units Count="2"> + <Unit0> + <Filename Value="panel.lpr"/> + <IsPartOfProject Value="True"/> + <UnitName Value="panel"/> + </Unit0> + <Unit1> + <Filename Value="principal.pas"/> + <IsPartOfProject Value="True"/> + <ComponentName Value="Form1"/> + <HasResources Value="True"/> + <ResourceBaseClass Value="Form"/> + <UnitName Value="principal"/> + </Unit1> + </Units> + </ProjectOptions> + <CompilerOptions> + <Version Value="11"/> + <Target> + <Filename Value="panel"/> + </Target> + <SearchPaths> + <IncludeFiles Value="$(ProjOutDir)"/> + <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Options> + <Win32> + <GraphicApplication Value="True"/> + </Win32> + </Options> + </Linking> + <Other> + <CompilerMessages> + <MsgFileName Value=""/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> +</CONFIG> diff --git a/components/jujiboutils/examples/jlabel_button_test/panel.lpr b/components/jujiboutils/examples/jlabel_button_test/panel.lpr new file mode 100644 index 000000000..1efc311ad --- /dev/null +++ b/components/jujiboutils/examples/jlabel_button_test/panel.lpr @@ -0,0 +1,21 @@ +program panel; + +{$mode objfpc}{$H+} + +uses + {$IFDEF UNIX}{$IFDEF UseCThreads} + cthreads, + {$ENDIF}{$ENDIF} + Interfaces, // this includes the LCL widgetset + Forms, principal + { you can add units after this }; + +{$R *.res} + +begin + RequireDerivedFormResource := True; + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. + diff --git a/components/jujiboutils/examples/jlabel_button_test/principal.lfm b/components/jujiboutils/examples/jlabel_button_test/principal.lfm new file mode 100644 index 000000000..f90fa49c6 --- /dev/null +++ b/components/jujiboutils/examples/jlabel_button_test/principal.lfm @@ -0,0 +1,1735 @@ +object Form1: TForm1 + Left = 121 + Height = 654 + Top = 30 + Width = 765 + Caption = 'JLabel and JButton test' + ClientHeight = 654 + ClientWidth = 765 + LCLVersion = '1.1' + object PanelNumCentral: TPanel + Left = 73 + Height = 201 + Top = 188 + Width = 201 + AutoSize = True + BevelOuter = bvNone + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 3 + ClientHeight = 201 + ClientWidth = 201 + TabOrder = 0 + object JButton8: TJButton + Left = 0 + Height = 67 + Top = 0 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '7' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 0 + end + object JButton9: TJButton + Left = 67 + Height = 67 + Top = 0 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '8' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 1 + end + object JButton12: TJButton + Left = 134 + Height = 67 + Top = 0 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '9' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 2 + end + object JButton18: TJButton + Left = 0 + Height = 67 + Top = 67 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '4' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 3 + end + object JButton20: TJButton + Left = 67 + Height = 67 + Top = 67 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '5' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 4 + end + object JButton21: TJButton + Left = 134 + Height = 67 + Top = 67 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '6' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 5 + end + object JButton22: TJButton + Left = 0 + Height = 67 + Top = 134 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '1' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 6 + end + object JButton23: TJButton + Left = 67 + Height = 67 + Top = 134 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '2' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 7 + end + object JButton24: TJButton + Left = 134 + Height = 67 + Top = 134 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '3' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 8 + end + end + object PanelNumDerecho: TPanel + AnchorSideLeft.Control = PanelNumCentral + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = PanelNumCentral + Left = 274 + Height = 268 + Top = 188 + Width = 67 + AutoSize = True + BevelOuter = bvNone + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 1 + ClientHeight = 268 + ClientWidth = 67 + TabOrder = 1 + object JButton10: TJButton + Left = 0 + Height = 67 + Top = 0 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '+' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 0 + end + object JButton19: TJButton + Left = 0 + Height = 67 + Top = 67 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '-' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 1 + end + object JButton11: TJButton + Left = 0 + Height = 134 + Top = 134 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 132 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = 'Enter' + LCaption.Font.Height = -16 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 132 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B47726170686963DE08000089504E47 + 0D0A1A0A0000000D4948445200000041000000840806000000CFD24642000000 + 06624B474400FF00FF00FFA0BDA793000000097048597300000B1300000B1301 + 009A9C180000000774494D4507DD01120F1208D877AC29000000197445587443 + 6F6D6D656E74004372656174656420776974682047494D5057810E1700000846 + 4944415478DAED5D5B6FD43A10FE66ECDD2DED522D1202891F8080FFFF5B78E3 + 8107E0A13D1C75697BF6127BCE8333B693267BEB02CAC552D428ED6E33E3F9E6 + 6E9B240C1011B6DB2D96CB25EEEE9658AD56F0DEC13907EF3D44042282630711 + ED7CA6F74DCFDA3E7FE8101178EFE1BD87730EC6182C160BBC79F306F3F93CFD + 0FEFBD101196CB256E6E6E51144A78F8E95C11BFE4584684F7A73DC4A7BFD9C7 + 9063874E605114252DE1028077EFDEE1D3A74F10115822C2FDFD3D6E6EFE0111 + 83C883882002047A2912AF12719C24E444EABD1C4CF8A94C5009288A225EB954 + 7FF9F205DE7B7CFCF811B6281CEEEE7E613A9DA2288ACA4B857B02C0005C14B1 + E7C0A22A01880C51489E63D419B0DD6E2BD2404430C6E0FBF7EF78FBF62DEC66 + B381310600C0CC2022307324365D26127F3C2C944840A42A158170C9FE86E277 + E7F7C7C2206740CE0411813106C6047A7EFCF801BBDD6EE203668E0CF1DED798 + 9118A59C3E64F6F47BF3596F968CF3E803C5BC73AEC280A228224DF9582E97B0 + 22149990CFB088A0280A00C06C36C37C7E85D96C1A5FEC9419DA6735CE359C73 + 787878C0B76FDF707B7B5B81814ABA4EB8F71E5639C3C6C036E077369BE2D5AB + 4524FC77BEFCB98688E0F2F212AF5FBFC6E7CF9FF1F5EBD7A8079478634C7C66 + 4141C48DEAED4C12269309168BEB0A46BB3072FDF2E1C307DCDFDFE3E7CF9F91 + F8FC62663011814AF16066186B61ADC56432C1CB97F3A8C402FDD2994BDFD75A + 8BF7EFDF633A9D8659B7B6C204220A08A052E189080C11B8C4CD746A5114BE33 + 12D0068DC56281ABAB2BACD7EB8A04285D36B7D6CA080FC032970E93E0993AF0 + AF0F66C26C368BAEB33241A1639BF0147092D8D36141800840545586B9E21711 + F00EF5823E8D5D90668C63384CD82509B6F5031976BA0D0DA90484B94E505F62 + 84C3A813F632A17FD641AF3C0C18241C9AA25FBB479FE4379D578C9ADBA82BC8 + 5127EC948466B118181328CF36F7430FD47D05CDA41D2809FDB0146D5EE31E49 + E87E185D9784DC3A0CD244B625870F80431F4C249F6E1D8824164DBA3CFB752F + 71D0706863D2E82CEDD70955F7B24F01945E8382C3AEF2E140AC437B00352849 + D855401E15E32E3864CE65C75DE7F4FE7518284406104049630095F7628C70D8 + 0507ED31D31EA32EC3A1C944E656629484C324A1FB5569ED8E6B538E03C831EE + 9F41EE3703D2FBEF6A3AB3FB7848241D0FA0A4C280E41F60B826B2296F3A5A07 + 601829F77A9F5280B83CED5EEBB7727C8E24887A8CD4713D500FA0301664079D + 4F684B09543A5AA9150EDD273EF80A6A1E192229E13A50384845D95B15016AB2 + 04D19474975CEF93D7AB6BBA069B681D03A87D7E82843670A0B6C24D1549D799 + A03484A089C0BC0B0EFD760A6372250551128329DBB738E124B75928E30EA46A + 5B7BC1148AB0682EC535FA09D27F6CD425814025AF828214F131D80812D1FDE0 + 49841AC2E9D14F383EA9223D41475BB295F597A8AC722164EE432FE09043A2BA + 26BC110EFD36914FFB1472EB40C3F5156CEE4905D799349150BA9BDD8E22938F + D0547B9036B7B98F7E82EC54F036B807042F1EA43E630C9EFA125448966AE7D1 + 4F38309FD04FA528ADD601B0BA8B50107F02950E8220DF6BA9FBBE0221A5D734 + 84D6C2EC0807B43081069652B06A0D447581A4369D00893ED41DD4FFCF234989 + 3FB9492F8A0C55124ACF31EDA32220462C5E7675782F712B84401F55686AF113 + 647031C420AD43DD57B0549A03EF3DD2DA00C4DDF1FA54774834515690DDDBC7 + D897F84132784B8519511204C9637C4A7C3F02289D7DE67AA27570A5F99357C8 + 761D0EFB2D9CADB7A8484A3295CAA3DBA632BD7FBE3D6AB50A7560CABD0FFB2C + B567CFF95411EA99DB2C1591AFF628A41256D7E1905A75506BF0AEB8CDD41345 + 788275901834250F5157BBE457F747551234E95AD309038B9F2B8A5168F04CB0 + EA4B87000ABDD826A03D98A29837C937AA1D6028FDB41A35669B51D61D64270C + BA1F4637EDAD949F6171E02612FDEE6AB5BB5CE4D4D1D1ED1DBCF3ABDEBE4774 + D0D601DDDF3F61DF240E6AFF849398A089C8AE07504FF767AD76AC0CCA44B64D + E6E82760EF0674D49B28B2BE4236C082EBF984E18E416D36A52D7BF5CED671F3 + EA51310E8C09D55DBB07DCC778D49E2A2970EA4F55BA7EB8C5603DC6676C593C + 402648AE44A0CD4EE80D1C5A97FF346A52E42D3BDD66C018409D621D0400671B + B0741D0E791BD2C14C304430651E6E32B1787C64743FC70838276036F0DE55CC + 636042D9DACF65CCCCD9F1A200633A9D60B3D97632BBA487E63E3EFC17B0CF7A + 34A8AF4084A55482E5099AE9344D661009E6F32B586B4F3E4AF96F468CE18C58 + C1E36A0D220B263D26D18288C1E5518896099575418901E1B988E0FAFA25D6EB + 753C91376D59793442FF902508FFA7283C7E3D3C0429300C5F0A41D0138C5093 + 245865001B132522E4E30DB47AE39C873136D6F3BD7347B3407668E8B340AD9C + 7DE73D8AC2A128C291CA4C5C3946D9032011087C39F965192E1C2689F8306780 + B6B5E839D22E3B53FA1CE6E9ACBA2656D78365D333B28174DEB456E0191CD74A + DA20FE79DF6F6280F781D09C017986E6B976FADC4734A70A93D2F1F4BBBD2FCF + C4158028DC5B63384B37714C42EA442B03FCB31820991EF97D7A217F2FE6404F + 5DA1A7DA8300620038F51372C7E82904BCF77149D089AFF7FB74C18E048A615D + F263E05CF5DC5891B0E0C9B902D61883D56A858B8BCB526D08EA2B6080331DAB + DEF01DBF8B116C0C8408208E7E0111C1391769D9AC57B0D604263033EEEF9778 + F1E20A88EB2193F897FC04F1E92F4C4146FF98E12400C281010486A3A403BCF7 + 58AF1EE1FD1697970B5822C2C5C505BCF7B8BBFB1700309D5D649AB55C27D7B8 + 6BEFE14D5FED337E7E16E8460044210EF20CB000CE7B6CD62B6C362B3033AEAF + AF319FCFF13FC7D04D1EB68754470000000049454E44AE426082 + } + ClientHeight = 134 + ClientWidth = 67 + Constraints.MinHeight = 134 + TabOrder = 2 + end + end + object JButton1: TJButton + Left = 392 + Height = 67 + Top = 360 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = 'JButton1' + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + AutoSize = True + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 2 + OnClick = JButton1Click + end + object JButton14: TJButton + Left = 392 + Height = 67 + Top = 208 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = 'JButton13' + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + ClientHeight = 67 + ClientWidth = 67 + Constraints.MaxHeight = 67 + Constraints.MaxWidth = 67 + TabOrder = 3 + end + object PanelNumInferior: TPanel + AnchorSideLeft.Control = PanelNumCentral + AnchorSideTop.Control = PanelNumCentral + AnchorSideTop.Side = asrBottom + Left = 73 + Height = 67 + Top = 389 + Width = 201 + AutoSize = True + BevelOuter = bvNone + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 10 + ClientHeight = 67 + ClientWidth = 201 + TabOrder = 4 + object JButton15: TJButton + Left = 0 + Height = 67 + Top = 0 + Width = 134 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 132 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = '0' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 132 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869632D08000089504E47 + 0D0A1A0A0000000D494844520000008400000041080600000010610CA0000000 + 06624B474400FF00FF00FFA0BDA793000000097048597300000B1300000B1301 + 009A9C180000000774494D4507DD01120F210AC212A835000000197445587443 + 6F6D6D656E74004372656174656420776974682047494D5057810E1700000795 + 4944415478DAED5D5D6F133B103D337613687AAB202190F80108F8FFBF8347DE + 78E00178808BD4D0E6E6633D731FBCF67A37DE366DA14D1D8F1435DD7C7BCE9E + 3933F67A48BD8188B0DD6EB1582C7071B1C06AB5828883730E22025585AAE2A1 + 2D7C2611C563E9FDBBBC66ECF1E1F1DC6B6E7AFC36DFF3A1C75144202270CEC1 + 1883F97C8E57AF5EE1ECECACFBCE22A24484C562811F3F7EA2690208FC5FE79A + F8260F058AF423883433B8FB3922E7C4CEF9DD7BEF3A9700E89D0073A8800827 + 76D334AD5FFD0D00DEBC79830F1F3E4055618908979797F8F1E35F103188240E + 98FF8D14811098E2214D240CAE5CE3BCF1C77320BB8FC39F22200233344D136F + 29F37FFEFC192282F7EFDFC3368DC3C5C56F4C2613344DD3FBB1FE3E0160002E + BE798E9EFFF600F41D2AA3CE09E16FEC983F1EDE4FB2ACE37FE23860AE0B5387 + 6643306CB7DB1E4B10118C31F8F6ED1B5EBF7E0DBBD96C608C010030338808CC + 1C59A1BB9938B0E1C70F434800CBDF00C675C0F3F4BFEB5C91D4A19209194390 + E8C8FB6BF637A527479E95F42042450A861410AA0A630C8CF1BEFDFEFD3BEC76 + BB8907983982434406C0E840330444FAFFD0FE143886EFBD4BDB9A794DF758EE + 6CDF3764E49EBB4F18792CF138F48B73AE0786A669A27F535B2C16B0AA140131 + 746ED3340080E9748AB3B319A6D349F6ECB92E8E3EF6E08C89CA6331E71CAEAE + AEF0F5EB57FCFCF9B3172A423408442022B001256C0C6C06EDD3E9042F5ECCAF + A5CE6A876BAA8AD3D353BC7CF9129F3E7DC2972F5FA26E084030C6C46316E4C3 + 8069236FCA1027272798CFCF0FEECCAFB6BFA5E1F1DDBB77B8BCBCC4AF5FBF22 + 10D21B33FBB41344E0569D196B239D9C9E3E8F826B2C4E577B0AA0F0BEB3D6E2 + EDDBB7F8F8F1238808D6DA1E2088C847094AC4A22102B7B16532B1681AA9CC50 + 50F898CFE798CD6658AFD73D66083EB6E9B91F4021002C735B9C52682586628C + 99309D4E63F93A002284179B8B39CC0CA63465AB0359064300440C6B2D6C220D + 527D68C784089227A755BC6A4F1A12B19694FA3A95047C8D14A9E35770E69102 + 21CD22B90ECF7102220790D190314635D5CA668AEB0141E9F4770D1F25A59E43 + 1D919ABD8919FC5473054439A2D244600CE777B269679E5AEA509692768E6517 + 7B6419D54AB5B170B13743545159A68E4845E52DB28C2A2A4BD21061A5D8AD45 + 25B5BCE0C15419A29C547377C558CA127B308454515990A80C6C9F4E68DD22ED + 4CF9A25A1969677E4D69CD328E3360ECA49DED3CE69EA232524C65889244E52E + 48F6295DD7B4B3480D918ACB7C96A11E2014DDAE0320D4D275591AA2BB226F58 + 872022586D9FA4A208F743F1A22EAE3D3EB3C3B0D05D3769E26C67B5326B11C3 + 1A0411726B2AD153A269EE5AAD0451D989C8DDB4B32D4CA9AF6702AA50E54E8D + C6BD196AC8284F54E64F72AB9A5EB1A5F12F81AA7E28D2BACAF370628B886029 + C884001F1A62A002A24015B193768E17A6DAECC24F6CD599CE12C30645005026 + 64B4CFD2480D0411F5BA813A44552B010C6D8921008310B38B9050D8FE93F560 + B7C6A9F627D3CE0E04DEDFDC6519C30A655F7D4A7BBC82A42C51E9F70D235210 + F5E737ED58BE5A4565E9E9A7F6EA115D614AFB12A1BB16A35B50518565315000 + 4060F65781EFFA956095C294280390AE0E41E905A17528CB6186EE84CF868C70 + 1D8EAA8BCEAFBAF23884657AC287FFB996A5AB0D16C8DC140FA48E57516123B7 + 8C6ECF15537E3BA12A2A4B1395F91082FCF4F7D893AB95232AD3EDABFB61A36E + 1872C4E0D05EC5325805441594FB6B886AE5A69CC36B3B6FB53F442D5F97252C + AFBB72CBE65C1FF6A9F4552CA959465159866786D001E1464030114CBBD5EDC9 + 89C572B9425D0F5156A6E19C82D940C4F5C2850744BB5282C326E8490F058031 + 999C60B3D9D6FDAE0BC82A8C31585EFDE74F7C0EFD0FFA5D815889E2E6E79CF4 + 51F01B622BCECE66B0D63E5A9BC66AF7074200838862B95A83C88229EC736D41 + C4606E1982096D37BE7E87156A8FAB2ACECFFFC17ABD8EAD796E169F0FC926B9 + CF3C36361B5BBFD2AD9B6C1AC1EFAB2BCF0E86212D39F8B92C7FE90533C10630 + B0319129FCB4A8415852E79CC0188F24BFFE12ED351C7DD6D0B09CFB1186E22E + FDAF9E7C0BA64CAFB3D82AABBDEF9CA0697CCF2D26EEA59B028054A190961400 + 4B84B67906E2C1140CA14542E8F1E892DE9D3B8078A0CE3BF76D7E76E84D576F + 0B8874956CF449F48DAF4686E67A0062035722F2CDD8E2723AF23DB79883CA0C + 1B5B86C6ADFE035330A42163A829C636B2FA1B8595B1EF7017E78EEDD9F8042A + 4CFD31688140ED63DD7C85C9F2B648BBBEB26D734944B0C674FA41D523256D9A + 12C090EBEAFB7883A87B3E761C5AE226A6F3CBE57887D1BBD6940AA801E0421D + 82625FA65C98109118930E8929F32183EE3490258385886038840F03E7A80708 + 6D59C5B906D61883D56A8567CF4E912EBBEFDA2B8D37693DB41F8D943AD3D83A + F6BA847A4B06071BE3057F5B790E6316BAFB02C066BD82B5C60382997179B9C0 + F3E733742BAEA5A7580904E20369D09A3A3508C414003768999B2E632E0D1A04 + 40D98381C070D4690611C17AB584C816A7A77390AAAA8860B95C62B95C020026 + D3679D2A8D7A62AC896B2E66532E31FC63437EFF16CBC753BB482FC15011882A + C4396CB70DD6EB15369B159819B3D90CE7E7E7F81F81DEAF2E0A319539000000 + 0049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 134 + Constraints.MinWidth = 134 + TabOrder = 0 + end + object JButton16: TJButton + Left = 134 + Height = 67 + Top = 0 + Width = 67 + LCaption.Left = 1 + LCaption.Height = 65 + LCaption.Top = 1 + LCaption.Width = 65 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.AutoSize = False + LCaption.Caption = ',' + LCaption.Font.Height = -21 + LCaption.Font.Style = [fsBold] + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 65 + Image.Top = 1 + Image.Width = 65 + Image.Align = alClient + Image.Picture.Data = { + 1754506F727461626C654E6574776F726B477261706869631F07000089504E47 + 0D0A1A0A0000000D49484452000000410000004108060000008EF7C945000000 + 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 + 7048597300000B1300000B1301009A9C180000000774494D4507DD010B0B262B + EB229E650000001974455874436F6D6D656E7400437265617465642077697468 + 2047494D5057810E170000067A4944415478DAE55BDB6EDB38103D33A4ED6CE2 + 062E50B4403FA068FBFFDFD2B73EF4A1ED43B25DC475B2BE9033FB400D45C972 + 7C89B3851402461C41B6358767AE9C214D0B4484CD6683F97C8EBBBB3996CB25 + 4422628C1011A82A5415C72E227AF49ABDEFBAB6EBF3872E5585884044106384 + 730EB3D90C6FDFBEC5743AAD7F43449488309FCF7173738B104CF0F437C690BF + E45820D2F3D31EE1EB7BF60172ECB20D0C2154B2A41700BC7FFF1E9F3F7F86AA + C21311168B056E6EFE061183484044500592BC948537461CC78452487BAF070B + 7E2A08C68010427E95ACFEFAF52B44049F3E7D820F21E2EEEE37C6E33142088D + 874AEF0900038899624F518B2603900131953CC76A03B0D96C1A6C202238E7F0 + E3C70FBC7BF70E7EBD5EC33907006066101198390B5BBF5C16FE78B5302101D5 + 262B92E05ADC43F9BBCBF7C7AA4109400982AAC23907E7923C3F7FFE84DF6CD6 + F90233674044A405460D94217DC8EED9F796BBDECD8CF3D803D3F91863038010 + 4296A95CF3F91C5E953208E50EAB2A42080080C96482E9F40A93C9383FD8293B + B4CF6B9C6BC518717F7F8FEFDFBFE3F6F6B6A106C674DB7011813764D839F80E + FD9D4CC678FD7A96057FCE873FD752555C5E5EE2CD9B37F8F2E50BBE7DFB96ED + 8009EF9CCBD73C2851DC99DD2E98301A8D309B5D3774B40FABB42F1F3F7EC462 + B1C0AF5FBFB2F0E58B99C14404AAE8C1CC70DEC37B8FD1688457AFA6D98825F9 + B5372F7B5EEF3D3E7CF880F1789C76DDFB0608449434802A83A7AA7044E04A6F + C6638F10A4370CD8A51AB3D90C57575758AD560D06985CBEF4D6068400F0CC55 + C0A478A20DFCE38B9930994C72E86C2098EAF82E7DAAF424C3D3632240152062 + F84ACDEB2010DB4CD8725FC5CD65FCDF4318727C53CA57AA383F626331A46582 + B7E31C227A0C040C0E842E5076AAC32E4A0D91118F8340652ADD6FD530EAB7F3 + 86FD20540C5095011846D719F61B23FC6114EAB78BDCE5150EF00EC35ABB54E1 + 60260CC130962EB16D1C0F00A1EF8651ABA8918E378C560E4D00F69B0929006E + D6314B361CC004E9BD6134269749D3112E720821B46E155A5EA077A08E68B156 + 91FD4CC854EABF61DC06868E5507EDB54DD817F4793B0AA02CAAB6841F42D85C + 9FA6B5E3042282573B061385168723766234B42C724F9C60A576A9FE77398B1C + 460A8DCE1881085D35C6665C5DFAD9FE1AC6DA106EBBC82A58D2145702AA50E5 + DAA292F9D8A118C6EECDF4AAE5C993E6BF041A903DA8A3DE76F24444F075DF84 + 36938601659026589B08BB8325EB2340B2057D2FAD994A50169A3AD4A1BA4B8B + 361A114D7680FA9F3B24F5A69C119B97A8D5A33C866BD88401661085E04946AE + BD433B526C5A50417DD2DB77C3987AAF8814447C482AAD83338C757188B6324A + 5F5C2F6EAE5BF8FA6F1C9380CCE9747A5B168257B2549301481D2710EFCDBEFA + 152C5165183BD4C1CE5654631678A0B6B175F052FFCF7D0E89CF5571F2FB6300 + 198051EC2AB11D58594AAD3AC3308CBBD36BBC9CB3C8B25DB9A9122FA849C398 + 5D468EB65E1408CD8CF2E86AF330DC63FB2CF2A8FE84FE87CEFAE80994EF12D7 + FA1853642503F00E8901D6CDBF17042682AB5A5E47238F878725FA5E71560562 + 54303B88C4862A2410AA4A03574E938B790080311E8FB05E6F7AD9DF6C532E0F + F7FFA60D66EBE597A6AD50A2DCE0CDC54C406A80564CA757F0DE9F3CFBF4A784 + 370044140FCB15883C98ACAFD98388C15C318109D5145C732A84AAEBAA8AEBEB + 5758AD567984A6A31A7B74BCFE7CFA5FFF4E0882DFF7F789058E21150952BE94 + 8E169809DE0060E7322352BAE960E5B61805CEF99C824A8C4743A01D991C1EB9 + 768AE2AB2AA20842880821CD403171C3350A00528542AACD073C11AAE107E48B + 2500D6EE6F835FB118023B358D3D3B00457C6F4C35B96CD9801855F7702EB551 + 9A8162AE47F352E3A30D8326414B004CDF4E79F8F667CE3D5365937789EEAE53 + FD44AA7AA3220FC27AE76A7BA09ABEA01CF43000E4490028DA93B1CF5D3449A5 + 34DE32E8F5ACA502EA00448B1328CF0C75A980885475FB53BD033D9F2DD80106 + 11C1B1F52638C4480D1054D3494B8C01DE3987E572898B8B4B9425F67AF4A79E + 8E7BF22E757CC77301C1CE4189802AEAB5DFB229590058AF96F0DE251098198B + C51C7FFD7585BAD25CD3BFC213C4A73F30258EFE6F8E9300282700088C48B50D + 1011AC960F10D9E0F27296A6E62F2E2E2022B8BBFB0700309E5C149635D106A4 + 9D67FB872658BB77FCFC10D81103514A03840156208A60BD5A62BD5E8299717D + 7D8DE9748AFF00ACEF074C5F4012D40000000049454E44AE426082 + } + ClientHeight = 67 + ClientWidth = 67 + TabOrder = 1 + end + end + object JButton17: TJButton + Left = 394 + Height = 65 + Top = 280 + Width = 65 + LCaption.Left = 1 + LCaption.Height = 63 + LCaption.Top = 1 + LCaption.Width = 63 + LCaption.ShadowColor = clWhite + LCaption.ShadowColor2 = clNone + LCaption.LabelStyle = lsCustom + LCaption.Align = alClient + LCaption.Alignment = taCenter + LCaption.Caption = 'JButton17' + LCaption.Layout = tlCenter + LCaption.ParentColor = False + LCaption.ParentFont = False + Image.Left = 1 + Image.Height = 63 + Image.Top = 1 + Image.Width = 63 + Image.Align = alClient + ClientHeight = 65 + ClientWidth = 65 + TabOrder = 5 + end + object JLabel1: TJLabel + Left = 56 + Height = 40 + Top = 32 + Width = 203 + ShadowColor = clWhite + ShadowColor2 = clNone + LabelStyle = lsCustom + AutoSize = False + Caption = 'JLabel1' + ParentColor = False + end + object JLabel2: TJLabel + Left = 272 + Height = 40 + Top = 32 + Width = 203 + ShadowColor = clWhite + ShadowColor2 = clNone + LabelStyle = lsCustom + Alignment = taCenter + AutoSize = False + Caption = 'JLabel2' + Color = clWhite + ParentColor = False + Transparent = False + end + object JLabel3: TJLabel + Left = 496 + Height = 40 + Top = 32 + Width = 203 + ShadowColor = clWhite + ShadowColor2 = clNone + LabelStyle = lsCustom + Alignment = taRightJustify + AutoSize = False + Caption = 'JLabel3' + ParentColor = False + end + object JLabel4: TJLabel + Left = 56 + Height = 40 + Top = 80 + Width = 203 + ShadowColor = clWhite + ShadowColor2 = clNone + LabelStyle = lsCustom + AutoSize = False + Caption = 'JLabel4' + Layout = tlCenter + ParentColor = False + end + object JLabel5: TJLabel + Left = 272 + Height = 40 + Top = 80 + Width = 203 + ShadowColor = clWhite + ShadowColor2 = clNone + LabelStyle = lsCustom + Alignment = taCenter + AutoSize = False + Caption = 'JLabel5' + Color = clWhite + Layout = tlCenter + ParentColor = False + Transparent = False + end + object JLabel6: TJLabel + Left = 496 + Height = 40 + Top = 80 + Width = 203 + ShadowColor = clWhite + ShadowColor2 = clNone + LabelStyle = lsCustom + Alignment = taRightJustify + AutoSize = False + Caption = 'JLabel6' + Layout = tlCenter + ParentColor = False + end + object JLabel7: TJLabel + Left = 56 + Height = 40 + Top = 128 + Width = 203 + ShadowColor = clWhite + ShadowColor2 = clNone + LabelStyle = lsCustom + AutoSize = False + Caption = 'JLabel7' + Layout = tlBottom + ParentColor = False + end + object JLabel8: TJLabel + Left = 272 + Height = 40 + Top = 128 + Width = 203 + ShadowColor = clWhite + ShadowColor2 = clNone + LabelStyle = lsCustom + Alignment = taCenter + AutoSize = False + Caption = 'JLabel8' + Color = clWhite + Layout = tlBottom + ParentColor = False + Transparent = False + end + object JLabel9: TJLabel + Left = 496 + Height = 40 + Top = 128 + Width = 203 + ShadowColor = clWhite + ShadowColor2 = clNone + LabelStyle = lsCustom + Alignment = taRightJustify + AutoSize = False + Caption = 'JLabel9' + Layout = tlBottom + ParentColor = False + end + object JLabel10: TJLabel + Left = 512 + Height = 25 + Top = 208 + Width = 82 + ShadowColor = clBtnHighlight + ShadowColor2 = clBtnShadow + LabelStyle = lsRaised + Caption = 'lsRaised' + Font.Height = -21 + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object JLabel13: TJLabel + Left = 512 + Height = 25 + Top = 240 + Width = 108 + ShadowColor = clBtnShadow + ShadowColor2 = clBtnHighlight + LabelStyle = lsRecessed + Caption = 'lsRecessed' + Font.Height = -21 + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object JLabel14: TJLabel + Left = 512 + Height = 25 + Top = 272 + Width = 95 + ShadowColor = clBtnHighlight + ShadowColor2 = clNone + LabelStyle = lsShadow + Caption = 'lsShadow' + Font.Height = -21 + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object JLabel15: TJLabel + Left = 512 + Height = 25 + Top = 304 + Width = 107 + ShadowColor = clNone + ShadowColor2 = clBtnHighlight + LabelStyle = lsShadow2 + Caption = 'lsShadow2' + Font.Height = -21 + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object JLabel16: TJLabel + Left = 512 + Height = 25 + Top = 336 + Width = 228 + ShadowColor = clYellow + ShadowColor2 = clRed + LabelStyle = lsCustom + Caption = 'lsRaised custom colors' + Font.Height = -21 + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object JLabel17: TJLabel + Left = 512 + Height = 25 + Top = 368 + Width = 228 + ShadowColor = clWhite + ShadowColor2 = clWhite + LabelStyle = lsCustom + Caption = 'lsRaised custom colors' + Font.Height = -21 + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object JLabel18: TJLabel + Left = 512 + Height = 25 + Top = 400 + Width = 228 + ShadowColor = clRed + ShadowColor2 = clRed + LabelStyle = lsCustom + Caption = 'lsRaised custom colors' + Font.Color = clWhite + Font.Height = -21 + Font.Style = [fsBold] + ParentColor = False + ParentFont = False + end + object JLabel11: TJLabel + Left = 24 + Height = 168 + Top = 472 + Width = 360 + ShadowColor = clWhite + ShadowColor2 = clNone + LabelStyle = lsCustom + Alignment = taCenter + AutoSize = False + Caption = 'taCenter'#10'Eum assum oblique ut, ceteros nusquam dignissim nec te. Nec quaeque fabellas expetenda cu, pro ad nulla soluta, at sed qualisque honestatis. Ex sit elit rationibus posidonium, in justo ocurreret eam. Ne vel porro commune, mel discere legendos te, ad nonumy explicari scriptorem vim. Saepe liberavisse intellegebat ut vis, eum cu dicat exerci dissentiet. Aliquid meliore reprimique ne per, eam alterum tacimates ei.' + ParentColor = False + WordWrap = True + end + object JLabel12: TJLabel + Left = 392 + Height = 168 + Top = 472 + Width = 360 + ShadowColor = clWhite + ShadowColor2 = clNone + LabelStyle = lsCustom + AutoSize = False + Caption = 'taLeftJustify'#10'Eum assum oblique ut, ceteros nusquam dignissim nec te. Nec quaeque fabellas expetenda cu, pro ad nulla soluta, at sed qualisque honestatis. Ex sit elit rationibus posidonium, in justo ocurreret eam. Ne vel porro commune, mel discere legendos te, ad nonumy explicari scriptorem vim. Saepe liberavisse intellegebat ut vis, eum cu dicat exerci dissentiet. Aliquid meliore reprimique ne per, eam alterum tacimates ei.' + ParentColor = False + WordWrap = True + end + object JLabel19: TJLabel + Left = 512 + Height = 17 + Top = 434 + Width = 168 + ShadowColor = clBtnHighlight + ShadowColor2 = clBtnShadow + LabelStyle = lsRaised + Caption = '鋱 銈銙鉾 褅褌諃 飹勫嫢 黰戄' + ParentColor = False + end +end diff --git a/components/jujiboutils/examples/jlabel_button_test/principal.pas b/components/jujiboutils/examples/jlabel_button_test/principal.pas new file mode 100644 index 000000000..871a9ff85 --- /dev/null +++ b/components/jujiboutils/examples/jlabel_button_test/principal.pas @@ -0,0 +1,77 @@ +unit principal; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, + StdCtrls, JButton, JLabel; + +type + + { TForm1 } + + TForm1 = class(TForm) + JButton1: TJButton; + JButton10: TJButton; + JButton11: TJButton; + JButton12: TJButton; + JButton14: TJButton; + JButton15: TJButton; + JButton16: TJButton; + JButton17: TJButton; + JButton18: TJButton; + JButton19: TJButton; + JButton20: TJButton; + JButton21: TJButton; + JButton22: TJButton; + JButton23: TJButton; + JButton24: TJButton; + JButton8: TJButton; + JButton9: TJButton; + JLabel1: TJLabel; + JLabel10: TJLabel; + JLabel11: TJLabel; + JLabel12: TJLabel; + JLabel13: TJLabel; + JLabel14: TJLabel; + JLabel15: TJLabel; + JLabel16: TJLabel; + JLabel17: TJLabel; + JLabel18: TJLabel; + JLabel19: TJLabel; + JLabel2: TJLabel; + JLabel3: TJLabel; + JLabel4: TJLabel; + JLabel5: TJLabel; + JLabel6: TJLabel; + JLabel7: TJLabel; + JLabel8: TJLabel; + JLabel9: TJLabel; + PanelNumCentral: TPanel; + PanelNumDerecho: TPanel; + PanelNumInferior: TPanel; + procedure JButton1Click(Sender: TObject); + private + { private declarations } + public + { public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.lfm} + +{ TForm1 } + +procedure TForm1.JButton1Click(Sender: TObject); +begin + ShowMessage('Hello World!'); +end; + +end. + diff --git a/components/jujiboutils/examples/testgridctr/main.lfm b/components/jujiboutils/examples/testgridctr/main.lfm index d8d298dd7..d6e65ce44 100644 --- a/components/jujiboutils/examples/testgridctr/main.lfm +++ b/components/jujiboutils/examples/testgridctr/main.lfm @@ -7,7 +7,7 @@ object Form1: TForm1 ClientHeight = 347 ClientWidth = 419 OnCreate = FormCreate - LCLVersion = '1.1' + LCLVersion = '0.9.31' object DBNavigator1: TDBNavigator Left = 8 Height = 25 @@ -29,54 +29,57 @@ object Form1: TForm1 object JDBGridControl1: TJDBGridControl Left = 8 Height = 192 - Top = 96 + Top = 112 Width = 392 - AlternateColor = clMoneyGreen - AutoFillColumns = True Color = clWindow Columns = < item Title.Caption = 'ID' - Width = 121 + Title.PrefixOption = poNone FieldName = 'ID' - Decimals = 0 - MaxLength = 0 end item Title.Caption = 'DATE' - Width = 121 + Title.PrefixOption = poNone FieldName = 'DATE' - DisplayFormat = 'dd/mm/yyyy' - Decimals = 0 - MaxLength = 0 end item Title.Caption = 'QUANTITY' - Width = 121 + Title.PrefixOption = poNone + Width = 150 FieldName = 'QUANTITY' DisplayFormat = '#,0.00000€' - Decimals = 0 - MaxLength = 0 end> DataSource = Datasource1 TabOrder = 1 end - object Label1: TLabel - Left = 13 - Height = 17 - Top = 296 - Width = 391 - Caption = 'Press Alt+Down arrow key while editing date to show the calendar' - ParentColor = False + object MemDataset1: TMemDataset + Active = True + FieldDefs = < + item + Name = 'ID' + DataType = ftInteger + Precision = 0 + Size = 0 + end + item + Name = 'DATE' + DataType = ftDate + Precision = 0 + Size = 0 + end + item + Name = 'QUANTITY' + DataType = ftFloat + Precision = 0 + Size = 0 + end> + left = 232 + top = 8 end object Datasource1: TDatasource - DataSet = BufDataset1 + DataSet = MemDataset1 left = 324 top = 7 end - object BufDataset1: TBufDataset - FieldDefs = <> - left = 232 - top = 7 - end end diff --git a/components/jujiboutils/examples/testgridctr/main.pas b/components/jujiboutils/examples/testgridctr/main.pas index 0187ceaa4..ba46fe565 100644 --- a/components/jujiboutils/examples/testgridctr/main.pas +++ b/components/jujiboutils/examples/testgridctr/main.pas @@ -5,19 +5,18 @@ unit main; interface uses - Classes, SysUtils, db, BufDataset, FileUtil, Forms, Controls, Graphics, - Dialogs, DbCtrls, DBGrids, StdCtrls, JDBGridControl; + Classes, SysUtils, memds, db, FileUtil, Forms, Controls, Graphics, Dialogs, + DbCtrls, DBGrids, JDBGridControl; type { TForm1 } TForm1 = class(TForm) - BufDataset1: TBufDataset; Datasource1: TDatasource; DBNavigator1: TDBNavigator; JDBGridControl1: TJDBGridControl; - Label1: TLabel; + MemDataset1: TMemDataset; procedure FormCreate(Sender: TObject); private { private declarations } @@ -38,24 +37,16 @@ procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin - // Create BufDataset - with BufDataset1.FieldDefs do - begin - Add('ID', ftInteger, 0, False); - Add('DATE', ftDate, 0, False); - Add('QUANTITY', ftCurrency, 0, False); - end; - BufDataset1.CreateDataset; - // populate + // populate the memDataset for i := 1 to 10 do begin - BufDataset1.Append; - BufDataset1.FieldByName('ID').AsInteger := i; - BufDataset1.FieldByName('DATE').AsDateTime := Now; - BufDataset1.FieldByName('QUANTITY').AsFloat := i * i * i; - BufDataset1.Post; + MemDataset1.Append; + MemDataset1.FieldByName('ID').AsInteger := i; + MemDataset1.FieldByName('DATE').AsDateTime := Now; + MemDataset1.FieldByName('QUANTITY').AsFloat := i * i * i; + MemDataset1.Post; end; - BufDataset1.First; + MemDataset1.First; end; end. diff --git a/components/jujiboutils/examples/testgridctr/testgridctr.lpi b/components/jujiboutils/examples/testgridctr/testgridctr.lpi index dd6f3d835..b21c22eda 100644 --- a/components/jujiboutils/examples/testgridctr/testgridctr.lpi +++ b/components/jujiboutils/examples/testgridctr/testgridctr.lpi @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?> +<?xml version="1.0"?> <CONFIG> <ProjectOptions> <Version Value="9"/> @@ -25,9 +25,10 @@ <RunParams> <local> <FormatVersion Value="1"/> + <LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> - <RequiredPackages Count="3"> + <RequiredPackages Count="4"> <Item1> <PackageName Value="jujiboutils"/> </Item1> @@ -35,8 +36,11 @@ <PackageName Value="FCL"/> </Item2> <Item3> - <PackageName Value="LCL"/> + <PackageName Value="MemDSLaz"/> </Item3> + <Item4> + <PackageName Value="LCL"/> + </Item4> </RequiredPackages> <Units Count="2"> <Unit0> @@ -48,14 +52,13 @@ <Filename Value="main.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="Form1"/> - <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="main"/> </Unit1> </Units> </ProjectOptions> <CompilerOptions> - <Version Value="11"/> + <Version Value="10"/> <Target> <Filename Value="testgridctr"/> </Target> @@ -64,6 +67,10 @@ <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Linking> + <Debugging> + <GenerateDebugInfo Value="True"/> + <DebugInfoType Value="dsAuto"/> + </Debugging> <Options> <Win32> <GraphicApplication Value="True"/> diff --git a/components/jujiboutils/examples/testgridctr/testgridctr.lpr b/components/jujiboutils/examples/testgridctr/testgridctr.lpr index a81747d0e..8df3973cb 100644 --- a/components/jujiboutils/examples/testgridctr/testgridctr.lpr +++ b/components/jujiboutils/examples/testgridctr/testgridctr.lpr @@ -7,7 +7,7 @@ uses cthreads, {$ENDIF}clocale,{$ENDIF} Interfaces, // this includes the LCL widgetset - Forms, main + Forms, memdslaz, main { you can add units after this }; {$R *.res} diff --git a/components/jujiboutils/jujiboutils.lpk b/components/jujiboutils/jujiboutils.lpk index 7a8a6167a..2d6447c46 100644 --- a/components/jujiboutils/jujiboutils.lpk +++ b/components/jujiboutils/jujiboutils.lpk @@ -21,7 +21,7 @@ different kinds of data, floats, dates, etc. while working with db and non db controls."/> <License Value="LGPL with link exception. Read files license-jujiboutils and COPYING.LGPL"/> <Version Major="1"/> - <Files Count="19"> + <Files Count="23"> <Item1> <Filename Value="src/jcontrolutils.pas"/> <UnitName Value="jcontrolutils"/> @@ -114,6 +114,25 @@ db and non db controls."/> <HasRegisterProc Value="True"/> <UnitName Value="JDBImageBlob"/> </Item19> + <Item20> + <Filename Value="src/jlabel.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="JLabel"/> + </Item20> + <Item21> + <Filename Value="src/jdblabel.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="JDbLabel"/> + </Item21> + <Item22> + <Filename Value="src/jbutton.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="JButton"/> + </Item22> + <Item23> + <Filename Value="src/jdbutils.pas"/> + <UnitName Value="jdbutils"/> + </Item23> </Files> <i18n> <EnableI18N Value="True"/> diff --git a/components/jujiboutils/jujiboutils.pas b/components/jujiboutils/jujiboutils.pas index 37d1b0d1c..753e2013c 100644 --- a/components/jujiboutils/jujiboutils.pas +++ b/components/jujiboutils/jujiboutils.pas @@ -12,7 +12,7 @@ uses JLabeledIntegerEdit, JLabeledFloatEdit, JLabeledCurrencyEdit, JLabeledDateEdit, jdbgridutils, JLabeledTimeEdit, JDBLabeledTimeEdit, JLabeledDateTimeEdit, JDBLabeledDateTimeEdit, jinputconsts, JDbEnumCombo, - JDBImageBlob, LazarusPackageIntf; + JDBImageBlob, JLabel, JDbLabel, JButton, jdbutils, LazarusPackageIntf; implementation @@ -34,6 +34,9 @@ begin RegisterUnit('JDBLabeledDateTimeEdit', @JDBLabeledDateTimeEdit.Register); RegisterUnit('JDbEnumCombo', @JDbEnumCombo.Register); RegisterUnit('JDBImageBlob', @JDBImageBlob.Register); + RegisterUnit('JLabel', @JLabel.Register); + RegisterUnit('JDbLabel', @JDbLabel.Register); + RegisterUnit('JButton', @JButton.Register); end; initialization diff --git a/components/jujiboutils/src/jbutton.pas b/components/jujiboutils/src/jbutton.pas new file mode 100644 index 000000000..336b71b99 --- /dev/null +++ b/components/jujiboutils/src/jbutton.pas @@ -0,0 +1,181 @@ +{ TJButton + + Copyright (C) 2012 Julio Jiménez Borreguero + Contact: jujibo at gmail dot com + + This library is free software; you can redistribute it and/or modify it + under the same terms as the Lazarus Component Library (LCL) + + See the file license-jujiboutils.txt and COPYING.LGPL, included in this distribution, + for details about the license. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +} + +unit JButton; + +{$mode objfpc}{$H+} + + + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls, + JLabel; + +type + + { TJButton } + + TJButton = class(TCustomPanel) + private + FImage: TImage; + FJLabel: TJLabel; + //OldBevel: TPanelBevel; + { Private declarations } + protected + { Protected declarations } + procedure SetName(const Value: TComponentName); override; + procedure JLabel1MouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: integer); + procedure JLabel1MouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: integer); + procedure JLabel1MouseClick(Sender: TObject); + public + { Public declarations } + constructor Create(TheOwner: TComponent); override; + published + { Published declarations } + property LCaption: TJLabel read FJLabel; + property Image: TImage read FImage; + property Align; + property Alignment; + property Anchors; + property AutoSize; + property BorderSpacing; + property BevelInner; + property BevelOuter; + property BevelWidth; + property BidiMode; + property BorderWidth; + property BorderStyle; + property ChildSizing; + property ClientHeight; + property ClientWidth; + property Color; + property Constraints; + property DockSite; + property DragCursor; + property DragKind; + property DragMode; + property Enabled; + //property Font; + property FullRepaint; + property ParentBidiMode; + property ParentColor; + //property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property TabStop; + property UseDockManager default True; + property Visible; + property OnClick; + property OnContextPopup; + property OnDockDrop; + property OnDockOver; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDock; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnGetSiteInfo; + property OnGetDockCaption; + property OnMouseDown; + property OnMouseEnter; + property OnMouseLeave; + property OnMouseMove; + property OnMouseUp; + property OnResize; + property OnStartDock; + property OnStartDrag; + property OnUnDock; + end; + +procedure Register; + +implementation + +procedure Register; +begin + {$I jbutton_icon.lrs} + RegisterComponents('Jujibo', [TJButton]); +end; + +{ TJButton } + +procedure TJButton.SetName(const Value: TComponentName); +var + ChangeText: boolean; +begin + inherited SetName(Value); + if (csDesigning in ComponentState) and (FJLabel.Caption = FJLabel.Name) then + FJLabel.Caption := Value; +end; + +procedure TJButton.JLabel1MouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: integer); +begin + //OldBevel:= BevelOuter; + BevelOuter := bvLowered; +end; + +procedure TJButton.JLabel1MouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: integer); +begin + BevelOuter := bvRaised; //OldBevel; +end; + +procedure TJButton.JLabel1MouseClick(Sender: TObject); +begin + if Assigned(OnClick) then + Click; +end; + +constructor TJButton.Create(TheOwner: TComponent); +begin + inherited Create(TheOwner); + Width := 65; + Height := 65; + ControlStyle := ControlStyle - [csSetCaption]; // No caption + // Image + FImage := TImage.Create(Self); + FImage.Name := 'Image'; + FImage.Parent := Self; + FImage.SetSubComponent(True); + FImage.Align := alClient; + FImage.ControlStyle := FImage.ControlStyle + [csNoDesignSelectable] - [csSetCaption]; + // JLabel + FJLabel := TJLabel.Create(Self); + FJLabel.Name := 'JLabel'; + FJLabel.Parent := Self; + FJLabel.ParentFont := False; + FJLabel.SetSubComponent(True); + FJLabel.ControlStyle := FJLabel.ControlStyle + [csNoDesignSelectable] - + [csDoubleClicks]; + FJLabel.Alignment := taCenter; + FJLabel.Layout := tlCenter; + FJLabel.Align := alClient; + FJLabel.OnMouseDown := @JLabel1MouseDown; + FJLabel.OnMouseUp := @JLabel1MouseUp; + FJLabel.OnClick := @JLabel1MouseClick; +end; + +end. diff --git a/components/jujiboutils/src/jbutton_icon.lrs b/components/jujiboutils/src/jbutton_icon.lrs new file mode 100644 index 000000000..e3ff007d7 --- /dev/null +++ b/components/jujiboutils/src/jbutton_icon.lrs @@ -0,0 +1,24 @@ +LazarusResources.Add('TJButton','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147 + +#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#221#1#9#11 + +'%'#18'5'#3#141'%'#0#0#1#174'IDATH'#199#213#149'=L'#194'P'#20#133'O'#145#159 + +#7'F'#196#13'G'#18#23#226'`dR'#7'$,'#196'0'#0'N'#196#193#133#5#6'M'#156#202 + +#162'+'#16'L4'#152'0'#233#224#164#12#14','#174#150#154'4qdb1'#1'b"n'#148'8' + +#128'qx'#14#181#133#210#2#138'u'#224'$MoO'#127#190's'#219#230'>`'#214#197#200 + +#5#203#22#168'Q'#15#205#229#14#25#141#201#178#5'j'#132'X'#182'@y'#174#162#132 + +'5'#15#131#26#141#231#169#147#191'4_5'#158#6#16'?'#231#167#6#228'c+'#147#1'f' + +#226'0'#244'#'#235#0#156'J'#157#9'-'#129#16#130#163'r'#203'@'#192#130#212'A>' + +#184#8#175#215#7'Ql!'#19#234#225'X'#248'0'#6'`'#155#183#1#0'z'#189#30'D'#177 + +#5#151'k'#25#128#160#248#227#245'9'#25'`'#177#18#233'_'#174#1','#234#0#4#228 + +'j'#4#22'+'#140#1#204'9\J}'#218#148#246#229#132#7#0#176'{S'#159#0'x'#255'A'#7 + +'N'#251#200#219#239#226#30#196#239#223'4~4'#200#161#141'6'#240#180':'#25'P' + +#10#187#149'z'#255'AT'#207#21#6#0#220#138#31#219#224#16#179'GQB|`"T'#245#211 + +#201#163'"!t)'#165#148#2#210#150#16#186'J='#232#23#187'E'#149'/'#159#163#148 + +#170'F'#133'i'#24't'#181'E'#190#147'J'#186#220'$'#186#129'R$'#165':'#142#220 + +'F'#192's'#218')`'#210#190#2')'#215'o'#213'iu'#0#0#233#244#197'h'#192'_T'#185 + +'>'#129'?'#224#31#223#129#156#156'aF,'#30#3#29'2'#190'$'#176#158#236#251#213 + +' '#0' '#155'='#24#223#1#207#241#232#127'J}'#239#177#194#131'?'#219#147'6' + +#157#235#255'}E'#11#239#172#193#31#216'fT'#0')i'#197'0'#136#12#152'}}'#1'{' + +#10#254'd'#148#224'PU'#0#0#0#0'IEND'#174'B`'#130 +]); diff --git a/components/jujiboutils/src/jdbenumcombo.pas b/components/jujiboutils/src/jdbenumcombo.pas index 04b5c73cf..a134994b4 100644 --- a/components/jujiboutils/src/jdbenumcombo.pas +++ b/components/jujiboutils/src/jdbenumcombo.pas @@ -116,10 +116,13 @@ procedure Register; implementation +uses + jdbutils; + procedure Register; begin {$I jdbenumcombo_icon.lrs} - RegisterComponents('Data Controls', [TJDbEnumCombo]); + RegisterComponents('JujiboDB', [TJDbEnumCombo]); end; { TJDbEnumCombo } @@ -173,7 +176,7 @@ begin if Assigned(DataLinkField) then ItemIndex := DataLinkField.AsInteger else - ItemIndex:= -1; + ItemIndex := -1; end; procedure TJDbEnumCombo.Notification(AComponent: TComponent; Operation: TOperation); @@ -188,6 +191,8 @@ end; procedure TJDbEnumCombo.Change; begin + if not FieldIsEditable(Field) or ReadOnly then + exit; FDataLink.Edit; FDataLink.Modified; FDataLink.UpdateRecord; @@ -196,12 +201,15 @@ end; procedure TJDbEnumCombo.DropDown; begin - FDataLink.Edit; + if not FieldIsEditable(Field) or ReadOnly then + abort; inherited DropDown; end; procedure TJDbEnumCombo.UpdateData(Sender: TObject); begin + if not FieldIsEditable(Field) or ReadOnly then + exit; FDataLink.Field.AsInteger := ItemIndex; end; @@ -213,7 +221,7 @@ begin FDataLink.Control := Self; FDataLink.OnDataChange := @DataChange; FDataLink.OnUpdateData := @UpdateData; - Style:= csDropDownList; + Style := csDropDownList; end; destructor TJDbEnumCombo.Destroy; diff --git a/components/jujiboutils/src/jdbgridcontrol.pas b/components/jujiboutils/src/jdbgridcontrol.pas index c331373a2..d6bd903a1 100644 --- a/components/jujiboutils/src/jdbgridcontrol.pas +++ b/components/jujiboutils/src/jdbgridcontrol.pas @@ -93,7 +93,7 @@ implementation procedure Register; begin {$I jdbgridcontrol_icon.lrs} - RegisterComponents('Data Controls', [TJDBGridControl]); + RegisterComponents('JujiboDB', [TJDBGridControl]); end; function TJDBColumn.getDecimals: integer; diff --git a/components/jujiboutils/src/jdbimageblob.pas b/components/jujiboutils/src/jdbimageblob.pas index c6f9279d8..a8f768c19 100644 --- a/components/jujiboutils/src/jdbimageblob.pas +++ b/components/jujiboutils/src/jdbimageblob.pas @@ -93,7 +93,7 @@ implementation procedure Register; begin {$I jdbimageblob_icon.lrs} - RegisterComponents('Data Controls', [TJDBImageBlob]); + RegisterComponents('JujiboDB', [TJDBImageBlob]); end; { TJDBImageBlob } diff --git a/components/jujiboutils/src/jdblabel.pas b/components/jujiboutils/src/jdblabel.pas new file mode 100644 index 000000000..c5818c70e --- /dev/null +++ b/components/jujiboutils/src/jdblabel.pas @@ -0,0 +1,187 @@ +{ TJDbLabel + + Copyright (C) 2013 Julio Jiménez Borreguero + Contact: jujibo at gmail dot com + + This library is free software; you can redistribute it and/or modify it + under the same terms as the Lazarus Component Library (LCL) + + See the file license-jujiboutils.txt and COPYING.LGPL, included in this distribution, + for details about the license. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +} + +unit JDbLabel; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, + JLabel, DB, DBCtrls, LMessages; + +type + + { TJDbLabel } + + TJDbLabel = class(TJCustomLabel) + private + { Private declarations } + FDataLink: TFieldDataLink; + + procedure DataChange(Sender: TObject); + function GetDataField: string; + function GetDataSource: TDataSource; + function GetField: TField; + + procedure SetDataField(const Value: string); + procedure SetDataSource(Value: TDataSource); + procedure CMGetDataLink(var Message: TLMessage); message CM_GETDATALINK; + protected + { Protected declarations } + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure Loaded; override; + public + { Public declarations } + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Field: TField read GetField; + published + { Published declarations } + property DataField: string read GetDataField write SetDataField; + property DataSource: TDataSource read GetDataSource write SetDataSource; + + property ShadowColor; + property ShadowColor2; + property LabelStyle; + property Align; + property Alignment; + property Anchors; + property AutoSize; + property BidiMode; + property BorderSpacing; + property Color; + property Constraints; + property DragCursor; + property DragKind; + property DragMode; + property Enabled; + property FocusControl; + property Font; + property Layout; + property ParentBidiMode; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowAccelChar; + property ShowHint; + property Transparent; + property Visible; + property WordWrap; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnMouseEnter; + property OnMouseLeave; + property OnChangeBounds; + property OnContextPopup; + property OnResize; + property OnStartDrag; + property OptimalFill; + end; + +procedure Register; + +implementation + +procedure Register; +begin + {$I jdblabel_icon.lrs} + RegisterComponents('JujiboDB', [TJDbLabel]); +end; + +{ TJDbLabel } + +procedure TJDbLabel.DataChange(Sender: TObject); +begin + if FDataLink.Field <> nil then + Caption := FDataLink.Field.DisplayText + else if csDesigning in ComponentState then + Caption := Name + else + Caption := ''; +end; + +function TJDbLabel.GetDataField: string; +begin + Result := FDataLink.FieldName; +end; + +function TJDbLabel.GetDataSource: TDataSource; +begin + Result := FDataLink.DataSource; +end; + +function TJDbLabel.GetField: TField; +begin + Result := FDataLink.Field; +end; + +procedure TJDbLabel.SetDataField(const Value: string); +begin + FDataLink.FieldName := Value; +end; + +procedure TJDbLabel.SetDataSource(Value: TDataSource); +begin + ChangeDataSource(Self, FDataLink, Value); +end; + +procedure TJDbLabel.CMGetDataLink(var Message: TLMessage); +begin + Message.Result := PtrUInt(FDataLink); +end; + +procedure TJDbLabel.Notification(AComponent: TComponent; Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation = opRemove) then + begin + if (FDataLink <> nil) and (AComponent = DataSource) then + DataSource := nil; + end; +end; + +procedure TJDbLabel.Loaded; +begin + inherited Loaded; + if csDesigning in ComponentState then + Caption := Name; +end; + +constructor TJDbLabel.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FDataLink := TFieldDataLink.Create; + FDataLink.Control := Self; + FDataLink.OnDataChange := @DataChange; +end; + +destructor TJDbLabel.Destroy; +begin + FDataLink.Free; + inherited Destroy; +end; + +end. diff --git a/components/jujiboutils/src/jdblabel_icon.lrs b/components/jujiboutils/src/jdblabel_icon.lrs new file mode 100644 index 000000000..a654f067b --- /dev/null +++ b/components/jujiboutils/src/jdblabel_icon.lrs @@ -0,0 +1,23 @@ +LazarusResources.Add('tjdblabel','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147#0#0#0#9'pHYs'#0#0#11#19#0#0#11 + +#19#1#0#154#156#24#0#0#0#7'tIME'#7#221#8#24#10'+5'#234#253'-|'#0#0#1#150'IDA' + +'TH'#199#237#148'?HBQ'#20#198#127'7"'#8#162'$S'#161#232#159' '#24#153'nA'#24 + +#13'E['#212#28#173'55'#212'TA'#179'C.'#209#236#28#205#129#171#14#145#4'mYQ ' + +#8#21'6'#188'"'#180#12#158#162#189#6'{'#245#174'>C'#13#135#192#179#188#251 + +#206#251#206#247#157#239#220'w/49'#132#241#229#232#228'Q'#11#133#147#166#192 + +#181#5''''#203'3'#253#162'!'#1'#'#241#193#186#15#207'P'#23'W'#247'Y'#148't' + +#14'%'#147'GI'#231'8>M5$'#212#14#16#10''''#241#186'z'#25'ut'#162#164's\'#129 + +'D'#174'd'#242'x]'#189'd'#213#2#213#28#254'*'#224#28#236'&'#158'x!'#158#0#187 + +#197#9' '#145#191#171'E'#226#137#23'tl'#180'^'#1#128#169#9#27#246#158#142#170 + +#29'NM'#216'xW'#139'd'#213'B'#253#14#146#15#175'8,6'#0'vW'#220#204'z'#173#21 + +'{'#160'd'#242#232#216#134'Ft~'#253'L'#241'C'#195'3'#236'6'#5#158']>'#253'mD' + +#147#227'}'#216'{:'#8#28#222#18'8'#148'A'#209#160#31#24'a3t'#211#156#17'E' + +#131'%'#240#254#234#24's'#219#177#191#141'hc'#209#255#245#169#139#200'EN>4'#2 + +#192'_F'#161'i'#152#160#244'h3'#142'hiz'#128#217#173#216'w'#201#156#207'*' + +#253'U?T'#250#170#244#212'4cF'#22'l'#3#184'K'#189'I'#243'6'#246#16#217#243 + +#155'Z/'''#18'B'#136#242#238#165';h~'''#166#233#189#148#138#235']'#215'p'#217 + +#25'-'#235#189#212#190#22'B'#206#154#10'TnZe'#137#145#176#26#254#167#162#221 + +#196#148#168#180','#231#140#4#230#248'V'#180#226'_'#197''''#1'a'#7#148#142 + +#187'@8'#0#0#0#0'IEND'#174'B`'#130 +]); diff --git a/components/jujiboutils/src/jdblabeledcurrencyedit.pas b/components/jujiboutils/src/jdblabeledcurrencyedit.pas index 60298882a..8eda7f3fd 100644 --- a/components/jujiboutils/src/jdblabeledcurrencyedit.pas +++ b/components/jujiboutils/src/jdblabeledcurrencyedit.pas @@ -134,12 +134,12 @@ procedure Register; implementation uses - Math; + Math, jdbutils; procedure Register; begin {$I lcurrencydbicon.lrs} - RegisterComponents('Data Controls', [TJDBLabeledCurrencyEdit]); + RegisterComponents('JujiboDB', [TJDBLabeledCurrencyEdit]); end; { TJDBLabeledCurrencyEdit } @@ -339,6 +339,8 @@ end; procedure TJDBLabeledCurrencyEdit.KeyPress(var Key: char); begin + if not FieldIsEditable(Field) or not FDatalink.Edit then + Key := #0; if (Key in ['.', ',']) then Key := Decimalseparator; if (key = DecimalSeparator) and (Pos(key, Text) > 0) then @@ -353,6 +355,8 @@ end; procedure TJDBLabeledCurrencyEdit.DoEnter; begin + if not FieldIsEditable(Field) or IsReadOnly then + exit; if FDataLink.Field <> nil then Caption := FDataLink.Field.AsString; inherited DoEnter; @@ -382,6 +386,8 @@ end; procedure TJDBLabeledCurrencyEdit.EditingDone; begin inherited EditingDone; + if not FieldIsEditable(Field) or IsReadOnly then + exit; if DataSource.State in [dsEdit, dsInsert] then UpdateData(self) else diff --git a/components/jujiboutils/src/jdblabeleddateedit.pas b/components/jujiboutils/src/jdblabeleddateedit.pas index c1d315dc6..8a2fb8711 100644 --- a/components/jujiboutils/src/jdblabeleddateedit.pas +++ b/components/jujiboutils/src/jdblabeleddateedit.pas @@ -147,12 +147,12 @@ procedure Register; implementation uses - jcontrolutils, dateutils; + jcontrolutils, dateutils, jdbutils; procedure Register; begin {$I ldatedbicon.lrs} - RegisterComponents('Data Controls', [TJDBLabeledDateEdit]); + RegisterComponents('JujiboDB', [TJDBLabeledDateEdit]); end; { TJDBLabeledDateEdit } @@ -438,18 +438,17 @@ end; procedure TJDBLabeledDateEdit.KeyPress(var Key: char); begin - if (not Assigned(FDataLink.Field)) or IsReadOnly then - key := #0; + if not FieldIsEditable(Field) or not FDatalink.Edit then + Key := #0; if not (Key in ['0'..'9', #8, #9, '.', '-', '/']) then - Key := #0 - else - if not IsReadOnly then - FDatalink.Edit; + Key := #0; inherited KeyPress(Key); end; procedure TJDBLabeledDateEdit.DoEnter; begin + if not FieldIsEditable(Field) or IsReadOnly then + exit; if FDataLink.Field <> nil then Caption := FDataLink.Field.AsString; inherited DoEnter; @@ -488,7 +487,7 @@ end; procedure TJDBLabeledDateEdit.EditingDone; begin inherited EditingDone; - if (not Assigned(FDataLink.Field)) or IsReadOnly then + if not FieldIsEditable(Field) or IsReadOnly then exit; if DataSource.State in [dsEdit, dsInsert] then UpdateData(self) diff --git a/components/jujiboutils/src/jdblabeleddatetimeedit.pas b/components/jujiboutils/src/jdblabeleddatetimeedit.pas index cf6892900..773f64c8a 100644 --- a/components/jujiboutils/src/jdblabeleddatetimeedit.pas +++ b/components/jujiboutils/src/jdblabeleddatetimeedit.pas @@ -154,12 +154,12 @@ procedure Register; implementation uses - jcontrolutils, dateutils; + jcontrolutils, dateutils, jdbutils; procedure Register; begin {$I jdblabeleddatetimeedit_icon.lrs} - RegisterComponents('Data Controls', [TJDBLabeledDateTimeEdit]); + RegisterComponents('JujiboDB', [TJDBLabeledDateTimeEdit]); end; function TJDBLabeledDateTimeEdit.GetButtonWidth: integer; @@ -443,18 +443,19 @@ end; procedure TJDBLabeledDateTimeEdit.KeyPress(var Key: char); begin + if not FieldIsEditable(Field) or not FDatalink.Edit then + Key := #0; if (not Assigned(FDataLink.Field)) or IsReadOnly then key := #0; if not (Key in ['0'..'9', #8, #9, '.', '-', '/', ',', ':', ' ']) then - Key := #0 - else - if not IsReadOnly then - FDatalink.Edit; + Key := #0; inherited KeyPress(Key); end; procedure TJDBLabeledDateTimeEdit.DoEnter; begin + if not FieldIsEditable(Field) or IsReadOnly then + exit; if FDataLink.Field <> nil then Caption := EditText; inherited DoEnter; @@ -493,6 +494,8 @@ end; procedure TJDBLabeledDateTimeEdit.EditingDone; begin inherited EditingDone; + if not FieldIsEditable(Field) or IsReadOnly then + exit; if (not Assigned(FDataLink.Field)) or IsReadOnly then exit; if DataSource.State in [dsEdit, dsInsert] then diff --git a/components/jujiboutils/src/jdblabelededit.pas b/components/jujiboutils/src/jdblabelededit.pas index 037ac1248..78a2641d6 100644 --- a/components/jujiboutils/src/jdblabelededit.pas +++ b/components/jujiboutils/src/jdblabelededit.pas @@ -121,10 +121,13 @@ procedure Register; implementation +uses + jdbutils; + procedure Register; begin {$I jdblabelededit_icon.lrs} - RegisterComponents('Data Controls', [TJDBLabeledEdit]); + RegisterComponents('JujiboDB', [TJDBLabeledEdit]); end; { TJDBLabeledEdit } @@ -240,14 +243,15 @@ end; procedure TJDBLabeledEdit.KeyPress(var Key: char); begin - inherited KeyPress(Key); - if not IsReadOnly then - FDatalink.Edit; + if not FieldIsEditable(Field) or not FDatalink.Edit then + Key := #0; inherited KeyPress(Key); end; procedure TJDBLabeledEdit.DoEnter; begin + if not FieldIsEditable(Field) or IsReadOnly then + exit; if FDataLink.Field <> nil then Caption := FDataLink.Field.AsString; inherited DoEnter; @@ -285,6 +289,8 @@ end; procedure TJDBLabeledEdit.EditingDone; begin inherited EditingDone; + if not FieldIsEditable(Field) or IsReadOnly then + exit; if DataSource.State in [dsEdit, dsInsert] then UpdateData(self); end; diff --git a/components/jujiboutils/src/jdblabeledfloatedit.pas b/components/jujiboutils/src/jdblabeledfloatedit.pas index 8ce58dee3..7e496471c 100644 --- a/components/jujiboutils/src/jdblabeledfloatedit.pas +++ b/components/jujiboutils/src/jdblabeledfloatedit.pas @@ -134,12 +134,12 @@ procedure Register; implementation uses - Math; + Math, jdbutils; procedure Register; begin {$I jdblabeledfloatedit_icon.lrs} - RegisterComponents('Data Controls', [TJDBLabeledFloatEdit]); + RegisterComponents('JujiboDB', [TJDBLabeledFloatEdit]); end; @@ -172,29 +172,29 @@ procedure TJDBLabeledFloatEdit.UpdateData(Sender: TObject); var theValue: double; begin - if FDataLink.Field <> nil then + if FDataLink.Field <> nil then + begin + if IsValidFloat(Text) then begin - if IsValidFloat(Text) then - begin - theValue := StrToFloat(Text); - if fDecimales > 0 then - theValue := ScaleTo(theValue, fDecimales); - Text := FloatToStr(theValue); - FDataLink.Field.Value := theValue; - end - else - begin - if FDataLink.Field <> nil then - begin - ShowMessage(Format(SInvalidNumber, [Caption])); - Caption := FloatToStr(FDataLink.Field.AsFloat); - SelectAll; - SetFocus; - end; - end; + theValue := StrToFloat(Text); + if fDecimales > 0 then + theValue := ScaleTo(theValue, fDecimales); + Text := FloatToStr(theValue); + FDataLink.Field.Value := theValue; end else - Text := ''; + begin + if FDataLink.Field <> nil then + begin + ShowMessage(Format(SInvalidNumber, [Caption])); + Caption := FloatToStr(FDataLink.Field.AsFloat); + SelectAll; + SetFocus; + end; + end; + end + else + Text := ''; end; procedure TJDBLabeledFloatEdit.FocusRequest(Sender: TObject); @@ -338,6 +338,8 @@ end; procedure TJDBLabeledFloatEdit.KeyPress(var Key: char); begin + if not FieldIsEditable(Field) or not FDatalink.Edit then + Key := #0; if (Key in ['.', ',']) then Key := Decimalseparator; if (key = DecimalSeparator) and (Pos(key, Text) > 0) then @@ -351,8 +353,10 @@ end; procedure TJDBLabeledFloatEdit.DoEnter; begin + if not FieldIsEditable(Field) or IsReadOnly then + exit; if FDataLink.Field <> nil then - Caption := FloatToStr(FDataLink.Field.AsFloat); //FDataLink.Field.AsString; + Caption := FloatToStr(FDataLink.Field.AsFloat); //FDataLink.Field.AsString; inherited DoEnter; end; @@ -380,6 +384,8 @@ end; procedure TJDBLabeledFloatEdit.EditingDone; begin inherited EditingDone; + if not FieldIsEditable(Field) or IsReadOnly then + exit; if DataSource.State in [dsEdit, dsInsert] then UpdateData(self) else diff --git a/components/jujiboutils/src/jdblabeledintegeredit.pas b/components/jujiboutils/src/jdblabeledintegeredit.pas index fb4f8b60d..3b2957972 100644 --- a/components/jujiboutils/src/jdblabeledintegeredit.pas +++ b/components/jujiboutils/src/jdblabeledintegeredit.pas @@ -129,10 +129,13 @@ procedure Register; implementation +uses + jdbutils; + procedure Register; begin {$I lintegerdbicon.lrs} - RegisterComponents('Data Controls', [TJDBLabeledIntegerEdit]); + RegisterComponents('JujiboDB', [TJDBLabeledIntegerEdit]); end; { TJDBLabeledIntegerEdit } @@ -153,22 +156,22 @@ end; procedure TJDBLabeledIntegerEdit.UpdateData(Sender: TObject); begin - if FDataLink.Field <> nil then + if FDataLink.Field <> nil then + begin + if IsValidInteger(Caption) then begin - if IsValidInteger(Caption) then - begin - FDataLink.Field.Text := Text; - end - else - begin - ShowMessage(Format(SInvalidNumber, [Caption])); - Caption := FDataLink.Field.AsString; - SelectAll; - SetFocus; - end; + FDataLink.Field.Text := Text; end else - Text := ''; + begin + ShowMessage(Format(SInvalidNumber, [Caption])); + Caption := FDataLink.Field.AsString; + SelectAll; + SetFocus; + end; + end + else + Text := ''; end; procedure TJDBLabeledIntegerEdit.FocusRequest(Sender: TObject); @@ -306,16 +309,17 @@ end; procedure TJDBLabeledIntegerEdit.KeyPress(var Key: char); begin + if not FieldIsEditable(Field) or not FDatalink.Edit then + Key := #0; if not (Key in ['0'..'9', #8, #9, '-']) then - Key := #0 - else - if not IsReadOnly then - FDatalink.Edit; + Key := #0; inherited KeyPress(Key); end; procedure TJDBLabeledIntegerEdit.DoEnter; begin + if not FieldIsEditable(Field) or IsReadOnly then + exit; if FDataLink.Field <> nil then Caption := FDataLink.Field.AsString; inherited DoEnter; @@ -342,6 +346,8 @@ end; procedure TJDBLabeledIntegerEdit.EditingDone; begin inherited EditingDone; + if not FieldIsEditable(Field) or IsReadOnly then + exit; if DataSource.State in [dsEdit, dsInsert] then UpdateData(self) else diff --git a/components/jujiboutils/src/jdblabeledtimeedit.pas b/components/jujiboutils/src/jdblabeledtimeedit.pas index e8e153fc3..eccd5dee9 100644 --- a/components/jujiboutils/src/jdblabeledtimeedit.pas +++ b/components/jujiboutils/src/jdblabeledtimeedit.pas @@ -6,7 +6,7 @@ interface uses Classes, LResources, Controls, ExtCtrls, DB, DBCtrls, LMessages, LCLType, Dialogs, - SysUtils, jcontrolutils, jinputconsts; + SysUtils, jcontrolutils, jinputconsts, jdbutils; type TJDBLabeledTimeEdit = class(TCustomLabeledEdit) @@ -109,7 +109,7 @@ implementation procedure Register; begin {$I jdblabeledtimeedit_icon.lrs} - RegisterComponents('Data Controls', [TJDBLabeledTimeEdit]); + RegisterComponents('JujiboDB', [TJDBLabeledTimeEdit]); end; procedure TJDBLabeledTimeEdit.DataChange(Sender: TObject); @@ -279,16 +279,17 @@ end; procedure TJDBLabeledTimeEdit.KeyPress(var Key: char); begin + if not FieldIsEditable(Field) or not FDatalink.Edit then + Key := #0; if not (Key in ['0'..'9', #8, #9, ':']) then - Key := #0 - else - if not IsReadOnly then - FDatalink.Edit; + Key := #0; inherited KeyPress(Key); end; procedure TJDBLabeledTimeEdit.DoEnter; begin + if not FieldIsEditable(Field) or IsReadOnly then + exit; if FDataLink.Field <> nil then Caption := FDataLink.Field.AsString; inherited DoEnter; @@ -317,6 +318,8 @@ end; procedure TJDBLabeledTimeEdit.EditingDone; begin inherited EditingDone; + if not FieldIsEditable(Field) or IsReadOnly then + exit; if DataSource.State in [dsEdit, dsInsert] then UpdateData(self) else diff --git a/components/jujiboutils/src/jdbutils.pas b/components/jujiboutils/src/jdbutils.pas new file mode 100644 index 000000000..00cf50f5b --- /dev/null +++ b/components/jujiboutils/src/jdbutils.pas @@ -0,0 +1,21 @@ +unit jdbutils; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, DB; + +function FieldIsEditable(Field: TField): boolean; + +implementation + +function FieldIsEditable(Field: TField): boolean; +begin + Result := (Field <> nil) and (not Field.Calculated) and + (Field.DataType <> ftAutoInc) and (not Field.Lookup); +end; + +end. + diff --git a/components/jujiboutils/src/jlabel.pas b/components/jujiboutils/src/jlabel.pas new file mode 100644 index 000000000..c0b4c3d32 --- /dev/null +++ b/components/jujiboutils/src/jlabel.pas @@ -0,0 +1,292 @@ +{ TJLabel + + Copyright (C) 2012 Julio Jiménez Borreguero + Contact: jujibo at gmail dot com + + This library is free software; you can redistribute it and/or modify it + under the same terms as the Lazarus Component Library (LCL) + + See the file license-jujiboutils.txt and COPYING.LGPL, included in this distribution, + for details about the license. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +} + +unit JLabel; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, + LMessages; + +type + + TLabelStyle = (lsNone, lsRaised, lsRecessed, lsShadow, lsShadow2, lsCustom); + + { TJCustomLabel } + + TJCustomLabel = class(TCustomLabel) + private + { Private declarations } + FLabelStyle: TLabelStyle; + FShadowColor: TColor; + FShadowColor2: TColor; + procedure SetLabelStyle(AValue: TLabelStyle); + procedure SetShadowColor2(AValue: TColor); + protected + { Protected declarations } + procedure SetShadowColor(Value: TColor); + procedure Paint; override; + + property ShadowColor: TColor read FShadowColor write SetShadowColor; + property ShadowColor2: TColor read FShadowColor2 write SetShadowColor2; + property LabelStyle: TLabelStyle read FLabelStyle write SetLabelStyle; + property Align; + property Alignment; + property Anchors; + property AutoSize; + property BidiMode; + property BorderSpacing; + property Caption; + property Color; + property Constraints; + property DragCursor; + property DragKind; + property DragMode; + property Enabled; + property FocusControl; + property Font; + property Layout; + property ParentBidiMode; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowAccelChar; + property ShowHint; + property Transparent; + property Visible; + property WordWrap; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnMouseEnter; + property OnMouseLeave; + property OnChangeBounds; + property OnContextPopup; + property OnResize; + property OnStartDrag; + property OptimalFill; + public + { Public declarations } + constructor Create(TheOwner: TComponent); override; + end; + + TJLabel = class(TJCustomLabel) + published + property ShadowColor; + property ShadowColor2; + property LabelStyle; + property Align; + property Alignment; + property Anchors; + property AutoSize; + property BidiMode; + property BorderSpacing; + property Caption; + property Color; + property Constraints; + property DragCursor; + property DragKind; + property DragMode; + property Enabled; + property FocusControl; + property Font; + property Layout; + property ParentBidiMode; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowAccelChar; + property ShowHint; + property Transparent; + property Visible; + property WordWrap; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnMouseEnter; + property OnMouseLeave; + property OnChangeBounds; + property OnContextPopup; + property OnResize; + property OnStartDrag; + property OptimalFill; + end; + +procedure Register; + +implementation + +procedure Register; +begin + {$I jlabel_icon.lrs} + RegisterComponents('Jujibo', [TJLabel]); +end; + +{ TJCustomLabel } + +procedure TJCustomLabel.SetShadowColor2(AValue: TColor); +begin + if FShadowColor2 <> AValue then + begin + FLabelStyle := lsCustom; + FShadowColor2 := AValue; + Perform(CM_COLORCHANGED, 0, 0); + Invalidate; + end; +end; + +procedure TJCustomLabel.SetLabelStyle(AValue: TLabelStyle); +begin + if FLabelStyle = AValue then + Exit; + FLabelStyle := AValue; + case FLabelStyle of + lsNone: + begin + FShadowColor := clNone; + FShadowColor2 := clNone; + end; + lsRaised: + begin + FShadowColor := clBtnHighlight; + FShadowColor2 := clBtnShadow; + end; + lsRecessed: + begin + FShadowColor := clBtnShadow; + FShadowColor2 := clBtnHighlight; + end; + lsShadow: + begin + FShadowColor := clBtnHighlight; + FShadowColor2 := clNone; + end; + lsShadow2: + begin + FShadowColor := clNone; + FShadowColor2 := clBtnHighlight; + end; + end; + Invalidate; +end; + +procedure TJCustomLabel.SetShadowColor(Value: TColor); +begin + if FShadowColor <> Value then + begin + FLabelStyle := lsCustom; + FShadowColor := Value; + Perform(CM_COLORCHANGED, 0, 0); + Invalidate; + end; +end; + +procedure TJCustomLabel.Paint; +var + TR: TTextStyle; + R, R1, R2: TRect; + TextLeft, TextTop: integer; + LabelText: string; + OldFontColor: TColor; + Color1, Color2: TColor; +begin + R := Rect(0, 0, Width, Height); + R1 := Rect(1, 1, Width + 1, Height + 1); // Shadow + R2 := Rect(-1, -1, Width - 1, Height - 1); // Shadow2 + + with Canvas do + begin + Brush.Color := Self.Color; + if (Color <> clNone) and not Transparent then + begin + Brush.Style := bsSolid; + FillRect(R); + end; + Brush.Style := bsClear; + Font := Self.Font; + + FillChar(TR, SizeOf(TR), 0); + with TR do + begin + Alignment := BidiFlipAlignment(Self.Alignment, UseRightToLeftAlignment); + Layout := Self.Layout; + Opaque := (Color <> clNone) and not Transparent; + WordBreak := wordWrap; + SingleLine := not WordWrap and not HasMultiLine; + Clipping := True; + ShowPrefix := ShowAccelChar; + SystemFont := False; + RightToLeft := UseRightToLeftReading; + ExpandTabs := True; + end; + DoMeasureTextPosition(TextTop, TextLeft); + //debugln('TCustomLabel.Paint ',dbgs(Alignment=tacenter),' ',dbgs(Layout=tlCenter),' ',dbgs(TextLeft),' TextTop=',dbgs(TextTop),' ',dbgs(R)); + LabelText := GetLabelText; + OldFontColor := Font.Color; + if not IsEnabled then + begin + Font.Color := clBtnHighlight; + if (Layout <> tlTop) then + TextRect(R1, TextLeft, TextTop, LabelText, TR) + else + TextRect(R, TextLeft + 1, TextTop + 1, LabelText, TR); + Font.Color := clBtnShadow; + end; + if ShadowColor2 <> clNone then + begin + Font.Color := ShadowColor2; + if (Layout <> tlTop) then + TextRect(R2, TextLeft, TextTop, LabelText, TR) + else + TextRect(R, TextLeft - 1, TextTop - 1, LabelText, TR); + Font.Color := OldFontColor; + end; + if ShadowColor <> clNone then + begin + Font.Color := ShadowColor; + if (Layout <> tlTop) then + TextRect(R1, TextLeft, TextTop, LabelText, TR) + else + TextRect(R, TextLeft + 1, TextTop + 1, LabelText, TR); + Font.Color := OldFontColor; + end; + TextRect(R, TextLeft, TextTop, LabelText, TR); + end; +end; + +constructor TJCustomLabel.Create(TheOwner: TComponent); +begin + inherited Create(TheOwner); + LabelStyle := lsRaised; +end; + +end. diff --git a/components/jujiboutils/src/jlabel_icon.lrs b/components/jujiboutils/src/jlabel_icon.lrs new file mode 100644 index 000000000..313e3570f --- /dev/null +++ b/components/jujiboutils/src/jlabel_icon.lrs @@ -0,0 +1,14 @@ +LazarusResources.Add('tjlabel','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0 + +#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147#0#0#0#9'pHYs'#0#0#11#19#0#0#11 + +#19#1#0#154#156#24#0#0#0#7'tIME'#7#221#3#24#9#30'&'#185#228'!\'#0#0#0#180'ID' + +'ATH'#199#237#149#203#17#131'0'#12'D'#181'Lj'#163#144'TB%)$'#205'='#14#177'A' + +'('#198'0'#1#135#11#186'xF'#150'V+'#173'?'#2#172#165'u'#214#216#238#2#215#23 + +'x'#152#153#13#175#247#233#192#195#179#159#11'x'#199')'#224#142#240#174#17'I' + +#134'd'#252'C'#3'~'#210' '#178#157#208'0'#133#189#143#219#249'cg1'#231#171#3 + +'0'#229#215#163#144#188#240#231#21#230#189#216'e'#181#131#141#177'D'#127'&' + +#198'j'#7#158#209#1'S'#179#139'V:i]I i'#21'`'#210'B'#146'|'#188#3#175'k'#144 + +#146#136#208',?'#14#213#227'+'#5'Js'#4#18'cv'#205#253#176#6'J'#179#146#180#29 + +#11'4}'#236't'#255#201#151#23#24#1#157#205'N05'#9'4R'#0#0#0#0'IEND'#174'B`' + +#130 +]); diff --git a/components/jujiboutils/src/jlabeledcurrencyedit.pas b/components/jujiboutils/src/jlabeledcurrencyedit.pas index 3ae61167f..5483b92ce 100644 --- a/components/jujiboutils/src/jlabeledcurrencyedit.pas +++ b/components/jujiboutils/src/jlabeledcurrencyedit.pas @@ -117,7 +117,7 @@ uses procedure Register; begin {$I jlabeledcurrencyedit_icon.lrs} - RegisterComponents('Additional', [TJLabeledCurrencyEdit]); + RegisterComponents('Jujibo', [TJLabeledCurrencyEdit]); end; { TJLabeledCurrencyEdit } @@ -180,6 +180,8 @@ end; procedure TJLabeledCurrencyEdit.DoEnter; begin inherited DoEnter; + if ReadOnly then + exit; Text := FloatToStr(theValue); SelectAll; end; @@ -187,6 +189,8 @@ end; procedure TJLabeledCurrencyEdit.DoExit; begin inherited DoExit; + if ReadOnly then + exit; if IsValidFloat(Text) then theValue := StrToCurr(Text) else @@ -227,4 +231,3 @@ begin end; end. - diff --git a/components/jujiboutils/src/jlabeleddateedit.pas b/components/jujiboutils/src/jlabeleddateedit.pas index 96fc52dff..d1fe47e3b 100644 --- a/components/jujiboutils/src/jlabeleddateedit.pas +++ b/components/jujiboutils/src/jlabeleddateedit.pas @@ -127,7 +127,7 @@ implementation procedure Register; begin {$I jlabeleddateedit_icon.lrs} - RegisterComponents('Additional', [TJLabeledDateEdit]); + RegisterComponents('Jujibo', [TJLabeledDateEdit]); end; { TJLabeledDateEdit } @@ -185,6 +185,8 @@ end; procedure TJLabeledDateEdit.DoEnter; begin inherited DoEnter; + if ReadOnly then + exit; if theValue <> 0 then Text := FormatDateTime(DisplayFormat, theValue) else @@ -195,6 +197,8 @@ end; procedure TJLabeledDateEdit.DoExit; begin inherited DoExit; + if ReadOnly then + exit; Text := NormalizeDate(Text, theValue); if Length(Text) = 0 then theValue := 0 diff --git a/components/jujiboutils/src/jlabeleddatetimeedit.pas b/components/jujiboutils/src/jlabeleddatetimeedit.pas index 3b38201e7..0471364cf 100644 --- a/components/jujiboutils/src/jlabeleddatetimeedit.pas +++ b/components/jujiboutils/src/jlabeleddatetimeedit.pas @@ -134,7 +134,7 @@ uses procedure Register; begin {$I jlabeleddatetimeedit_icon.lrs} - RegisterComponents('Additional', [TJLabeledDateTimeEdit]); + RegisterComponents('Jujibo', [TJLabeledDateTimeEdit]); end; function TJLabeledDateTimeEdit.GetButtonWidth: integer; @@ -190,6 +190,8 @@ end; procedure TJLabeledDateTimeEdit.DoEnter; begin inherited DoEnter; + if ReadOnly then + exit; if theValue <> 0 then Text := FormatDateTime(DisplayFormat, theValue) else @@ -202,6 +204,8 @@ var bufText: string; begin inherited DoExit; + if ReadOnly then + exit; bufText := Text; Text := NormalizeDateTime(Text, theValue); if (Length(bufText) > 0) and (Length(Text) = 0) then diff --git a/components/jujiboutils/src/jlabeledfloatedit.pas b/components/jujiboutils/src/jlabeledfloatedit.pas index eb54c7606..99474f516 100644 --- a/components/jujiboutils/src/jlabeledfloatedit.pas +++ b/components/jujiboutils/src/jlabeledfloatedit.pas @@ -119,7 +119,7 @@ uses procedure Register; begin {$I jlabeledfloatedit_icon.lrs} - RegisterComponents('Additional', [TJLabeledFloatEdit]); + RegisterComponents('Jujibo', [TJLabeledFloatEdit]); end; function TJLabeledFloatEdit.getDecimals: integer; @@ -139,7 +139,7 @@ end; function TJLabeledFloatEdit.getCurrentValue: double; begin - Result:= StrToFloatDef(Text, Value); + Result := StrToFloatDef(Text, Value); end; procedure TJLabeledFloatEdit.formatInput; @@ -185,6 +185,8 @@ end; procedure TJLabeledFloatEdit.DoEnter; begin inherited DoEnter; + if ReadOnly then + exit; Text := FloatToStr(theValue); SelectAll; end; @@ -192,6 +194,8 @@ end; procedure TJLabeledFloatEdit.DoExit; begin inherited DoExit; + if ReadOnly then + exit; if IsValidFloat(Text) then theValue := StrToCurr(Text) else @@ -230,4 +234,3 @@ begin end; end. - diff --git a/components/jujiboutils/src/jlabeledintegeredit.pas b/components/jujiboutils/src/jlabeledintegeredit.pas index 821c925c7..1fcc9f83f 100644 --- a/components/jujiboutils/src/jlabeledintegeredit.pas +++ b/components/jujiboutils/src/jlabeledintegeredit.pas @@ -112,7 +112,7 @@ implementation procedure Register; begin {$I jlabeledintegeredit_icon.lrs} - RegisterComponents('Additional', [TJLabeledIntegerEdit]); + RegisterComponents('Jujibo', [TJLabeledIntegerEdit]); end; { TJLabeledIntegerEdit } @@ -160,6 +160,8 @@ end; procedure TJLabeledIntegerEdit.DoEnter; begin inherited DoEnter; + if ReadOnly then + exit; Text := IntToStr(theValue); SelectAll; end; @@ -167,6 +169,8 @@ end; procedure TJLabeledIntegerEdit.DoExit; begin inherited DoExit; + if ReadOnly then + exit; if IsValidInteger(Text) then theValue := StrToInt(Text) else diff --git a/components/jujiboutils/src/jlabeledtimeedit.pas b/components/jujiboutils/src/jlabeledtimeedit.pas index b0172165f..03bf7953c 100644 --- a/components/jujiboutils/src/jlabeledtimeedit.pas +++ b/components/jujiboutils/src/jlabeledtimeedit.pas @@ -108,7 +108,7 @@ implementation procedure Register; begin {$I jlabeledtimeedit_icon.lrs} - RegisterComponents('Additional', [TJLabeledTimeEdit]); + RegisterComponents('Jujibo', [TJLabeledTimeEdit]); end; @@ -146,6 +146,8 @@ end; procedure TJLabeledTimeEdit.DoEnter; begin inherited DoEnter; + if ReadOnly then + exit; if not hasValue then Text := '' else @@ -156,6 +158,8 @@ end; procedure TJLabeledTimeEdit.DoExit; begin inherited DoExit; + if ReadOnly then + exit; Text := NormalizeTime(Text, theValue); if Length(Text) = 0 then begin