Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
P
puzzle-editor
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
rarnu
puzzle-editor
Commits
2341542c
Commit
2341542c
authored
Oct 20, 2024
by
rarnu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add: 增加搜索历史,增加一些提升用户体验的操作
parent
4021fc87
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
3857 additions
and
3269 deletions
+3857
-3269
PuzzleEditor.lpi
PuzzleEditor.lpi
+6
-0
PuzzleEditor.lpr
PuzzleEditor.lpr
+22
-1
frmabout.lfm
frmabout.lfm
+2888
-2885
frmabout.pas
frmabout.pas
+18
-3
frmcardlist.lfm
frmcardlist.lfm
+4
-1
frmcardlist.pas
frmcardlist.pas
+59
-15
frmcontinouseffected.lfm
frmcontinouseffected.lfm
+3
-1
frmcontinouseffected.pas
frmcontinouseffected.pas
+8
-1
frmhome.lfm
frmhome.lfm
+316
-314
frmhome.pas
frmhome.pas
+75
-15
frmlogin.lfm
frmlogin.lfm
+11
-7
frmlogin.pas
frmlogin.pas
+15
-0
frmpuzzleconfig.lfm
frmpuzzleconfig.lfm
+4
-1
frmpuzzleconfig.pas
frmpuzzleconfig.pas
+15
-0
frmsearchcard.lfm
frmsearchcard.lfm
+192
-3
frmsearchcard.pas
frmsearchcard.pas
+126
-6
untcard.pas
untcard.pas
+4
-4
untconfig.pas
untconfig.pas
+46
-1
untlistitem.pas
untlistitem.pas
+35
-10
untscriptgenerator.pas
untscriptgenerator.pas
+10
-1
No files found.
PuzzleEditor.lpi
View file @
2341542c
...
...
@@ -214,6 +214,12 @@
<Item>
<Name
Value=
"ESocketError"
/>
</Item>
<Item>
<Name
Value=
"EHTTPClient"
/>
</Item>
<Item>
<Name
Value=
"EAccessViolation"
/>
</Item>
</Exceptions>
</Debugging>
</CONFIG>
PuzzleEditor.lpr
View file @
2341542c
...
...
@@ -15,19 +15,40 @@ uses
{$R *.res}
type
{ TExceptionHandler }
TExceptionHandler = class
public
Procedure OnError(Sender : TObject; E : Exception);
end;
var
AMDPro3Path: string;
{ TExceptionHandler }
procedure TExceptionHandler.OnError(Sender: TObject; E: Exception);
begin
// do nothing
end;
var
EH: TExceptionHandler;
begin
AMDPro3Path:= TConfigReader.GetMDPro3InstallPath();
if (AMDPro3Path = '') or (not DirectoryExists(AMDPro3Path)) then begin
MessageDlg('提示', '没有安装 MDPro3,请先进行安装', mtError, [mbOK], 0);
Exit;
end;
EH:= TExceptionHandler.Create;
RequireDerivedFormResource:=True;
Application.Scaled:=True;
Application.Initialize;
Application.OnException:= @EH.OnError;
Application.CreateForm(TFormHome, FormHome);
Application.Run;
EH.Free;
end.
frmabout.lfm
View file @
2341542c
This source diff could not be displayed because it is too large. You can
view the blob
instead.
frmabout.pas
View file @
2341542c
...
...
@@ -20,13 +20,14 @@ type
lblGitlab
:
TD2Label
;
Label5
:
TD2Label
;
Line1
:
TD2Line
;
Root
1
:
TD2Background
;
Root
:
TD2Background
;
Scene
:
TD2Scene
;
procedure
FormCreate
(
Sender
:
TObject
);
procedure
FormKeyPress
(
Sender
:
TObject
;
var
Key
:
char
);
procedure
lblGitlabClick
(
Sender
:
TObject
);
procedure
lblGitlabMouseEnter
(
Sender
:
TObject
);
procedure
lblGitlabMouseLeave
(
Sender
:
TObject
);
procedure
Root
1
Click
(
Sender
:
TObject
);
procedure
RootClick
(
Sender
:
TObject
);
private
public
...
...
@@ -38,6 +39,9 @@ var
implementation
uses
untConfig
;
{$R *.lfm}
{ TFormAbout }
...
...
@@ -52,6 +56,17 @@ begin
if
(
Key
=
#
27
)
then
Close
;
end
;
procedure
TFormAbout
.
FormCreate
(
Sender
:
TObject
);
var
AScale
:
Double
;
begin
AScale
:=
TConfigReader
.
GetScale
();
self
.
Width
:=
Trunc
(
520
*
AScale
);
self
.
Height
:=
Trunc
(
270
*
AScale
);
Root
.
Scale
.
X
:=
AScale
;
Root
.
Scale
.
Y
:=
AScale
;
end
;
procedure
TFormAbout
.
lblGitlabClick
(
Sender
:
TObject
);
begin
LCLIntf
.
OpenURL
(
'https://code.moenext.com/rarnu/puzzle-editor'
);
...
...
@@ -62,7 +77,7 @@ begin
lblGitlab
.
Font
.
Style
:=
d2FontRegular
;
end
;
procedure
TFormAbout
.
Root
1
Click
(
Sender
:
TObject
);
procedure
TFormAbout
.
RootClick
(
Sender
:
TObject
);
begin
Close
;
end
;
...
...
frmcardlist.lfm
View file @
2341542c
...
...
@@ -8,9 +8,12 @@ object FormCardList: TFormCardList
Caption = '卡片列表'
ClientHeight = 800
ClientWidth = 600
Constraints.MinHeight = 800
Constraints.MinWidth = 600
OnCreate = FormCreate
OnDestroy = FormDestroy
Position = poMainFormCenter
LCLVersion = '3.6.0.0'
object Scene: TD2Scene
Left = 0
Height = 800
...
...
@@ -1718,7 +1721,7 @@ object FormCardList: TFormCardList
000000000000F005400648656967687405000000000000008803400C50616464
696E672E52656374060928302C322C302C32290C436C69704368696C6472656E
09000C54443252656374616E676C650005416C69676E070C7661486F72697A6F
6E74616C0E506F736974696F6E2E506F696E74060628312C383
2
29064C6F636B
6E74616C0E506F736974696F6E2E506F696E74060628312C383
6
29064C6F636B
6564090557696474680500000000000000EC0540064865696768740500000000
000000E404400C50616464696E672E52656374060928312C312C312C31290748
697454657374080A46696C6C2E5374796C65070F643242727573684772616469
...
...
frmcardlist.pas
View file @
2341542c
...
...
@@ -25,6 +25,7 @@ type
procedure
FormDestroy
(
Sender
:
TObject
);
private
FCardList
:
TFPGList
<
Int64
>;
procedure
addOneCardItem
(
ACard
:
TCard
);
procedure
deleteCardItem
(
ACardId
:
Int64
;
AIndex
:
Integer
);
public
procedure
FillCardIds
(
list
:
TFPGList
<
Int64
>);
...
...
@@ -37,7 +38,7 @@ var
implementation
uses
untListItem
,
frmSearchCard
;
uses
untListItem
,
frmSearchCard
,
untConfig
;
{$R *.lfm}
...
...
@@ -46,6 +47,7 @@ uses untListItem, frmSearchCard;
procedure
TFormCardList
.
btnAddCardClick
(
Sender
:
TObject
);
var
cid
:
Int64
=
0
;
c
:
TCard
;
item
:
TCardListItemOp
;
begin
with
TFormSearchCard
.
Create
(
Self
)
do
begin
...
...
@@ -56,19 +58,30 @@ begin
end
;
if
cid
>
0
then
begin
FCardList
.
Add
(
cid
);
c
:=
Cards
.
GetCardInfo
(
cid
);
lstCards
.
BeginUpdate
;
item
:=
TCardListItemOp
.
Create
(
lstCards
);
item
.
CardName
:=
Cards
.
GetCardName
(
cid
)
;
item
.
CardName
:=
c
.
CardName
;
item
.
Id
:=
cid
;
item
.
Card
:=
c
;
item
.
ShowFace
:=
False
;
item
.
Index
:=
lstCards
.
Count
-
1
;
item
.
OnDelete
:=
deleteCardItem
;
item
.
OnCardAddOneClicked
:=
addOneCardItem
;
lstCards
.
EndUpdate
;
end
;
end
;
procedure
TFormCardList
.
FormCreate
(
Sender
:
TObject
);
var
AScale
:
Double
;
begin
FCardList
:=
TFPGList
<
Int64
>.
Create
;
AScale
:=
TConfigReader
.
GetScale
();
self
.
Width
:=
Trunc
(
600
*
AScale
);
self
.
Height
:=
Trunc
(
800
*
AScale
);
Root
.
Scale
.
X
:=
AScale
;
Root
.
Scale
.
Y
:=
AScale
;
end
;
procedure
TFormCardList
.
FormDestroy
(
Sender
:
TObject
);
...
...
@@ -78,22 +91,49 @@ end;
procedure
TFormCardList
.
deleteCardItem
(
ACardId
:
Int64
;
AIndex
:
Integer
);
var
i
:
Integer
;
cid
:
Int64
;
i
,
j
:
Integer
;
item
:
TCardListItemOp
;
begin
// index matches
if
(
FCardList
[
AIndex
]
=
ACardId
)
then
begin
FCardList
.
Delete
(
AIndex
);
lstCards
.
Items
[
AIndex
].
Free
;
Exit
;
end
;
// index not match
FCardList
.
Remove
(
ACardId
);
for
i
:=
0
to
lstCards
.
Count
-
1
do
begin
if
TCardListItemOp
(
lstCards
.
Items
[
i
]).
Id
=
ACardId
then
begin
lstCards
.
Items
[
i
].
Free
;
for
i
:=
0
to
FCardList
.
Count
-
1
do
begin
cid
:=
FCardList
[
i
];
if
cid
=
ACardId
then
begin
for
j
:=
0
to
lstCards
.
Count
-
1
do
begin
item
:=
TCardListItemOp
(
lstCards
.
Items
[
j
]);
if
(
item
.
Id
=
ACardId
)
and
(
item
.
Index
=
AIndex
)
then
begin
FCardList
.
Delete
(
i
);
item
.
Free
;
Break
;
end
;
end
;
Break
;
end
;
end
;
for
i
:=
0
to
lstCards
.
Count
-
1
do
begin
item
:=
TCardListItemOp
(
lstCards
.
Items
[
i
]);
item
.
Index
:=
i
;
end
;
end
;
procedure
TFormCardList
.
addOneCardItem
(
ACard
:
TCard
);
var
item
:
TCardListItemOp
;
c
:
TCard
;
begin
c
:=
Cards
.
GetCardInfo
(
ACard
.
CardId
);
FCardList
.
Add
(
ACard
.
CardId
);
lstCards
.
BeginUpdate
;
item
:=
TCardListItemOp
.
Create
(
lstCards
);
item
.
CardName
:=
c
.
CardName
;
item
.
Id
:=
c
.
CardId
;
item
.
Card
:=
c
;
item
.
ShowFace
:=
False
;
item
.
Index
:=
lstCards
.
Count
-
1
;
item
.
OnDelete
:=
deleteCardItem
;
item
.
OnCardAddOneClicked
:=
addOneCardItem
;
lstCards
.
EndUpdate
;
end
;
procedure
TFormCardList
.
FillCardIds
(
list
:
TFPGList
<
Int64
>);
...
...
@@ -101,6 +141,7 @@ var
i
:
Integer
;
item
:
TCardListItemOp
;
cn
:
string
;
c
:
TCard
;
begin
FCardList
.
Clear
;
FCardList
.
AddList
(
list
);
...
...
@@ -108,12 +149,15 @@ begin
if
(
list
.
Count
>
0
)
then
begin
lstCards
.
BeginUpdate
;
for
i
:=
0
to
FCardList
.
Count
-
1
do
begin
c
n
:=
Cards
.
GetCardName
(
FCardList
[
i
]);
c
:=
Cards
.
GetCardInfo
(
FCardList
[
i
]);
item
:=
TCardListItemOp
.
Create
(
lstCards
);
item
.
CardName
:=
c
n
;
item
.
CardName
:=
c
.
CardName
;
item
.
Id
:=
FCardList
[
i
];
item
.
ShowFace
:=
False
;
item
.
Card
:=
c
;
item
.
Index
:=
i
;
item
.
OnDelete
:=
deleteCardItem
;
item
.
OnCardAddOneClicked
:=
addOneCardItem
;
end
;
lstCards
.
EndUpdate
;
end
;
...
...
frmcontinouseffected.lfm
View file @
2341542c
...
...
@@ -8,6 +8,8 @@ object FormContinousEffected: TFormContinousEffected
Caption = '永续受影响的卡片'
ClientHeight = 800
ClientWidth = 600
Constraints.MinHeight = 800
Constraints.MinWidth = 600
OnCreate = FormCreate
OnDestroy = FormDestroy
Position = poMainFormCenter
...
...
@@ -1701,7 +1703,7 @@ object FormContinousEffected: TFormContinousEffected
000000000000F005400648656967687405000000000000008803400C50616464
696E672E52656374060928302C322C302C32290C436C69704368696C6472656E
09000C54443252656374616E676C650005416C69676E070C7661486F72697A6F
6E74616C0E506F736974696F6E2E506F696E74060628312C383
4
29064C6F636B
6E74616C0E506F736974696F6E2E506F696E74060628312C383
6
29064C6F636B
6564090557696474680500000000000000EC0540064865696768740500000000
000000E404400C50616464696E672E52656374060928312C312C312C31290748
697454657374080A46696C6C2E5374796C65070F643242727573684772616469
...
...
frmcontinouseffected.pas
View file @
2341542c
...
...
@@ -43,15 +43,22 @@ var
implementation
uses
untUtils
;
untUtils
,
untConfig
;
{$R *.lfm}
{ TFormContinousEffected }
procedure
TFormContinousEffected
.
FormCreate
(
Sender
:
TObject
);
var
AScale
:
Double
;
begin
FCESelectedCards
:=
TFPGList
<
TCard
>.
Create
;
AScale
:=
TConfigReader
.
GetScale
();
self
.
Width
:=
Trunc
(
600
*
AScale
);
self
.
Height
:=
Trunc
(
800
*
AScale
);
Root
.
Scale
.
X
:=
AScale
;
Root
.
Scale
.
Y
:=
AScale
;
end
;
procedure
TFormContinousEffected
.
CornerButton1Click
(
Sender
:
TObject
);
...
...
frmhome.lfm
View file @
2341542c
...
...
@@ -2,22 +2,22 @@ object FormHome: TFormHome
Left = 655
Height = 880
Top = 44
Width = 1382
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Width = 1340
Caption = 'Puzzle Editor'
ClientHeight = 880
ClientWidth = 13
82
ClientWidth = 13
40
Font.Height = -12
OnCreate = FormCreate
OnDestroy = FormDestroy
OnResize = FormResize
OnShow = FormShow
Position = poScreenCenter
LCLVersion = '3.6.0.0'
object Scene: TD2Scene
Left = 0
Height = 880
Top = 0
Width = 13
82
Width = 13
40
Align = alClient
Style = Res
DesignSnapGridShow = False
...
...
@@ -25,11 +25,11 @@ object FormHome: TFormHome
DesignSnapToLines = True
object Root: TD2Background
Align = vaClient
Width = 13
82
Width = 13
40
Height = 880
HitTest = False
object tbMain: TD2ToolBar
Width = 13
82
Width = 13
40
Height = 64
TabOrder = 0
object btnNew: TD2ToolButton
...
...
@@ -46,67 +46,68 @@ object FormHome: TFormHome
Bitmap.PNG = {
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA8640000076D49444154785EED9C69
881C4514C7D7FB42F1BEC003414151BCF042541444FCA011258A784413B23B47
D6180415AF100C2AA828DE4A24AC0782244605F1CE7E48B2533D59138F78B006
83C14D76A76A369BC48812CDF87F3D3332D35D3DDDD55DDD53EDF642137AD255
F5EA57AFEAD57BF5BA7B7AB2BF8C402A08F4952A27172C9E2F3031BF9B57BECC
0B3DB5DA6EA98046424E5F57DB1BC05E2C30BEAB60899A09579E89975203316F
F1E74D80E6942115100BAB264EC833FE8F89004926E32142C83B4C85D794CB68
88F992982B993AB30AD6F859495C3956B9443280C3588F275B7F3716A21460B9
7259521670EEDA2D07BB07902FEE5B2DCE4F05445301D200A602A2C9005301D1
7480C6434C0340A321A605A0B110D304D048886903681CC43402340A625A011A
0331CD008D809876805D87F87F00D85588DD06D83B3CBA7F9CE1B4BED2961363
0D8C741B20750E01DD7571419C120011B6BA2D0318719E400B1F8DE3506B4A68
60933D8E33CFC3B1EAB3D0C665612E44ADD73B35794A018CA8C43D385D7C2603
1881620630023CDB9A671A188D6006301ABF4C0323F2EBC9317161DE126FE0DA
DE342699150E41F59EAF371F50B02AB3B1ADF93103180260B3C8FC5A6DF7F983
B53D2354E15FD4045FD85FCA7A0A5E6ED5E62349A3EE2A8D1D45F741CAC5FE8C
89004973E6ACAE5E0CAF64012CEB67F8F737999B87B56E14BF7F4E6E601EE928
D3DFADED113B30670326019CBDBA720C802CB4C18448F444B931248A3E912F57
8F4B0CA40900F32B260F01B8A701E08F30E05C6518FF0BBFBDD03BBCEDF0D841
761B200208D7C05A6ED602CEA9B58CF38255BD315688DD0248EB15699D2F38E4
6D43337FC6731FE07A95BC0DDCBF62DF33F153A01018F2BF7B876B7BC502B21B
00EDA4F67AC84A9ED05E4F76FF32678919FD6B361DD1A9E3456BEB61D0E25B61
683EED041386E6133A3ED00E316980B42F6B6893141EB4EB23CA8C0DD351F4E5
D44E0383A5E20BEDDB9FA40136A69F041E9FC85BD5E961C039CB4013A7E1C2FA
27D3703EA0A38DFFEA4812A0E7D907D6B27C79EC249D1DEB1D9E381EED7D2783
88E9DCABADADA400D21E0F0660ABBB43FC7BBF752E6C67A95EB4F9AD7B9B2376
68F3919302088BF9B6441BC64953C2020A520EEBE9D1B627E39ECECB8294F77D
26098073D8F8992E0B094B5BB4AA57F90AD8F240AEC4AF852178AA581237A894
4364E652E9CB442571814A3DD267930048313AC9D4555ACC51477FFB7B23FC5E
95CE6306BC2CF15896AAD4D11580E4A6416BFE6C131EAE96AABF0A0DB6DA01F0
1F543A4F911CC8F17BDB20587C274D71957A5CCFC6AD8110D8F52A19A6D36255
A1D1F9B50E801B54EBB0DF4875AC85F6ABB551FEE20688A9F78E53687ABD4B55
661D003170E74A2CF287AAB2B43D1F3740B705E4D530713B1D00A9E332798C05
386B68F2505D23AE0BA06C46A8AEC789696071A8728EC4FA3ED669C429FC042D
5944EB64EB85DFAAED06406C973CB308CFDDD2B97EF19053268A7E87D6C238A7
30EDF354166D72B17CC35B0122D54526EEF60282FEDE29D9CE4C3312A0EDD43B
3A4C212ACFCED9E71F3ABED9C04B9E6D307E9D6B5099B8DD4880E43948849DE5
252C4D5D2D00E1367AB6C12A37BB648A12058A730AD74FD6DA352A67F1FBBC01
C26F756D98D5341246E22BFA0E84B796B77B34249FAA4B999811A110957BB4F9
EB7ED365E64A7E20BDC9DE7AB9A22A8CFFEA7CA69F8983FCEAC6003DE71AD472
F574BF729EFF1FA706D27ECF75D286185D1861756D63B04C949CEEDC8CC10DFB
8691C92E132740BB7E8BAF70F8C1BB8A2BF9B1AA02EB0058DF97F2BFDBE5116B
5465496C0A3776FE0B249BE979AA42EB0088E9DB2731524FAACA9228C05CB972
B6C412AF574DFA71028466FFA2D4717C8B4B169D8EB4894E620A37B4F01B1744
6C685500385D30DCBFAF52BEEEE1B45B743A6F8EFC7DAEB8D7407B9098C0877C
5CC28FD1996E500876DE8C2596438B76D2BAAAE2BF9275C6F4DD28594AE6046D
BF2B56B8D9289DC5D294734F65FE5E640D08400003F896640047E70D6DDC2F40
F1CE8F24A181B61696C5F5322F8352D32277A2430598A60F4ADB453683967693
0268AF858C2FF570D51ED6D2194725D8B2DCEF31681F6BD3FC240136F6611BE4
10F900E536EB00491B634CDBD7A4F0ECDCC388E720AD42260990DA2D0E55CF70
7E54ACA5A32338B2BC320A44CA54A5E472E92031B183C2FA51EA77954D1A2009
20FBA858BB7B2506296F30E85E915CC65CB97A356560794673EAF02ED70ACF5E
DC65DF0F2C576FA2D4071D975764C48E5633B1A963F88A1284987833C77811D7
157D4C9C4632511616C18065CF619D1B401DE33E61B071445C2ED20EAFBEB08B
995A62709D02A14C3C2013BE9E762196C7D93E40AF54D9332A432E5A95530265
79468914DB59A63C27138E32F2E96C169A34A11524BE8049A1FD302780CA10E5
A9176A814CDFCE1344E69D8ED148345FE83C3CF2ADD79D173D0923F2782209E6
4DD294FA0A0D59A22C6C28ADE48BFA4746F6F11A65DA821428EC4E7B46C77754
3BC8B78D7C633A91D3B51552D6422A60BFACC7C423F544EEF82E4AB40C22204D
3F321C94B94ADA4B9A65BFD24AEF82D03D8C1D6D8B1299A64104CE9EC9086404
4C24F02FB926629EA467F4960000000049454E44AE426082
00097048597300000EC300000EC301C76FA8640000078649444154785EED9C79
681D4518C0E37DA1785FE081A0A0285E78212A0A22FEA115254AF1A83634EFED
BEC45A0415AF502C2AA828DE4A44E28120D5AA20DECD1F4DF77889AD473D88C5
60314D76775E9AB65614B5CFEFDBCD93F77666DFEEECCEEE9B351BD83F92ECCC
7CF39B6F66BEEF9B6FB6ABABF82908E4824049B74F544D47510D32D0C947A93A
6A57BDBE4B2EA0A190DD1BEA7B02B0E754CDDAA99AA42EC3A318E4F9DC40544C
FB1919A0F965C8054475EDCC7125CDFA4746802893F41041C85B6585D7904B6A
888A4E9632A64E8F6A5A6764F1940DFB22C6008EC17A3CDBFC776921320156ED
4BB2DA0197AEDF72A01F60D9705E2D8D927373015156803880B9802833C05C40
941DA0F410F300506A887901282DC43C01941262DE004A07318F00A582985780
D240CC33402920E61D60C721FE1F00761462A701F68E4DEE9B6638ADA46F393E
D5C048A701BADAA3D91BD282382F00AA8673730130E13C510CE7A1340EB5E685
0636D8C371E63970ACFA1468E3AA380F44AD37FA35795E014CA8C45D8AE93C59
004C40B10098001E162D00160013124858BCD0C08400CB06395F31C96B25936C
6F6C26C52E1C03EA9D5F4DEDA79AF612306B7E2800C600D8283250AFEF3A305C
DF3D4115E14565F085C3A5F452F0CA6BA70E478DBA5D9F3E027F8F522EF57764
04889AD3375ABB10BC92E5907AF729E4E8FCCA72F360AD9B540DFB3374031548
47E97EBBBE5BEAC0FC0DC80470C9A87D14041656B86062247AC206320D89A28F
2AD5DA3199819401A0B266F62000F70480FB3D0E38AA8C66FD097F7BB6776CDB
A1A983EC344008205C55D2C89410707EADD51C47356BD7A70AB1530071BD42AD
0B050779DBA0993FC17BEFC3F3121ACB30555F747FD7C98F91426090FFDD3B56
DF2315909D00E826B57B212B7642BB97ECFE45D9248BFAD76D3EAC5DC72BE6D6
43408B6F02BBEF93763015DDF9188F0F8443CC1A20DA6573DAC48407DAF52166
C6C6E928F4E5E4760353D6C9E7C2CD9FAC01CE4D3F063C6B46316BDD71C0F9CB
C0D2B04075D73F9686DB4322DAF8AF8E2C01069E7DC05AA654A74F10D9B1DEB1
996355DDFE960511ECC65E616D6505106DBC92696DA53B647D17B6CEC5ED2CD6
5B369D6F683387EC10E62367051076CC3719DA60A1A6C40514A51CACA747BA9E
0C3D9D5745291FFA4E1600FB0CEB746A87849DB662D6AE0815B0E985B2EE5C0D
1196C72B3AB98EA71CECD017332F13E9E43C9E7A98EF6601106374B406F02DE6
50477FEBBD11E72E9ECEC30C788192C1B0DFE1A9A32300D14D2B19E48F16E1C1
D5E2F55755C3325B0158DFF3741E2339658DFCD65C07ACC97FE114E7A9877A37
6D0D0481A9AB6478918657E8924ED6B702742678EB706FA4FAD642F76A6D929F
B401C2D47BCB2F345EEFE295590440305FCEA6A731F980579696F7D30648EF80
562D4EDC4E0440EC384B1E6901F668B3078B1A715100593382773DCE4C032B9A
7D1663F77DB8DD8863F80922D183B84E363FA039B5D60D806CA7DF7106A1EC8D
EDEB27F7FB65C2E8776C2D4C730AA39DC7B368A38B151ADE8A10A9AE18E48E20
20D0DFDBE859E12C9012A0EBD4FB3A8C21AAC0CEB9E71F22BED960EB816D18CE
35D4A01AE4162901A2E7C010B62748589CBA420082DB18D886612FA4644A1205
4A730A7B276BAD1A05CEFDDDC100C16FA50C663E8D040DFF12BF0311ACE5AD1E
0DCAC7EB5266B68960888A1E6DE795B0E9B278C4D91F6FB2373F545445B77EF1
BFD36F9003C2EA8665E5696A50ABB553C3CA05FE3F4D0D447B8F3A6983185D1C
614599311058D0FDEEDCA2E189BDE3C8E496491320D60F9AB3C6E707EFAC8C38
47F30A2C02A067975A7FB7C8639075BCB26436853DCBDF59CE30A697F10A2D02
204CDF1263937A8C57964C0196ABF6998C9D78236FD28F1F2068F6CF5C1D876F
71B1A2D3898CE82CA6F09C167E4D410483960780DF0583DDF63D9EF29E87D3BA
A3E37973E2EF73A5BD06BA836410F8904FABF098C78267BA5121B8793326598D
313C5C5779FC57DC9D2122BE89B194F4456DBF23BB70A35137350DA61CAD85F6
BB893520020118C03718DA37B94CDBB44F84E2ED5FC942035D2DAC926B595E06
A6A625EE449B0A40D3EF63B60BD90C42DACD0AA0BB16C2194480ABF68090CEF8
2A010BE01E567B10C5F94898E66709D0B3C39C0936447B08739B458044C31812
CE5F66B5E3E51E263C076916324B80D86E45AB9DE6FFA8585347C7E1C8F2F224
1031531593CB9983A4911D18D64F523F55366B802800EBA362CD1D86756B18F3
06A3DA8AE83296ABB52B31032B309AE3C1BB54283C7771677D3FB05ABB01531F
443C419111375AAD91CD6DC35798206490D761CDAAC073191C8F9E8232611616
C2805CC132F8B6435087151206B320E272817078DEC24E160B89C1B50B841AE4
5E96F05EDA05599D66FB007A84C766E4865C31ED93226579268914431A076A0B
4B38CCC8C7B35980392314247C011343FB714E00B921B2532FF80299A19D4788
46703AC65CA2F90AFFE15168BD545EB4350B9BC823992498374863EA2B68C84A
6E616369A533D83F3EBE57D028A30902F6E242D766F47D47B58D7CDBD037C613
3951A610B7166201F7B29E411EF412B9D37B30D1328A806E4016360ECC5C45ED
45CD726F64E25D10FC1D363B348B3299A651042EDE290814046424F02F25BD61
4DB90B33C00000000049454E44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 40
...
...
@@ -127,43 +128,43 @@ object FormHome: TFormHome
Bitmap.PNG = {
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA8640000045
7
49444154785EEDDC3D
68D5401C00F0FA81A08BE8E2E0228A4E224E4E82A083834807E9E0E20742
DFCB
A
B5604075DAC82A288D0497171109C0471119DC4416C2EAF151707C141B416DB
77D7670741FC8CFF7BAF91D7E4F2EE92CB25FF4B530894F65D92F7CBFFEE9FDC
470606AA9F4AC00A8151777693E3B2930E61971A848D15B5C1F12F0E4FCDACB3
022D3849803BDBF0D877D87C24DB736B1001EC0412B4F0C5C38F38F4D05F0555
E60B52400E8A1BD171DBBB10E305118917D169B6F685011D8FDD6C7873BBF3DA
E078334BCE81D08FF0B7F7A1F3C289280484849267066C78F4432F1634296F6A
136CB315885801F905B4021133A01588D801D123DA00881AD11640B4883601A2
44B40D101DA28D80A8106D0544836833200A44DB010B472C0360A1882800097B
67AC4B8DD041A31D2328003D7ABF02D4B8CC9D7E47427F1A415C0E11C8ED1BA4
75D4C8A0D67201E4884E73762B44E255D81E01E6E3A41B74C0BE8E44F17202D4
68053A45EB1E3B5E016A28C250C0B10A500310AAFE6004D06DEFD5D8A5BC2886
DB18F959AA7D62E8ADBF06105FFD4724F4E998EFAF542B9DF2536502E404632F
FCD57542F7F3EF651CAF9BF904E3C2390F6BA6BCF6388A55809AD7A102AC0023
02CECB850DC353EDF59A346AC5CB14817CA6194C0ABDED10FAC7F1E82FF8FDC6
80EFAF509348F9A9B2002E4ED37B10992845D81DA38865008CC30B30E109C51C
A2ED80323CE3883603AAE21945B415B01F1E249069A8B62D51076DE6D5D94640
19DE99C9B96DF5E6FCCE5C106D0354C10B6E487241B40930095E6E88B600A6C1
5341E437DE296FA1BBC56C0094655B481A976508FDAAF388CB8EC8CAC7FE1F3B
A00CAF936909FD0B8875198270CC04CAF3651DB2B256022AE1056BFB2488B5
49
B607A017C4B736AD43A503ECDBE6F1A56984FE100C200923B13F1EBB9E1A0F6B
1BA892309C263DAC8268140F23A00A5E10313244E378D80093E0292112F62DE6
714EAFDAF6D6792C59380D9E1451B0781C1EEFB2C3C312813A78491033C7C3
00
98055E8008AB3E2FC44D9133825734609678B9240CD1FD4E516D6029F08A8AC0
D2E01501582ABCBC014B8797276029F1F20294F5AA8C78F307551FE80BCBB671
27683A0BCBF0F87D1B1F45E30341324474787944207456DE5559FF2143448967
1AF0D4C4C2463ED147D06F17EDCBEB138968F14C03D6DCAF5BA26F45A2D3235E
6B073C5A45260289AA336ABC8200C7F97155B2327ABC22016588D031F0397E0C
23E32E2959F6EAF77F935938A60A772230F851C9D2A1F76A65DB9FA783577404
264534D625A583587404F62242A43DC9BD3F4F072F2E02A1FDB9C2AB5FD22DFC
CED3982A7C4FB45F38E6012BDABC3078F7258B19BD7836B4B4540498F45828AB
ED92469CAF2FF3E87CD22F26FC7CC680E8F10248C0183501C8DF4B9D76BFD6E0
7510612D053C8B5E8348FC9DF60B2F4EF289BC21031EE59E25DDA75D783DF5B
9
E6B6B6C3173E0F98E369363E852CDCC69E9BF8B416E6E09D56DA1F61B71CA231
D14737A356E52B814AA08C02FF00BDC136C379D4EFF00000000049454E44AE42
6082
00097048597300000EC300000EC301C76FA8640000045
B
49444154785EEDDC3D
68D5401C00F0FA81A08BE8E2E0228A4E224E4E82A083834807E9E0E20742
F3F2
A
A15C14117ABA0282238292E0E8293202EA293388849EEB5E2E22038881FC526
B9573B08E267FC5F4AEC6BDEE5DDE5E392FFA5291C943697E4FD7277FF7BF791
A1A1E6A711D04260DC9ED960DAF4B8E9D00B6D874E5495E0FAE747A7A6D76881
16DD24C09D6E13FA1D5280243DD30611C08E21418B3F3CFC88230F82158645BF
200564A0B8114D7B760762BCA844E245343BDE9E38A049E8F536717796950C42
A717DD83ED7E80BFBD8BDD174E442E2004943223609BF8EF7BB10C9BBE866665
A316885801D903D4021133A01688D801D123EA00881A511740B4883A01A244D4
0D101DA28E80A81075054483A833200A44DD012B47AC0360A58828006DFA56D9
909AE30F2B1D18410148BC7B0D608EC71C8E3B5AEE4F25884BA10432FBB6E31D
5632A9B5540019A2D999D9DC76FCCB80F910301FA54D2D425FF595E2A50498A3
1508B302E0D1063087224CC81F6900730042F51FEE03B46777E738A5382B866E
8CF82EE58E187913AC02C497FF111DFFC944102C97CB9DF1A83A01328289E7C1
CA96E3EF659F4B39DE7CE4E3CC0B973CAD99F1D9E3C8D600E67C0E0D6003D827
60BE985B373A35BB36278D5CF63A9540B6D20C1685DE322CF78F41DC5FF0FBB5
A12058262791F1A8BA00323CE848DFEF5B28E5D0DB4A11EB009884176102AC3A
44DD014578CA11750694C5538AA82BE020BC16713F190EF57803B48557671D01
4578A726DD2DAD4E777B2988BA01CAE0451D92521075024C83571AA22E8059F0
641059C73B63177A3E9B0E80A2686B12FFA2086150751EB3E92151FEC4FF6307
14E18591D672FF02624B84C09D3381FC6C5B8728AF96805278D1DE3E01A231
49
7701F41CBF6BE31DA81DE020BC706B9AE5FEE8C348401C8C47AF66C6C3DA06CA
040CB3E31F9441548A871150062F2A312244E578D800D3E0C920B62CFA2DE1EB
5CBE6ADB5BE7B144E12C784244CEE671F82E5C1C1E961298072F0D62E17818
00
8BC08B1061D7E7B9A425724AF0AA062C12AF9480C1EBEF54D506D602AFAA1258
1BBC2A006B85573660EDF0CA04AC255E5980A2519531D2DD2FFB85BEB2689B74
83AAA3B0088FF5DBD82C1A9B081221A2C32BA304C260E51D99FD1F22449478AA
014F5873EBD9421FCEB85DFF58DE809288164F35A0617FDD14C763256D8C78DB
780B8178D519355E1580307771935D57262AA3C7AB12508408FBE73E27CF6114
3C24258A5E83FEAF320AF3AA705402A37B9289D2BDCD80B25195AC8855038A4B
E2C21B35D1E1555D857B1F7AB83C97D0C7A58FE7652D790B23B9FDFB446060F2
12AB7E6953FC9DA70955F82EEFBC70CD7D5AB47971F0F9972C16F4E2D9D8D652
1E60DA6BA1ACB68BAA0EDB5F46DC6EDA0FC63DBE6040F4780B7309745C05207B
2F75D6F36A831722C25E0AE85E5C8192F83BEB070EF3717687C3C6BFA769CFA
9
175E4F7D366C6FABE9F867595F2D4B624BC8E26DEC19EBE36A58837752EA7C0E
BD613A3916FAE48DA84DFE46A011A8A3C03FA3E235840D1EDDBA000000004945
4E44AE42
6082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 40
...
...
@@ -184,37 +185,37 @@ object FormHome: TFormHome
Bitmap.PNG = {
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA864000003
AC
49444154785EED9CCD
6B143118C6ABA0DE54D083200A0A0A0AE2077814C18B17C1939E1451A1
DDD969
A917BD69F124E25D51D0FE017E9DEAB122429B59AA452808BDE841B0DD645D2D
2888D6F109DBC26E777693124813F629848526EFECBBBF79F2FD267D7DFC2381
A008A459ED743953E365A17EE233EFF594646A2EC9E4E3A452DB657C51C9A41A
2E0BF9AFD7A115FDFE44A82AF81CE808516782F41FC2EB5CEBA0C6779D010A75
87F0CC4D56A9523D5A0811EA7B5600F025FED73D09F9BDC5AED1769AEDFC9619
5FF9DB50253F9AFCD48A6B6322E4D942804B0F6BE9348C8D260AC091E9D62F91
9
F6CEC7C962967F347DA41A811930FA54C5D224050224093540CF90448808E04
9ACCA1A61D18E43FC078F5555291176C9E4C05360314326BEDF53BF48AADD0D9
89681E43426D2E186A3D34A9900A5C22343C5DDFDA3E9E93A304682240809684
0CC5A840478E044880ED047CCE85A9402A900AC40C28DEE52C5661C72ADC3F95
6FC0407AA179308D36F896E9B19C893411C2DECD6554A3DF0D88F2439AFDD846
8026022BF2FBA716B60F08757024CFD7DB9852813694BA942140027424E0681E
9502D12B7E4D2AD5934125A1AE86BC2BF726CE0D79999884ED655B13F06E4607
10F13F6956DD1F04C0FEA96F5B10D5F039268868661E99E0E97C2F0AD45F9454
E6F616864104161E9708B90878F7CFCDE41B8302A89DD183DA92A89E280999EA
30B9E0123A924151DF63036EB98C3705AEC6A998CA12A0E3DB2240027424E068
4E0512A0230147732A90001D09389A538104E848C0D19C0A244047028EE6546
0
0C00F5D210F6676FEB139E58D27A1D411AC362EA191BB65E14087077635A4C5D
DA90FF9B4E548F99207A0118C3426AF1F15579230880A8BE4FE253A0CAF5C1F2
2000EA300B2C95BF00C81A3EEBA127F8F9053E1AD5E7754FC4F42663CDF7D206
C60AC7C66F02B4A1D4A50C01C602105B99A774A4284E518E849FE4750403ECB6
61EB4581007625B6610C7A613530A1769A20FA0198C9C9D8006A7F53A1AE0501
103391B1180122CEFA62100007C5FC611D131815449C761F9A9DDD140440ED84
76269DA81D6A4482869D0626ABFB4CE096F3BDB481B6CEC4588E001DDF1A0112
A0230147732A90001D09389A538104E848C0D17C750A14F279D1A53698788FF6
6CCAE4DBD5DC1F782FAAE9D81A1DA1C08567C70B85DD98D3CA4542EC7209AD90
337D79BEAE63CB10E5B12D5F4AC45DB1369BF1B82EB3761E8BA4EF799F744389
58AEFB85A36C4F6DCED6B52853AFB0E85B327A3DD95E2BE0D8E1D39C0448606D
08FC0771B0369F7C7AB9CE
0000000049454E44AE426082
00097048597300000EC300000EC301C76FA864000003
B4
49444154785EED9CCD
6B143118C6ABA0DE54D083200A0A0A0AE2077814C18B17C1939E1451A1
F3D552
2F7AD3E249C4BB6241FD03FC3AD56345849964A916A120F4A207C1CE4CD6D582
82681DDFB02DECB6B34D4A204DD8A7100A9BBCB3EFFEE6C9E79B6460007F20E0
148184374FC75C4CC4A9F849FFAB7E4F1117B3112F1F458DE62EE58B8A323112
A7F9BF7E8756F7FB03260AE273A027449919F0FC0FE0F5AE752117EF7A0364E2
0EE0A99BACB0511CAD8548F5FC590DC097F4D9CA29CDBF77D9B5DB4EB59DDD32
134B7F5BC4C447959F5271CB98B0F26C2DC0858775751ACA46930A049998EAFE
9
2F2938E9DCD3231CF8F2C072146553E10C04B00489400502515453E0002A021
810E7352D38E38130F6256BE8A1AE5059D2743819D0059CEBB1AF65EBD623774
742292C730139B6B865A0F552A840217088D4CB5B62E0518B2F20900AA0800A0
2621453128D090230002E0720236E7C25020140805D20CC8DFE52C5461C32A3C
38596DA081F45CE7609A16466FA91E8B994807218ADD5CA6C0D7EF36C4F243C2
7F6C0340158125F9839373DB294A7670B4AAD6EB9842813A9456280380006848
C0D0DC2B0506A9F81A358A934E2526AE3A1B950B33F1C6CF807C19A9846D25AC
49F06E7A0790F6FF24BCD8EF04C0C1C96F5B025E7CF60962C8C4980A9ECCB7A2
40F9455163766FED3608C7B6C705693E4F3397FBE7A6AB8D4E0194CEC8416DC8
8A1314A348E43639E712752443ACB54707DC62196B0A5C8D533E950540C3B705
80006848C0D01C0A0440430286E65020001A123034870201D09080A13914088
0
86040CCDA1401F00CAA5218ACFDE96273CE964E36B0FD2382DA69ED1616B4581
04EEAE4F8BA96D5FF3BF495A1C5341B402D08785D4BA171CB1F2861300A9FA3E
F64F81A29207CB9D0028B7594459F182AA4533C8F296EB89FCFCA2A33EAB3111
D59BF435DF4A1BE82B1C1DBF015087D20A6500D0178014CA3C25778AC64C8CBA
9FCAEBB41960B70E5B2B0A2460577C1BC60469216813D44E15443B007991F906
50FA9B3071CD098034F71DF711201D57B8E804C021961F967B02BD8248A7DD87
6766363901503A219D49D2E6A1F64E50B7539015FB54E016F3ADB481BACEF858
0E000DDF1A0002A0210143732810000D09189A4381006848C0D07C750A64C5F3
BA4B6DE4C5367D9B78F97635F707DEF36A3AB6464728E8C2B3E3B5C26ECF69F3
7940EC7D8F2A2D834D0F54D5BA9E2D8397C7B66C2991EE8AD509C6D37599CDF3
B448FA1EF749B7951870F12BE4E5539DB3755DCA942B2CF2968C7E4FBAD70A18
76F830070110581B02FF012E5534E905A14669
0000000049454E44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 40
...
...
@@ -236,41 +237,41 @@ object FormHome: TFormHome
Bitmap.PNG = {
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA864000004
2C
49444154785EED9C4D
68
13411480EB1FA80711C5831E444444F460F5A2A0205850F12AFE1C1429D534
BBDB5204B17A2845C54B8B082A5EC483201E14EAAD201EE241B2B36950
112F5E
140B
5AB33369AD88F883AE6FAA4D93FDC94EF2B669367985A187CC9BDDF7EDDB
376FDE9BD99616FA2302754320C9F85EDD127D3A13FDD44A1968A6683F997AB7
38F061698C27009E43AD0C03C68783015AE225C10B37202DF369BD2F44CD122
9
02581EA066F15FDDCF3FAEF20598646227BCC68220FA430436BF758B9F2F3B61
25B21F96EA56AE55368D890E374CB0D281E9DF1BEEBF691FF4E8CBC4BD693D8D
677C4D45B3BD96B1F7780634454F4583C4A873A739B1CE6B30FC5AD52A1040E1
80CF2380AA164416A84A2AA01F01248048024871B24002882480146F080B34D2
F67688C56E42D47F3970C9840415241E7B809D4C6C86D5CFF7E9601662B057FD
8E337F967879868D3D408077C1BD12905009A02281A904AE271F996B55144777
8BBD051240A40DA802D4193F01AFFB18F8C849986C2E212F5B106F0A0B3C3D62
AF06803F4B5F75DE1605C4A600389B1922028834C3BA0798C88EAFD532FC7832
636FF3D355C50736AD05768DE4774139E0DB94EF62FC0F4C004937440258E615
82D972A8C4F133FE9E0056E073DC2553003A410009607902513AEC5A5BA0614D
AE8460FB16F8DB2770EDEE16C79917F6BCEB7A16AE354028803F2EF6B9B2C64D
008180EA5BF16F17C1CC0E0398F51F12C00A00FA6C4F7944000960D12B35CB61
0C5960C17F952654557D60C301847062D8352B8EB97D52D2E2BD6EC5BBB27C53
713FDD143B3C7018EFF406E5FC47E92422EEC7DA07EA56FE885C03CF148CC48
0
47E9746E03841B5F0B8A336EB9E3B744D6590433ECEB19387CDC6FDB19F4B95
D
340E5C377F20D600E5CD436CD6064A0DCA8C4C50B5CDB0EC8D10725C010067BB
9958E6A77447FAF30AB9D15166A383B6DBF6A79C85FFF7370ECA4446183CF97B
5
D07D22A0ACC751F02887C02049000220920C5C90209209200529C2C90002209
20C56B638116BF21D7A38DD9F247233D2702CB9F2D74EC4BF4556DD872B905E
B
D7D1A68608C98BAA014A41C3B48F352B40953280125CC3CA9F02885F9A06E454
D688DF95072F9500A974EA7931B1DC30C52138F6DE1345831BBCE8CDEB89A7A1
63C324E63D51C98742E5D4EFBB5D87B49A0A9339ED536DC8A09A919E53E56A71
710288A44C0009209200529C2C9000220920C5C90209209200529C2C90002209
20C5C90209209200529C2C9000220920C5C90209209200529C2CD005F04C7A74
8984A2DA74737CB74F09F14E98BC96F1961E65763B4CAEF877790807F9FCA315
879AC97E79F62D2E35137986447E48325A0A88D1A07AF5362EF08AEFB38BE5B6
22D48E4EB4645F738C3EA30CF7BD2F3A0A8891A0F87E3D6E1608F0DE48BF8D50
3B3AD1C30F9C05F25324D0AECA4F66D67D63FC5CADBFCB151D6D1A8908108188
09FC05B97D7C246CC6C69B
0000000049454E44AE426082
00097048597300000EC300000EC301C76FA864000004
34
49444154785EED9C4D
68
D44014C7EB17A80711C5831E44A488E8C1EA454141B0A0E255FC382852AA9B
4DD25204F1E3508A8A178B082A5EC483201E14EAAD201EEA4192CC7651
112F5E
140B
7E24996DAD88F881C637ABBBDD4DB2BB937DBBDBCDEE2B0C3DECBC49DE2F
FFCCC79B37E9E8A03F22D034049296BB4B637C50B3F810956206AAC97B8E8DBD
5D58F261A9969B00781E95320C2C77B43440C65F10BCCA0252539FD68642541
9
1F2380E5012ACCFED5FFECC38A5080498B6F530C8713C470888A61FFD6987BB6
EC809548BF5FAC31BB4B14D5E2BD7E98A0D2CBB9DF5BEEBFE9EC0BF86BF1BB39
3FF5A7EEAA48A3BD9A7276061A34F940A44662545931A7D60405E35EADDA0502
C83D95114069019102A5518557248004104900694E0A2480480248F39650A06E
385B602E7603021B174B2E9990A04A99C71EA062F10D50BEE726B349E6BE1CF2
BCB975E2156836F60061E978CEBF12105009A024816C0037108FB4BB24CDD1D5
62AF400288D4802C40CD728F2A06FF08B1B969186C2E202F9B376F0B059E1877
566A86FDB3F85577BB6B01B12D00D63342440091326C7A8089F4E46A35E51E49
A69CCD61BECAF4816DABC0BEF1CC7685F16FD9BECBB0FF40A032E9874800CBBC
42AAE98C1475FCA6FD8E0046E873FC5BA68A694F114002589E402D3BEC462B50
67D3CB616D7D53B39CC770EDFE0ECF9B53E97937F528DC68801A731E15F6B962
8F9B000201D9B7E25F16C14C860184C61E10C0080043D2531E12400238F34AD5
7B1A430ACCF75FC50155D93EB0E500420C6FB4D02911CFF3F749D0D19FF13BDE
9776D717D6D34CBE3500C77295C0A4DCB07F140F22FC5EACFB408D650E8A357
0
CE29912617E27467D2E05FF38E5B36F3CFDF12696F01E430BE9A81634F86A59
D
41A0F556BE4EF6BA99BDB106286E1E9213BBC1A961119129B5DBA633671D041A
2E018053FD165F12E674AFF17999487414D1E852E9B64363DEFCFFF98DC32290
5
1099EF8BDA927D2320ECC761D02887C02049000220920CD498104104900694E
0A2480480248F3C6289039D7C57AB4354BE6504DCF89C0F267231DFBE283550
B
5B2CB760FD3AD1D610217851354061A89BCEE1760528B30D2005576799E300F1
4BDB80CC466F9C3BE2E0A51420994A03CFA796EA26DF0FC7DE076A51209A723E
18D7E34F2AB60D8358F000A43352D14EFEBE7BA0DBEA946132AB75AA9D32C846
A467D5B9465C9C00222913400288248034270512402401A439299000220920CD
498104104900694E0A2480480248735220014412409A930209209200D29C14E8
0378D2985824A0C816CD9CDC11B28578BB92BD9A0A6E3D8AE87625BBC2DFC521
1CE4F3AFAD39EC99EC1149E371D933116748C232646B4B25426BB07BF5262EF0
0AEFB3CFB2374570B37E558BF29A63F419654801DE5D3F2A115A860CFC6B7153
203CF4D7A2DF8EE066FDAA1EB8EFCD139F228172457C32B3E98BE59E6EF477B9
EA479F5A2602440049E02F0E2F7B88CEB519FD
0000000049454E44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 40
...
...
@@ -291,69 +292,70 @@ object FormHome: TFormHome
Bitmap.PNG = {
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA864000007AC49444154785EED5C59
6C1C45100D9738C50DE2100101E28B0FF842080484FB101F5C0204824088E3DD
C5822807F90147C0077F118720114228E4235C1224812FB08394C43BB3592556
3884CC616239046FF7DA8E130725182FAF7AD66177BA67F698A999493296565E
7BBAABBADE5477555757F5AC59E94F8A408A40C211C8F68D5C39AF6FFCEC840F
3379C35BD8377472C692DF666D59C9D8E29FAC2517266F94091E51D6120B08BC
990F8198B3F79C93E021276B68D0B8EE5A009DEF23D7246B94091E4D0A60C097
9302980218108180DD530D4C010C884080EE5DDBFE3C0F6ECCF7A9156E034402
0F3EDF0E1D3C38D485BF2E6F83E4D1D3C50F3C00BAEE8844A2D312B7666CB932
6389A51DC55DA7F809B9A87FF7A9595B2C43DB0F4D1F188E9F4D9A87FFF534A2
7D58828BA9D689B56ABA66BB65751447CF300943FF477BCB03A0435B36C3F3A3
033C3F1053F05C2AE5D63CB7D690A6CD68620A5E8BE0B9347176CBD3164B02FA
7C16FB9AF7F4C6C193B276E9262CD68BB170AFC65AB50503FB03BFC76B346602
7F0FE1791E86E0237C5F427DA8AF691D6BA479DAFA6589034677041A9ADB2C2E
7A61FBD899EE0F199AD80C4297254FC780E7E2F31500D9DFC682ED2CE6969C24
B72153104F66378E9C46027982A740124F34AB69B5D33B36A0DC8CBBB68E5C01
A1DF4304775FDBA0D5042F5D3426F0F717B5D6F6D073800790EFA7F134B3D625
0EBC057DF262E54F51C8DB1B003F17A1FD6735E0CDBC505F10D11ECF672742EB
1EF9B4721CA6CDA2EA546B0A04473BC54FE8F31DA6F7974AAB6CD95BDD739296
3545C799E2FF6B9E1B103F1013A1810BF2639741EBFA1A090C9076A1DDFBB97C
E931B587AC548EF17BFBD92DA39702DC8701F4BB0068A7277D1FF09AD1C45841
CCE5E51DD0A2516FF0C41406F839DADCD65DA91CDBF67401D8648D01E8B63A5E
4D8097581021CCB30066CA081E6DA72CB9868C49DBA0193A760D0C9C08BA6F40
93FFF59BB65E3C1B1896E8B6687EFE1784FB216797AF0F133837AD4CA1747336
5FBAB71D1E0D0CCB927668B6D447F975351BF65A0D04B06F7B39BD2D31616E4C
7EA2D9A1962B595943BBE6D0D4F1F0F0E7B2320F8938F9891E324C53282C2436
3A19C7C793251D3C39D95928DFC3C63844C27EE0D1B214222B17296505658F41
F30E66ACD27D7C8CC3A31C1F789041190DA3635B9A1F9E887C9462054F9D4819
7C3D728AF9440E8F72ACE09118D0BE155A80D292BFCE4445C213357C4AB18337
7F6BE94253188A7620E18B1B2E45F213BDAC2DAFC1A89103D3F43583F66D0857
541E6AB9BCB8C5C35F8DE638B2A35839016ECB6E37809D85D2B53C22874F1563
7FC7A000FB28D01B3E371745350574CBDBCBCE384406748E0119060C72F03BFD
58273E7033A6505488F24542CA8918D5C716B1AE7FCDCE9CE277F5A123394989
D6EC8CC366409B00573C910C23EB9E3D6797AE326CD9D6872D5B54F45450D6A5
856464D8F867ADD2E306000FDBB47E8A6C6BC6D0162F3102285ED700CC8FDEC8
C69099301D1E1914620D1B5BAC116B35953FCC6B22204FDD41159D8530022836
D5054A7182C6C62C22C27A86A91866630D0DECAFD74031C8C62C22C2EE701C1D
ABB2B146F465B03E542FFBD998454418F2D0B973DD59331B6B58ADDF5C671D3B
D8984544385200A1DEDBEB9D68B1332239D9D8409E5ED7ACDACBC9AC2E7C4F9E
3B1BB388086359FAD1A514436CACE9505CDF808F5CC0C6909B30B6737AA698C8
B3B1858FB45CF3DC398FFCD8247108532E4EA48E3422180FE91A289631CBC946
3E53283FAAC705C5523686A6AD0F95BBB33164260CF0566900223D8495ADDB95
81277FD0ABE68275200189535698169AB3E5DFACE12CB56E58E24D7D3F5C7E2E
A03C917757E928710454553E9E1ED22F468E40408600F0130DC0BC7C2620D9C6
DD49F5B5690C405903918D87D5520BCA4F74E76B933B13C9A1128DD4A9D3709D
27586273A3F4DC96A4646CAC6A4DF459B48A91653D692A3AC11418D3C3E1C93F
5CCAE6E575EE7361CA6CA5E38AC800748C897CC5F01647286726D281B4C0CC49
053655988BD52D9009A769B5A676589FCA724352A732C07BCBB0F39884437D49
38A8B4482553900F1AB490EE905ADE2229F6E698314F19C78A026C76E67E0CF0
563FD6DFAA98464279627C438077A729A188EA58BA37568E8F1540C7A020AD4D
B36A622A092066EDF2DDE64A29314AC540B18237C31CB9D05763DAEE3169A29A
CE0DAA8FB884A017684C65431D4BE252F154AE8947DD2D34607D94D699928728
53D6B4E6291706C5405C2F2D105DCFCC4FBA9C1029712A0989591B61D86E0770
A6CC2B2A3EA42A73C6ACFB40F0399D49138DD3B9BA46E2D9268E6D1FDDD907E0
D619B5CEA9DC3C8867734310919F845A138D86A56EFB57449B79414261EAFA4D
2728AA975AD4DE2A893A168ABEF04B1E2207A7F64C4F0531189A03D08E6FAA17
DDCCE9DCB2FB7CAF6164368D9FF5FCD6F20D394BBE48DAD664E57B0F15038528
5AB4A41C675B683B16CFA9A62E7395FBE9E209CA84A0A3547CFF1DDFF7FAF531
B851A36ABD635E732341D3D9F6C9974D0188D640695CAD5E057F454771E2DC48
848B9249358AB3D8144F0C0A245979BCA057A904234A99E2E145E9B5C82BA4E3
0168CC2FED832786D5750176F92EAA1E8847980470A5453E67CB07D4759A7478
0FA3524D2319206D55DF9D4B28D6528D0AF99374737802869E0E21452045E0C8
47E03FFD85632A58B84AF80000000049454E44AE426082
00097048597300000EC300000EC301C76FA864000007C949444154785EED5C59
6C1C45100D9738C50DE2100101E28B0FF8428888FB467C700910080221DE9D59
2C88C2911F08023EF8431C02228450C807A70449E08B38464ABC33B3B6128B4B
C81C012BC1CC4CEFDA313828C678A9EAB1C3CC74CFECCEEE54CF389948ABD8DE
EEAAAE37D555D5D555B36851F1AF40A04020E708E855FBFC65D5891373BECCFC
2D6F4575F4C8B2C136E9166B962CFB1FDD642BF2B7CA1CAF4837DD128237FF41
102BD6EE9372BCE47C2D0D346EB51F40EF67FBA27CAD32C7AB2900ECF2E11400
160076894097D30B0D2C00EC12812EA6F76EFBFD14DD70BE29BC700720227865
CBFD5A048F35B5DA1FE77640F2C09912071E00BA7EBF44A26CBA576B167B4B33
DDA77A86761D1527E4CAE1B1A375CB5D0573DE957D7483FD20D33CF85B5F2BDA
0B125CCD72CB70D89F9D17BA6C3966CF50E3389930F877FC3E02A07D4736C9F7
070678712016E085542AAC7961ADF16B62015E42F0429AB838F1B60593005EF8
E3CC6DDE83FD3B8ED02DE77230EE4FC0FF6B213D3450B29C5FC1664DF8346612
7E1F85EF0D7004EFC19827710ECE95D9B1569A27D8AFAABD5766F310D4CA56F7
8CC7B68F1F1FFEA0A3C9CC21F49AEC5858F052F87C5EB2D89E0E0CB667CCAB6C
0AC306ADE6DEAFF7DBC7A04091E07190DCFBDAD5B43847931D7083F6791002BC
59AEB2BF3A06CD97BC0CD19884DF3FF57BDB7DDF037800F2AD28783BB62E77E0
95AAEC4C8CA778CA3B1A80B810A1F3EF7CE0CD6B4E2C88301EBE5F9C9996F919
DFF551F310D8362BE7B65A5B2078DA697F0F598EAFCA16FB8C6B95C536CF9D39
51CBDAA2E36DF1FF352F0C481C88B9D0C092317E8E6638D55602830DDC050EE4
ED8AE1DCC3CF90CDE641714F5F1F689C0DE0DEA999EC0DDDB07F8BA41F035E3B
9A98298815835D075AD48806CF9E0163FF0968E735AB9BCD833BDE2E00367A63
00745B80571BE0E5164410E661006F460A1E1EA74CB6AE179C49C7A04926F68E
8C1C0E745F2A55ED7FE3B66D14CF168E45DD112D2EFE2A559D6F2B56FDD23481
0BD3D26ACE15602B6FEE84472C881077764233D11C1ED7F90EEC7E0DD42CE7B5
A8A0371113E2C11827CA760E667148598313B80AB74E4484BF9494794AC4314E
8C906116536129B111C9608C5732992382C7A6CAB5FA4D648C53241C071E9AA5
14598548712FC8FA249A37AD99CE2D748CD3A39C1D782003771AD2C0D6599E9E
88749432058FDF4849623D0C8AE9444E8F72A6E0A118A07D2F87B50F4E073FCD
6745D213357D4A9983B77CD0395D9686C21348FAE2A64B11E3C4286F4BEB307C
72C0367D41D03E836D4C57541A6A15C3BD32225E55731DD933D43C0C4297B130
80E59A73318DC8E95385B5BF2EAC1FB24098E84D9F5B8822DF02A2E7DD4CCE38
4506788F01328C48E4A00FFAC14EBC13668CA9A814E55342CACB1805738B7064
FB829C39E6EF82A923368585D6E48CD366808780503E111D23E999BD62391708
6A6FB20D69CBA68A1E4FCA86B4109D0C197FDD74EE9500B860CBFA31B32D3813
CB7D9A1040F7450140A3B1848C213161BC3C9228C43A32B66064DF17547E81F7
44803C818B2ABC0B2103104A19B6F801C41B3432668A088B15A6F64E32D6A081
C3410D747790315344389C8E23550A4879EF08A6EAD9B02239C9D8803C78EF1C
B86BA66356653F07B630D4089331534458298025836D0F3C2D084415C949C606
E4D9EC970982E93F299905D2F718B9933153441892C2DF054F56F628196BBC14
170FE0F669640CA909C3714EAC14730C32B69048784E88DC29AFFCC824F10863
2D8ED2401A321877881AE8AE2296938CBC56ABDF2D6464A00D828CA1ECE883ED
EE640C890903786B0400A13C84942DD4FA054219488F4F47F55C902EA44BE258
1526A4E62CF637693A8BDB0DD37D453C0FD71FE9521EE5D379394A1609555E8F
27A6F4879423D0254300F0430140833DD425D9D6D351F5856D0C809226225B2F
2BD108AC4F0CD76B6338A3E4520957EAF56984EE134C776BABF2DC4452120EE6
BD26E22E5A43C832481A9B4E4A863D2EA6C3F37FB9046D169784EF85B1B215AF
2B9401E83913F6ACE429DA5833A374210998F152606987B9B336019974867A3D
B5F64E8921DE98D7AD0CA6E755E1A143B71304D467A5834A422A5A8DDD2ED1C2
261EF91292221F0E3BE601E95A294F1EED48054FF503F1A9DAB350509E9BD810
C0BB5E5650847D2CABFB9B87B62327D9187428BCAC4DF06AF64C1E40D4ADFA8D
F24E29BB81CD4064C024210CB5D017425CB55BA6897C3BB7E83E4AC22BC9587C
80D25236E863C95D291EAF3589E8BB853CE20695DE198B87B0525666F3780803
CD40491E84B2B191959FF872422889E34548C4DA088EED5A004E567985CD87B3
CA8A283B451D3551BA9DE76C24DE2D531CFBF09D7D00DC7AA9D6799D9BD3F0DD
D24EE5523A0F6DA2DCB1048E7F4330665937A930AC0A9B4B8A8AAD16FEB74A42
1F0B665F9482D02D330446560A2271347BA168E94B7CD10D0A591E183B358AB7
B665E2844707EB97554CF6386A5B9B9DEF7DD80CD4AD3C99CDF7826DF1C412B9
D5F8CB5CD91E7CF1045642E0552A6CFB5FF0BA316E8E248C6A707B476C739500
EB1DFBD833B2044432505A77AB23F8D882D1333479B212E15432F1826E78BD49
F85A20491B7FC458F4F240FB796CC150295336BC78796D63095E0F80C6FCD8B9
16DA3BF9EB02ACFA0DD83D908D3039E08A46BE62B1DBF8EB34F1F21E9CCA5C19
C9086A2BFF195E42814E097B54309EC43787E760E9C5120A040A04F67F04FE03
A256613E52F1EBD30000000049454E44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 40
...
...
@@ -361,7 +363,7 @@ object FormHome: TFormHome
end
object btnAbout: TD2ToolButton
Align = vaRight
Position.Point = '(1
318
,0)'
Position.Point = '(1
276
,0)'
Width = 64
Height = 64
OnClick = btnAboutClick
...
...
@@ -372,47 +374,48 @@ object FormHome: TFormHome
Bitmap.PNG = {
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA864000004EA49444154785EED9C4D
68D44014C7EB17F8ADA8207A10515111918A47A5E2C10FE841445450A4A0B8DD
645B4BD18B22F4A288E0071EBC78514110F4A8E8CD1E2CDD64BBD28278AE881F
DD9D6CBF0EA288C637DBDA66B3D9CCCB4CB24DF42DCC29339337BFBCFFCC9BB7
933434D08F082482806E161AB51CD3B5ACD5212CB9A10DCE41B51BD652611B8F
7ED3263BE98693C95AFB317DA54DAB25D3C3D6CE38DC547E78996658CF75D3B2
D1C560879D86B76647D6A3DB3AEE03F7ED7703D00CF600DD97C17EE8867579E6
20DAF62C30F635DAE0BF838F0BC0297BACCE1981A89BA54381E171A3E306D0B4
C62F0C7C5D5477889AC96EFF23006D90FEBEFA03F4986F34A3D8ACE58A7BFD4A
C61C5BE934B6A57B70BEA88DE77583ED720F3A9D635B847D19D6F5AA07EF5245
5D607A4DD81DFD23CBEB7273859BF0159800124005028A4DC903150142B07D54
37D9A0B3F0005CB1DBE0CD933A07061F69442D08A0225802480015092836E75B
32D88C77390B0F8AB1DD76F67E5C505E110D760B7635779250207EBCD296675B
B1638CAC5E3A57DA0EC03E486D0583647E22A80B53D72FEE3491C111757CB677
740518F02589F02A6C3658AB68AC915C873CDEA5C4C32B7B36FBD465DBB32381
E4D729C07BF16F00B4ECF6BEC246698020C37B301F8C380BCF508B3AD44CABDB
0910E6C2319E958E7BE18B5CF5832F348AC65BF3BA6C1C5805101E82B411756C
588E36AA162502887E0404108DCABB220124808A04149B9307124045028ACDC9
03E306309D2BEE9CC8C84C9754DE9E27B293E2401121C1750248001D07A91476
22B21CC90327C9A5F2E3ABDC09004C7A87004E02A46402CF092A48980012C040
D33805D2817055572680045091806273F24002A84840B1397960DC00C25F98EB
7820E92CC79EDA734476D24E444488B2318A84082001F42210FA22E2F5524B57
B73D57849FE640CAC684935095C9C6700F050F7C5B71B888CEC64CBF2BECF7AA
976E169BE00FA877EE033AFC749748F671B81EFA1C88F5C0737DC53570A8F231
C0FBED752E90003A8E7CB93D50CF0EEFE1E7FFFC0E5412401F809EEFA5B9CED8
11400228374563E6C00A0F843990CF85B00A0FD02A0CCC03012CAFBEC526FEA8
28900E1048674CEB082CFF9DCE1D4A9400F9B76060B57F08F7F8C63D9DDF5F4E
5FFFD97F22FC501328E2224C0DE31E71E62BBDB7B04915640471A075DF6D2CE6
9B09617B20FFE206BCF4F2DE3F54B2BE83675E4DE53F2F94051901C062B3FB7D
0FBDBBB05864605800B95CA1AF27415EDAE1EFE7C9CA3A74801C147C7CE73818
F50C067183EF3844F0C25844FCE48A85095E1B58D69100C40073D751F140945C
61F18070E900D4BD0B0FF7672DA8502790AC130D102557838DC2C369AF58F1B3
C33B00E21BDFF91129EB440244C9B59CA4608FCE6787567B2A827F24CD60A701
EE90604FEE2BEBC401C4CAB5ADAFB41B33954C7CAA4F5ED68901282B570CC4F2
222629EBD8030C45AE588A12B28E35C0B0E58AE51844D63C540BF57557AC91A2
30A656A67ACA588FD555F6DEB5DA6164ED6DA7C2115FD941B8E3C09A2BA36875
9535A0563BA4AC2BED8D29409E49C1AEAE6173C4C87A1A62DC00D641AE58E028
59AB9CD2C71AE2AE0773C9CB2AD9D65BAE58E305B2CE98C5CDD8AE42ABA7E54A
272AB338332757ECA0BC640D91436F0300C6F6116ABD8C593A089BF99BB0053B
85394F13EACD153A6B35AC6DB0B7BEC693B7677AD81285AEA829112002F127F0
07FCFE28CB9212DEF10000000049454E44AE426082
00097048597300000EC300000EC301C76FA8640000050149444154785EED9C4D
8814471480373181C4BF0413103D88C4604208C190A362F010153C4808513088
60707BBAC75596E41211F61291801A3C78C9250A81801E0DC92D7B7099EE9A1D
592178DE104CB2DD5DB3AB7B908868E7D5F8B33D3D3D5DAFABAA67BA97B750A7
E957FDEAEB7AAF5EBD7D552323F447042A41C061FE36BB193AB6CB4F4A5B73EE
ADF8A0C63CBE562A93D26F8D85879270EA2EFF04D3578DF123F5A970E3D0E18E
B6E65F0385AF3B8C47E8E685FBE38A5BEEC266B46CEC3D96CB6792006A5EF823
BAAF86FFC0F1F8A9E1418CA21740D9DFD10A3F1B7C59003ED7878F0F05A2C3DA
7B73C3134A970D20E38B5FDDFA77D5C021820FBAB04C0046B617EE1A3CC0147F
637BC13EBB197C9CD5EAECDE1B71658F4CCEBE229349FDDD0B3FEAF181CDF01D
695F1E3FDBF3E11356311098690EFBE4CCC2EB0379B9C64BC40A4C0009A00601
4D519A819A0021D8FECC61E16CBC89005CB3DBFCE255F581F9475A900401D404
4B0009A026014D71B12583CDF844BC89A018DBED78E3AF573B2BA2179EB759F8
7D151AC48FA78FB7C277B1632CECB95AB3FDBEC5823F95B68279323F053C6B35
FC4762D2140647D6F1978DBBEB9C06FFA78AF0BA74F6424B36D6427EB73DFE4D
E5E17566B67F67228A5E2C045256A700EF97E501904763D3FE166580E0072E59
AEBF106F22432DEBD0667C320ED062FE3D91952E7B138B5CEF87F7B7C9C6DBF7
77D538B007207C0465250628D889367A16250288FE0404108D2AFD4102480035
09688AD30C24809A0434C56906960E6033F8F0494666A98DB6A297657A521C28
2324F99D0012C0582195C64E449523CDC0A7E4465B8B6F26130098F40E017C0A
9092099D9C206563B0AE88E2402CA93ECF114002A84940539C662001D424A029
4E3390006A12D014373E03E15F989B4420196F9F5F8D56C8F4A49D888C106563
34091140029846C0B80FACA51C6A99988C5E92E1271F48D91833095595749698
A150957AB3ABB8886A6396CE0A671DF57258B0D371833F92053AA2BA4B66F665
F8DDBC0F4C396C9806F0D874B0018A2A7F721AFEE3B4BA4002182BF94A0274DC
F91DA2FE2FABA0920066004C3D9796A8B123800450CD456356E1AE19083E50F8
4288036FD12A0CCC7301ECACBEC14EF1A92890CE1148D719FF1496FFF1F80EA5
4880E22E1808952E5B8CDF17335DBC5FCDBE7AA58616C624552902A0286A828B
23BE06D7B0985CF1C1527E8310EA6D5D900500E43F2495C5DC99601AA0B87103
7292B73343258FFF075564DF8EB6FE5EA90AD23840714347F2BC8733E9AF9629
680AA03057E8EBE73C8776C4F93C55B3360E508082CB770EC0FD31D76010DF89
1D870C9E894524CB5CB13055CCBA10801860267D20C65CC5E201E1D26E78F622
EC821EF6836AE534EB4A0344996BC3BF0BF0C6BA567C77FE03B0901B99FE1169
D695048832D74E9222B872C29D5B9F6A11E292342F3C0C70E7B240CACCBA7200
B1E67A7CBABD1DE34A3A57F56998756500AA9A2B066267115334EBD2033462AE
588A0A665D6A80A6CD15CB318F598B50CDE87157AC92B230A65FA6FAB9B229AB
ABEABBFBC961CC3A5D4F8D125FD5412477227D5746D9EAAAAA403F39A45977EB
5B52802218C6AEAEA63962CC7A0962D9000EC05CB1C05166AD53A58F5524F91C
04B5BFF698EDA0CD15ABBCC4ACEB2CD88AEDCAD87376B37D300E7098E68A1D54
9A59DB6ED01801C0D83E8C3E5767ED3DB0E13F0797207E81A9A731FA728DCE20
01F11E5C7F7246246F8F4E856B34BA2251224004CA4FE07FA8DB26FD7BEBAA5B
0000000049454E44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 40
...
...
@@ -433,38 +436,39 @@ object FormHome: TFormHome
Bitmap.PNG = {
89504E470D0A1A0A0000000D49484452000000500000005008060000008E11F2
AD000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000
00097048597300000EC300000EC301C76FA864000003D449444154785EEDDCCD
8BD3401400F0AA2028225E3C888A5FA027C183881EC493A0E075D9ABF8D5A6B5
2C7A56D7AB171504054114114551D4BFC093ED4CBAEE5E040F7EE1AE8AED4CAC
3745D4F8266B6BB79BEE6E3A79C99B6616E6B274A6935FDE4C929997E672F6CF
0A18295070C536C715C52293A36916D5879CEF2F320671E8A5BFD461F27A9189
3F452E7D0A05FA73D51844D5590A68DD7D3002F1246B6E7298F84D1150F5893C
22CC7547A8E2B5FA451AD1A9CA9190A173B4C8EB3B922805D6D81B7202C7603E
FED6F97FB288A1806E635F5257C09189E6AAD92750DCCCD7E42E2310A902AA13
68042265402310A903924734019034A2298064114D022489681A203944130149
219A0A4806D164401288A603A68E380880A922A60D587C565F81B99C96AF3637
A22E8CA40DA80E0E96AA5E6121660210F00E5B40CD710280173036B53211812D
FB60FD8F8BCB80F9B89F0253C19BEE48CE14A06610E71C2E2E59400D450BA881
175CCD6D04EA096606B05495FB1D2EEFC19EF435C7F5D6EBB1FDAF9D09C01217
3BE14AFBABBD69CEC554B956DF120762260001EECCAC7DE09810330108437638
ECA9030E5E3B12330138EAFB8BE186F70E06622600D55C37F4C05F82810827E5
6C573ECD8F5395C96571CCAF3DDB486B350603B13CFE79757B650792451DEE9D
46C50B6E3EC3B2B3124A2EC24054D9B625EEED71DC2F9BD1F1D206C41CCE89E0
5100341E31CD21DC1925C170E6F22EC6D519351AA900069108F317003EED8598
AFC8B5A818FD344E09707E44F99A1C223540E310A30296995C0977FC5760BE7A
01F75C13330A17EF60A1E07D4CE563AF8D26F86E3A91181510367E6E61EDA045
6A978947FD4C59B1D7890A08D1075146E0753026DFC68ED14F83910199B84F01
1086F1937E8E37F63A5101A79F3715626C735DF89CC9C464EF39504CA16F572E
543A2AE042DBD5F91CC633B24E7FE6AC4B0DD0283C2ACFC2AD336C1C1E254023
F1A8001A8B4701D068BCB40131F0A6335EBD03A58AB71DEDCADBD9705A57610C
BCE3B5C61A78D4FCD0BE7F845F1F41474C0310032F184D5C9C9F71F3CDC4CF13
639F96A322260E08BF0783B1A5F90F70F0F3036D6682E678B0B9319A80363B4B
1350552FB8DE41B5A213FCDCD4F3AF1B626832682233B931718175B763013565
2DA005D414D0AC6E23D0026A0A6856B7116801350534AB138A406F586D1B9A56
00F046E22F1B423AEC310A1BE5687D800556CDC09EBB7A8937B662BCE88C0612
25AD84C97154BC56E39026719BC40147C199EFB390A50FC171281140B56A0BF3
C7C30142FC0EC7534804AFF34B0A4CEE86159273EA6A6668B908A3A90C398CEB
12C7B35F6805AC001581BF23B97782CB75922D0000000049454E44AE426082
00097048597300000EC300000EC301C76FA864000003DA49444154785EEDDCBB
8BD4401800F0554150446C2C44C517682558886821568282ED71ADF8CA635D0E
ADD5B3B55141F0401045445114F52FB032C9EC9E778D60E10BCF072699B8768A
A8F19B9C7BAEEBEEDD65275FF2CD660EA639766627BF7C334966BE6CA5A2FFB4
809202663DDC62D543DBF6F8689145F4A112C70B94411C7A162F363D7EC576FC
5F36E331856279FCB23288A2B314D03AFBA004E271AFB9C170FC9F1401459FC8
23C25C77882A5EAB5FA4112D978F74193A876DE66FCBA3985EB0BBCB091C87F9
F84BFBFFC9227605AC077BF2BA028E4C365774029A5E78CD68F01D4A20520514
27500944CA804A205207248FA8022069445500C922AA04481251354072882A02
92425415900CA2CA80241055072C1C7110000B452C1AD07EEC2FC35C4E33DCE6
7AD48591A201C5C1C152D5732CC4520002DE410D28394E00F01CC6A6562922B0
659FACFFB1F022603EE8A7C054F0B233924B052819C4158B851734A084A20694
C04BAEE63A02E5044B035875F95E8BF1DBB6CBC7AC7AB4568EED6FED52005659
B81DF69B7FB4267B93F9EF6A0D7F531688A50004B853FFED036784580A4018B2
C3DD9E3AB288C452008EC6F142B8E1BD8981580A4031D70DDD8D176120C24939
DD7E620C8F7F3BE14C2DC9627EEDD94651AB311888B5898F2B6756762059D462
D14954BCE4E6B35B76564EC945188822DBB6CAA25D56FDD34674BCA201318773
2E78140095472C7208B7478918CE26E3B730AECEA8D1480530894498BF00F051
2F44C3E1AB5131FA699C12E05C8806E32FC8215203540E312D60CDE3CB2D165C
82F9EAA9E1F2C9F662B2F0352CC9BFC9A6F8EF7B6D34918AC4B480B61B5CC7DA
414BD5AE17DCEF67CACABC4E5AC0E92823F03A98C35F658ED14F8369012D2FBC
430110A69087FD1C6FE675D2024E3F6F0AC4ACE6BA1EED38FE54AF132596BED0
B72BE72B9D1670BEEDCA7C0EE31959A63FB3D6A506A8141E9567E1D619560E8F
12A09278540095C5A300A8345ED1801878D319AFD1BEAA136D45BBF2B6375CD4
551803EF68235865BBFEDB99FB47F8F51174C4220031F092D1C4C2B3FFDC7C3B
FEF763E31F96A222E60E08BF0783B1A5F90770F0F303756682E478D0B9319280
3A3B4B12505437EBD17EB1A293FCDCD493CFEB32683269A234B931598175B6A3
01256535A006941490ACAE2350034A0A4856D711A801250524AB138AC068586C
1BAA5600F06AEE2F1B423AEC110A1BE5687D800556C9C09EBD7A95059B315E74
4603499356E2F10954BC56E3F0DEDA0D12079C0667AECF42963E04C7815C00C5
AA2DCC1FF70608F12B1C8F990B5EFB97C0EAC84E582D3E23AE662A16C81C3B0F
A3A906398C6B72C7D35FA805B4001581DF543B76A4C3F234870000000049454E
44AE426082
}
BitmapLayout = d2GlyphCenter
BitmapSize = 40
...
...
@@ -472,7 +476,7 @@ object FormHome: TFormHome
end
object lblLoginUser: TD2Label
Align = vaRight
Position.Point = '(1
102
,0)'
Position.Point = '(1
060
,0)'
Width = 200
Height = 64
Padding.Rect = '(0,0,16,0)'
...
...
@@ -497,10 +501,9 @@ object FormHome: TFormHome
Padding.Rect = '(16,16,16,8)'
object btnP1Hand: TD2CornerButton
Align = vaCenter
Position.Point = '(3
32
,0)'
Position.Point = '(3
24
,0)'
Width = 100
Height = 100
Padding.Rect = '(16,0,0,0)'
OnClick = fieldElementClick
TabOrder = 0
StaysPressed = True
...
...
@@ -1958,10 +1961,9 @@ object FormHome: TFormHome
Padding.Rect = '(16,0,16,8)'
object btnP0Hand: TD2CornerButton
Align = vaCenter
Position.Point = '(3
32
,0)'
Position.Point = '(3
24
,0)'
Width = 100
Height = 100
Padding.Rect = '(16,0,0,0)'
OnClick = fieldElementClick
TabOrder = 0
StaysPressed = False
...
...
@@ -4099,7 +4101,7 @@ object FormHome: TFormHome
000000000000F005400648656967687405000000000000008803400C50616464
696E672E52656374060928302C322C302C32290C436C69704368696C6472656E
09000C54443252656374616E676C650005416C69676E070C7661486F72697A6F
6E74616C0E506F736974696F6E2E506F696E74060628312C393
0
29064C6F636B
6E74616C0E506F736974696F6E2E506F696E74060628312C393
4
29064C6F636B
6564090557696474680500000000000000EC0540064865696768740500000000
000000E404400C50616464696E672E52656374060928312C312C312C31290748
697454657374080A46696C6C2E5374796C65070F643242727573684772616469
...
...
frmhome.pas
View file @
2341542c
...
...
@@ -240,6 +240,7 @@ type
procedure
FormDestroy
(
Sender
:
TObject
);
procedure
fieldElementClick
(
Sender
:
TObject
);
procedure
FormResize
(
Sender
:
TObject
);
procedure
FormShow
(
Sender
:
TObject
);
private
BHand
:
array
[
0..1
]
of
TD2CornerButton
;
...
...
@@ -268,6 +269,7 @@ type
FUserInfo
:
TMCUser
;
function
CheckSaved
(
AIsNew
:
Boolean
):
Boolean
;
procedure
currentCardListAddOne
(
ACard
:
TCard
);
procedure
currentCardListDelete
(
ACardId
:
Int64
;
AIndex
:
Integer
);
procedure
NewPuzzle
();
procedure
OpenPuzzle
(
AFilePath
:
string
);
...
...
@@ -313,6 +315,7 @@ procedure TFormHome.FormCreate(Sender: TObject);
var
i
,
j
:
Integer
;
begin
TConfigReader
.
SetScale
(
1.0
);
FPuzzle
:=
nil
;
FSaved
:=
True
;
FFilePath
:=
''
;
...
...
@@ -536,11 +539,34 @@ begin
end
;
end
;
procedure
TFormHome
.
FormResize
(
Sender
:
TObject
);
var
minH
,
minW
:
Integer
;
ARate
:
Double
;
AScale
:
Double
;
begin
// resize
minH
:=
self
.
Constraints
.
MinHeight
;
minW
:=
Self
.
Constraints
.
MinWidth
;
ARate
:=
(
minW
*
1.0
)
/
(
minH
*
1.0
);
// w/h
if
(
Self
.
Width
/
self
.
Height
>
ARate
)
then
begin
Self
.
Height
:=
Trunc
(
Self
.
Width
/
ARate
);
// self.Width:= Trunc(self.Height * ARate);
end
else
if
(
self
.
Width
/
self
.
Height
<
ARate
)
then
begin
Self
.
Height
:=
Trunc
(
Self
.
Width
/
ARate
);
// self.Width:= Trunc(self.Height * ARate);
end
;
AScale
:=
(
Self
.
Width
*
1.0
)
/
(
self
.
Constraints
.
MinWidth
*
1.0
);
TConfigReader
.
SetScale
(
AScale
);
Root
.
Scale
.
X
:=
AScale
;
Root
.
Scale
.
Y
:=
AScale
;
end
;
procedure
TFormHome
.
FormShow
(
Sender
:
TObject
);
begin
//
Self
.
Width
:=
Trunc
(
Panel2
.
Position
.
X
+
Panel2
.
Width
+
32
);
Self
.
Height
:=
Trunc
(
Panel2
.
Position
.
Y
+
Panel2
.
Height
+
32
);
self
.
Constraints
.
MinHeight
:=
Trunc
(
Panel2
.
Position
.
Y
+
Panel2
.
Height
+
32
);
self
.
Constraints
.
MinWidth
:=
Trunc
(
Panel2
.
Position
.
X
+
Panel2
.
Width
+
32
);;
end
;
function
TFormHome
.
CheckSaved
(
AIsNew
:
Boolean
):
Boolean
;
...
...
@@ -561,27 +587,59 @@ begin
end
;
end
;
procedure
TFormHome
.
currentCardList
Delete
(
ACardId
:
Int64
;
AIndex
:
Integer
);
procedure
TFormHome
.
currentCardList
AddOne
(
ACard
:
TCard
);
var
i
:
Integer
;
item
:
TCardListItemOp
;
c
:
TCard
;
begin
if
(
FCurrentCardList
=
nil
)
then
Exit
;
c
:=
Cards
.
GetCardInfo
(
ACard
.
CardId
);
FCurrentCardList
.
Add
(
c
);
item
:=
TCardListItemOp
.
Create
(
lstCardList
);
item
.
CardName
:=
c
.
CardName
;
item
.
Id
:=
c
.
CardId
;
item
.
Card
:=
c
;
item
.
Index
:=
lstCardList
.
Count
-
1
;
item
.
OnDelete
:=
currentCardListDelete
;
item
.
OnCardAddOneClicked
:=
currentCardListAddOne
;
if
(
FFieldInfo
.
Location
=
clGrave
)
then
begin
item
.
ShowFace
:=
False
;
item
.
Face
:=
0
;
// up
end
else
begin
item
.
ShowFace
:=
True
;
case
FFieldInfo
.
Location
of
clHand
,
clDeck
,
clExtra
:
item
.
Face
:=
1
;
// down
clRemoved
:
item
.
Face
:=
0
;
// up
end
;
end
;
// index matches
if
(
FCurrentCardList
[
AIndex
].
CardId
=
ACardId
)
then
begin
FCurrentCardList
.
Items
[
AIndex
].
Free
;
FCurrentCardList
.
Delete
(
AIndex
);
lstCardList
.
Items
[
AIndex
].
Free
;
Exit
;
// rebuild index
for
i
:=
0
to
lstCardList
.
Count
-
1
do
begin
item
:=
TCardListItemOp
(
lstCardList
.
Items
[
i
]);
item
.
Index
:=
i
;
end
;
end
;
procedure
TFormHome
.
currentCardListDelete
(
ACardId
:
Int64
;
AIndex
:
Integer
);
var
i
,
j
:
Integer
;
c
:
TCard
;
item
:
TCardListItemOp
;
begin
if
(
FCurrentCardList
=
nil
)
then
Exit
;
// index not matches
for
i
:=
0
to
FCurrentCardList
.
Count
-
1
do
begin
if
(
FCurrentCardList
[
i
].
CardId
=
ACardId
)
then
begin
FCurrentCardList
[
i
].
Free
;
FCurrentCardList
.
Delete
(
i
);
lstCardList
.
Items
[
i
].
Free
;
c
:=
FCurrentCardList
[
i
];
if
c
.
CardId
=
ACardId
then
begin
for
j
:=
0
to
lstCardList
.
Count
-
1
do
begin
item
:=
TCardListItemOp
(
lstCardList
.
Items
[
j
]);
if
(
item
.
Id
=
ACardId
)
and
(
item
.
Index
=
AIndex
)
then
begin
FCurrentCardList
.
Delete
(
i
);
item
.
Free
;
Break
;
end
;
end
;
Break
;
end
;
end
;
...
...
@@ -968,6 +1026,7 @@ begin
end
;
end
;;
item
.
OnDelete
:=
currentCardListDelete
;
item
.
OnCardAddOneClicked
:=
currentCardListAddOne
;
end
;
lstCardList
.
EndUpdate
;
end
;
...
...
@@ -1236,6 +1295,7 @@ begin
item
.
Card
:=
c
;
item
.
Index
:=
lstCardList
.
Count
-
1
;
item
.
OnDelete
:=
currentCardListDelete
;
item
.
OnCardAddOneClicked
:=
currentCardListAddOne
;
if
(
FFieldInfo
.
Location
=
clGrave
)
then
begin
item
.
ShowFace
:=
False
;
item
.
Face
:=
0
;
// up
...
...
frmlogin.lfm
View file @
2341542c
object FormLogin: TFormLogin
Left = 650
Height =
182
Height =
200
Top = 44
Width = 500
BorderIcons = [biSystemMenu]
BorderStyle = bsDialog
Caption = 'MC 用户登录'
ClientHeight =
182
ClientHeight =
200
ClientWidth = 500
Constraints.MinHeight = 200
Constraints.MinWidth = 500
OnCreate = FormCreate
Position = poMainFormCenter
object Scene: TD2Scene
Left = 0
Height =
182
Height =
200
Top = 0
Width = 500
Align = alClient
...
...
@@ -20,15 +23,16 @@ object FormLogin: TFormLogin
DesignSnapToLines = True
object Root: TD2Background
Width = 500
Height =
182
Height =
200
Margins.Rect = '(8,8,8,8)'
Padding.Rect = '(16,16,16,16)'
HitTest = False
object Layout1: TD2Layout
Align = vaTop
Position.Point = '(8,
8
)'
Position.Point = '(8,
16
)'
Width = 484
Height = 50
Padding.Rect = '(0,8,0,0)'
object Label1: TD2Label
Align = vaLeft
Position.Point = '(8,0)'
...
...
@@ -60,7 +64,7 @@ object FormLogin: TFormLogin
end
object Layout2: TD2Layout
Align = vaTop
Position.Point = '(8,
58
)'
Position.Point = '(8,
66
)'
Width = 484
Height = 50
object Label2: TD2Label
...
...
@@ -94,7 +98,7 @@ object FormLogin: TFormLogin
end
object Layout4: TD2Layout
Align = vaBottom
Position.Point = '(8,1
24
)'
Position.Point = '(8,1
42
)'
Width = 484
Height = 50
object btnOK: TD2CornerButton
...
...
frmlogin.pas
View file @
2341542c
...
...
@@ -25,6 +25,7 @@ type
edtPassword
:
TD2TextBox
;
procedure
btnOKClick
(
Sender
:
TObject
);
procedure
edtAccountChange
(
Sender
:
TObject
);
procedure
FormCreate
(
Sender
:
TObject
);
private
FUserAccount
:
string
;
FUserPassword
:
string
;
...
...
@@ -40,6 +41,9 @@ var
implementation
uses
untConfig
;
{$R *.lfm}
{ TFormLogin }
...
...
@@ -54,6 +58,17 @@ begin
btnOK
.
Enabled
:=
(
acc
<>
''
)
and
(
pwd
<>
''
);
end
;
procedure
TFormLogin
.
FormCreate
(
Sender
:
TObject
);
var
AScale
:
Double
;
begin
AScale
:=
TConfigReader
.
GetScale
();
self
.
Width
:=
Trunc
(
500
*
AScale
);
self
.
Height
:=
Trunc
(
200
*
AScale
);
Root
.
Scale
.
X
:=
AScale
;
Root
.
Scale
.
Y
:=
AScale
;
end
;
procedure
TFormLogin
.
btnOKClick
(
Sender
:
TObject
);
begin
FUserAccount
:=
edtAccount
.
Text
;
...
...
frmpuzzleconfig.lfm
View file @
2341542c
...
...
@@ -8,6 +8,9 @@ object FormPuzzleConfig: TFormPuzzleConfig
Caption = '残局设置'
ClientHeight = 800
ClientWidth = 600
Constraints.MinHeight = 800
Constraints.MinWidth = 600
OnCreate = FormCreate
Position = poMainFormCenter
object Scene: TD2Scene
Left = 0
...
...
@@ -1892,7 +1895,7 @@ object FormPuzzleConfig: TFormPuzzleConfig
000000000000F005400648656967687405000000000000008803400C50616464
696E672E52656374060928302C322C302C32290C436C69704368696C6472656E
09000C54443252656374616E676C650005416C69676E070C7661486F72697A6F
6E74616C0E506F736974696F6E2E506F696E74060628312C383
6
29064C6F636B
6E74616C0E506F736974696F6E2E506F696E74060628312C383
8
29064C6F636B
6564090557696474680500000000000000EC0540064865696768740500000000
000000E404400C50616464696E672E52656374060928312C312C312C31290748
697454657374080A46696C6C2E5374796C65070F643242727573684772616469
...
...
frmpuzzleconfig.pas
View file @
2341542c
...
...
@@ -36,6 +36,7 @@ type
Scene
:
TD2Scene
;
edtAIName
:
TD2TextBox
;
edtPuzzleName
:
TD2TextBox
;
procedure
FormCreate
(
Sender
:
TObject
);
private
function
GetAIName
:
string
;
function
GetP0LP
:
Integer
;
...
...
@@ -66,10 +67,24 @@ var
implementation
uses
untConfig
;
{$R *.lfm}
{ TFormPuzzleConfig }
procedure
TFormPuzzleConfig
.
FormCreate
(
Sender
:
TObject
);
var
AScale
:
Double
;
begin
AScale
:=
TConfigReader
.
GetScale
();
self
.
Width
:=
Trunc
(
600
*
AScale
);
self
.
Height
:=
Trunc
(
800
*
AScale
);
Root
.
Scale
.
X
:=
AScale
;
Root
.
Scale
.
Y
:=
AScale
;
end
;
function
TFormPuzzleConfig
.
GetAIName
:
string
;
begin
Exit
(
edtAIName
.
Text
);
...
...
frmsearchcard.lfm
View file @
2341542c
...
...
@@ -8,6 +8,9 @@ object FormSearchCard: TFormSearchCard
Caption = '卡片查询'
ClientHeight = 800
ClientWidth = 600
Constraints.MinHeight = 800
Constraints.MinWidth = 600
OnCreate = FormCreate
Position = poMainFormCenter
object Scene: TD2Scene
Left = 0
...
...
@@ -47,6 +50,7 @@ object FormSearchCard: TFormSearchCard
Width = 300
Height = 34
Padding.Rect = '(8,8,8,8)'
OnKeyUp = edtCardNameKeyUp
TabOrder = 1
Font.Family = 'microsoft yahei'
Font.Size = 18
...
...
@@ -74,10 +78,11 @@ object FormSearchCard: TFormSearchCard
end
object lstCards: TD2ListBox
Align = vaClient
Position.Point = '(8,
5
8)'
Position.Point = '(8,
11
8)'
Width = 584
Height = 6
7
6
Height = 6
1
6
OnClick = lstCardsClick
OnDblClick = lstCardsDblClick
TabOrder = 2
UseSmallScrollBars = True
Columns = 3
...
...
@@ -126,6 +131,190 @@ object FormSearchCard: TFormSearchCard
Sides = [d2SideTop, d2SideLeft, d2SideBottom, d2SideRight]
end
end
object layHistory: TD2Layout
Align = vaTop
Position.Point = '(8,58)'
Width = 584
Height = 60
object CircleButton1: TD2CircleButton
Align = vaMostRight
Position.Point = '(548,16)'
Width = 28
Height = 28
Padding.Rect = '(0,16,8,16)'
OnClick = CircleButton1Click
TabOrder = 0
StaysPressed = False
IsPressed = False
Font.Family = 'Microsoft Yahei'
Font.Size = 12
Font.Style = d2FontBold
TextAlign = d2TextAlignCenter
Text = 'X'
end
object Layout3: TD2Layout
Align = vaClient
Width = 548
Height = 60
object Layout4: TD2Layout
Align = vaTop
Width = 548
Height = 30
object txtHistory0: TD2Text
Align = vaLeft
Width = 100
Height = 30
OnClick = txtHistory0Click
Fill.Color = '#FFFF0033'
Font.Family = 'Microsoft Yahei'
Font.Size = 12
Font.Style = d2FontBold
HorzTextAlign = d2TextAlignNear
Text = '混沌虚数No.1000 梦幻虚光神 原数天灵·原数天地'
WordWrap = False
end
object txtHistory1: TD2Text
Align = vaLeft
Position.Point = '(108,0)'
Width = 100
Height = 30
Padding.Rect = '(8,0,0,0)'
OnClick = txtHistory0Click
Fill.Color = '#FFFF7700'
Font.Family = 'Microsoft Yahei'
Font.Size = 12
Font.Style = d2FontBold
HorzTextAlign = d2TextAlignNear
Text = 'æ··æ²èæ°No.1000 梦幻èå ç¥ åæ°å¤©çµÂ·åæ°å¤©å°'
WordWrap = False
end
object txtHistory4: TD2Text
Align = vaLeft
Position.Point = '(432,0)'
Width = 100
Height = 30
Padding.Rect = '(8,0,0,0)'
OnClick = txtHistory0Click
Fill.Color = '#FF00FF77'
Font.Family = 'Microsoft Yahei'
Font.Size = 12
Font.Style = d2FontBold
HorzTextAlign = d2TextAlignNear
Text = 'æ··æ²ÂèÂÂæ°No.1000 梦幻èÂÂå Â祠åÂÂæ°天çµ÷åÂÂæ°天å°'
WordWrap = False
end
object txtHistory3: TD2Text
Align = vaLeft
Position.Point = '(324,0)'
Width = 100
Height = 30
Padding.Rect = '(8,0,0,0)'
OnClick = txtHistory0Click
Fill.Color = '#FF77FF00'
Font.Family = 'Microsoft Yahei'
Font.Size = 12
Font.Style = d2FontBold
HorzTextAlign = d2TextAlignNear
Text = 'æ··æ²ÂèÂÂæ°No.1000 梦幻èÂÂå Â祠åÂÂæ°天çµ÷åÂÂæ°天å°'
WordWrap = False
end
object txtHistory2: TD2Text
Align = vaLeft
Position.Point = '(216,0)'
Width = 100
Height = 30
Padding.Rect = '(8,0,0,0)'
OnClick = txtHistory0Click
Fill.Color = '#FFFFFF00'
Font.Family = 'Microsoft Yahei'
Font.Size = 12
Font.Style = d2FontBold
HorzTextAlign = d2TextAlignNear
Text = 'æ··æ²ÂèÂÂæ°No.1000 梦幻èÂÂå Â祠åÂÂæ°天çµ÷åÂÂæ°天å°'
WordWrap = False
end
end
object Layout5: TD2Layout
Align = vaClient
Position.Point = '(0,30)'
Width = 548
Height = 30
object txtHistory5: TD2Text
Align = vaLeft
Width = 100
Height = 30
OnClick = txtHistory0Click
Fill.Color = '#FF00FFFF'
Font.Family = 'Microsoft Yahei'
Font.Size = 12
Font.Style = d2FontBold
HorzTextAlign = d2TextAlignNear
Text = 'æ··æ²ÂèÂÂæ°No.1000 梦幻èÂÂå Â祠åÂÂæ°天çµ÷åÂÂæ°天å°'
WordWrap = False
end
object txtHistory9: TD2Text
Align = vaLeft
Position.Point = '(432,0)'
Width = 100
Height = 30
Padding.Rect = '(8,0,0,0)'
OnClick = txtHistory0Click
Fill.Color = '#FF9966FF'
Font.Family = 'Microsoft Yahei'
Font.Size = 12
Font.Style = d2FontBold
HorzTextAlign = d2TextAlignNear
Text = 'æ··æ²ÂèÂÂæ°No.1000 梦幻èÂÂå Â祠åÂÂæ°天çµ÷åÂÂæ°天å°'
WordWrap = False
end
object txtHistory8: TD2Text
Align = vaLeft
Position.Point = '(324,0)'
Width = 100
Height = 30
Padding.Rect = '(8,0,0,0)'
OnClick = txtHistory0Click
Fill.Color = '#FFCC99FF'
Font.Family = 'Microsoft Yahei'
Font.Size = 12
Font.Style = d2FontBold
HorzTextAlign = d2TextAlignNear
Text = 'æ··æ²ÂèÂÂæ°No.1000 梦幻èÂÂå Â祠åÂÂæ°天çµ÷åÂÂæ°天å°'
WordWrap = False
end
object txtHistory7: TD2Text
Align = vaLeft
Position.Point = '(216,0)'
Width = 100
Height = 30
Padding.Rect = '(8,0,0,0)'
OnClick = txtHistory0Click
Fill.Color = '#FF7777FF'
Font.Family = 'Microsoft Yahei'
Font.Size = 12
Font.Style = d2FontBold
HorzTextAlign = d2TextAlignNear
Text = 'æ··æ²ÂèÂÂæ°No.1000 梦幻èÂÂå Â祠åÂÂæ°天çµ÷åÂÂæ°天å°'
WordWrap = False
end
object txtHistory6: TD2Text
Align = vaLeft
Position.Point = '(108,0)'
Width = 100
Height = 30
Padding.Rect = '(8,0,0,0)'
OnClick = txtHistory0Click
Fill.Color = '#FF0077FF'
Font.Family = 'Microsoft Yahei'
Font.Size = 12
Font.Style = d2FontBold
HorzTextAlign = d2TextAlignNear
Text = 'æ··æ²ÂèÂÂæ°No.1000 梦幻èÂÂå Â祠åÂÂæ°天çµ÷åÂÂæ°天å°'
WordWrap = False
end
end
end
end
end
end
object D2Resources1: TD2Resources
...
...
@@ -1750,7 +1939,7 @@ object FormSearchCard: TFormSearchCard
000000000000F005400648656967687405000000000000008803400C50616464
696E672E52656374060928302C322C302C32290C436C69704368696C6472656E
09000C54443252656374616E676C650005416C69676E070C7661486F72697A6F
6E74616C0E506F736974696F6E2E506F696E74060628312C3
834
29064C6F636B
6E74616C0E506F736974696F6E2E506F696E74060628312C3
930
29064C6F636B
6564090557696474680500000000000000EC0540064865696768740500000000
000000E404400C50616464696E672E52656374060928312C312C312C31290748
697454657374080A46696C6C2E5374796C65070F643242727573684772616469
...
...
frmsearchcard.pas
View file @
2341542c
...
...
@@ -5,7 +5,7 @@ unit frmSearchCard;
interface
uses
Classes
,
SysUtils
,
Forms
,
Controls
,
Graphics
,
Dialogs
,
orca_scene2d
,
untData
,
untCard
,
fgl
;
Windows
,
Classes
,
SysUtils
,
Forms
,
Controls
,
Graphics
,
Dialogs
,
orca_scene2d
,
untData
,
untCard
,
fgl
;
type
...
...
@@ -15,20 +15,43 @@ type
btnSearchCard
:
TD2CornerButton
;
btnCancel
:
TD2CornerButton
;
btnOK
:
TD2CornerButton
;
CircleButton1
:
TD2CircleButton
;
D2Resources1
:
TD2Resources
;
Label1
:
TD2Label
;
Layout1
:
TD2Layout
;
Layout2
:
TD2Layout
;
layHistory
:
TD2Layout
;
Layout3
:
TD2Layout
;
Layout4
:
TD2Layout
;
Layout5
:
TD2Layout
;
lstCards
:
TD2ListBox
;
Root
:
TD2Background
;
Scene
:
TD2Scene
;
edtCardName
:
TD2TextBoxClearBtn
;
txtHistory1
:
TD2Text
;
txtHistory4
:
TD2Text
;
txtHistory3
:
TD2Text
;
txtHistory2
:
TD2Text
;
txtHistory5
:
TD2Text
;
txtHistory9
:
TD2Text
;
txtHistory8
:
TD2Text
;
txtHistory7
:
TD2Text
;
txtHistory6
:
TD2Text
;
txtHistory0
:
TD2Text
;
procedure
btnOKClick
(
Sender
:
TObject
);
procedure
btnSearchCardClick
(
Sender
:
TObject
);
procedure
CircleButton1Click
(
Sender
:
TObject
);
procedure
edtCardNameKeyUp
(
Sender
:
TObject
;
var
Key
:
Word
;
var
KeyChar
:
System
.
Widechar
;
Shift
:
TShiftState
);
procedure
FormCreate
(
Sender
:
TObject
);
procedure
lstCardsClick
(
Sender
:
TObject
);
procedure
lstCardsDblClick
(
Sender
:
TObject
);
procedure
txtHistory0Click
(
Sender
:
TObject
);
private
FCardId
:
Int64
;
FHistory
:
array
[
0..9
]
of
TD2Text
;
procedure
SearchCard
(
Keyword
:
string
);
procedure
SaveHistory
(
ALast
:
string
);
public
published
...
...
@@ -41,7 +64,7 @@ var
implementation
uses
untListItem
;
untListItem
,
untConfig
;
{$R *.lfm}
...
...
@@ -50,11 +73,90 @@ uses
procedure
TFormSearchCard
.
btnSearchCardClick
(
Sender
:
TObject
);
var
keyword
:
string
;
begin
keyword
:=
edtCardName
.
Text
;
SearchCard
(
keyword
);
end
;
procedure
TFormSearchCard
.
CircleButton1Click
(
Sender
:
TObject
);
var
i
:
Integer
;
Arr
:
TStringArray
;
begin
Arr
:=
TConfigReader
.
GetSearchHistory
();
for
i
:=
0
to
9
do
begin
Arr
[
i
]
:=
''
;
FHistory
[
i
].
Text
:=
''
;
end
;
TConfigReader
.
SetSearchHistory
(
Arr
);
end
;
procedure
TFormSearchCard
.
edtCardNameKeyUp
(
Sender
:
TObject
;
var
Key
:
Word
;
var
KeyChar
:
System
.
Widechar
;
Shift
:
TShiftState
);
begin
if
(
Key
=
VK_RETURN
)
then
begin
btnSearchCardClick
(
btnSearchCard
);
end
;
end
;
procedure
TFormSearchCard
.
FormCreate
(
Sender
:
TObject
);
var
AScale
:
Double
;
Arr
:
TStringArray
;
i
:
Integer
;
begin
AScale
:=
TConfigReader
.
GetScale
();
self
.
Width
:=
Trunc
(
600
*
AScale
);
self
.
Height
:=
Trunc
(
800
*
AScale
);
Root
.
Scale
.
X
:=
AScale
;
Root
.
Scale
.
Y
:=
AScale
;
FHistory
[
0
]
:=
txtHistory0
;
FHistory
[
1
]
:=
txtHistory1
;
FHistory
[
2
]
:=
txtHistory2
;
FHistory
[
3
]
:=
txtHistory3
;
FHistory
[
4
]
:=
txtHistory4
;
FHistory
[
5
]
:=
txtHistory5
;
FHistory
[
6
]
:=
txtHistory6
;
FHistory
[
7
]
:=
txtHistory7
;
FHistory
[
8
]
:=
txtHistory8
;
FHistory
[
9
]
:=
txtHistory9
;
Arr
:=
TConfigReader
.
GetSearchHistory
();
for
i
:=
0
to
9
do
begin
FHistory
[
i
].
Text
:=
Arr
[
i
];
end
;
end
;
procedure
TFormSearchCard
.
lstCardsClick
(
Sender
:
TObject
);
begin
btnOK
.
Enabled
:=
lstCards
.
ItemIndex
>
-
1
;
end
;
procedure
TFormSearchCard
.
lstCardsDblClick
(
Sender
:
TObject
);
var
idx
:
Integer
;
begin
idx
:=
lstCards
.
ItemIndex
;
if
idx
>
-
1
then
begin
btnOKClick
(
btnOK
);
end
;
end
;
procedure
TFormSearchCard
.
txtHistory0Click
(
Sender
:
TObject
);
var
keyword
:
string
;
begin
keyword
:=
TD2Text
(
Sender
).
Text
;
SearchCard
(
keyword
);
end
;
procedure
TFormSearchCard
.
SearchCard
(
Keyword
:
string
);
var
list
:
TFPGList
<
TCard
>;
i
:
Integer
;
item
:
TCardListItem
;
begin
keyword
:=
edtCardName
.
Text
;
if
(
keyword
=
''
)
then
Exit
;
list
:=
Cards
.
SearchCards
(
keyword
);
lstCards
.
Clear
;
...
...
@@ -69,11 +171,29 @@ begin
btnOK
.
Enabled
:=
False
;
// deselect all
lstCards
.
ItemIndex
:=
-
1
;
// save history
SaveHistory
(
keyword
);
end
;
procedure
TFormSearchCard
.
lstCardsClick
(
Sender
:
TObject
);
procedure
TFormSearchCard
.
SaveHistory
(
ALast
:
string
);
var
Arr
:
TStringArray
;
i
:
Integer
;
begin
btnOK
.
Enabled
:=
lstCards
.
ItemIndex
>
-
1
;
Arr
:=
TConfigReader
.
GetSearchHistory
();
for
i
:=
0
to
9
do
begin
if
Arr
[
i
]
=
ALast
then
begin
Exit
;
end
;
end
;
for
i
:=
9
downto
1
do
begin
Arr
[
i
]
:=
Arr
[
i
-
1
];
FHistory
[
i
].
Text
:=
Arr
[
i
];
end
;
Arr
[
0
]
:=
ALast
;
FHistory
[
0
].
Text
:=
Arr
[
0
];
TConfigReader
.
SetSearchHistory
(
Arr
);
end
;
procedure
TFormSearchCard
.
btnOKClick
(
Sender
:
TObject
);
...
...
untcard.pas
View file @
2341542c
...
...
@@ -294,10 +294,10 @@ var
i
,
j
:
Integer
;
begin
FPuzzleId
:=
0
;
FPuzzleName
:=
''
;
FAIName
:=
''
;
FLPOpponent
:=
0
;
FLPSelf
:=
0
;
FPuzzleName
:=
'
我制作的游戏王残局
'
;
FAIName
:=
'
只是一个AI
'
;
FLPOpponent
:=
800
0
;
FLPSelf
:=
800
0
;
FMessage
:=
''
;
FSolution
:=
''
;
FP0Hand
:=
TFPGList
<
TCard
>.
Create
;
...
...
untconfig.pas
View file @
2341542c
...
...
@@ -5,17 +5,23 @@ unit untConfig;
interface
uses
Classes
,
SysUtils
,
Registry
;
Classes
,
SysUtils
,
Registry
,
Forms
,
IniFiles
;
type
{ TConfigReader }
TConfigReader
=
class
private
class
var
FScale
:
Double
;
public
class
function
GetMCToken
():
string
;
class
procedure
SaveMCToken
(
AToken
:
string
);
class
function
GetMDPro3InstallPath
():
string
;
class
procedure
SetScale
(
AScale
:
Double
);
class
function
GetScale
():
Double
;
class
function
GetSearchHistory
():
TStringArray
;
class
procedure
SetSearchHistory
(
Arr
:
TStringArray
);
end
;
implementation
...
...
@@ -86,5 +92,44 @@ begin
Exit
(
APath
);
end
;
class
procedure
TConfigReader
.
SetScale
(
AScale
:
Double
);
begin
FScale
:=
AScale
;
end
;
class
function
TConfigReader
.
GetScale
():
Double
;
begin
Exit
(
FScale
);
end
;
class
function
TConfigReader
.
GetSearchHistory
():
TStringArray
;
var
ACfgPath
:
string
;
i
:
Integer
;
ini
:
TIniFile
;
begin
SetLength
(
Result
,
10
);
ACfgPath
:=
ChangeFileExt
(
Application
.
ExeName
,
'.conf'
);
ini
:=
TIniFile
.
Create
(
ACfgPath
);
for
i
:=
0
to
9
do
begin
Result
[
i
]
:=
ini
.
ReadString
(
'HISTORY'
,
Format
(
'Key%d'
,
[
i
]),
''
);
end
;
ini
.
Free
;
end
;
class
procedure
TConfigReader
.
SetSearchHistory
(
Arr
:
TStringArray
);
var
ACfgPath
:
string
;
i
:
Integer
;
ini
:
TIniFile
;
begin
ACfgPath
:=
ChangeFileExt
(
Application
.
ExeName
,
'.conf'
);
ini
:=
TIniFile
.
Create
(
ACfgPath
);
for
i
:=
0
to
9
do
begin
ini
.
WriteString
(
'HISTORY'
,
Format
(
'Key%d'
,
[
i
]),
Arr
[
i
]);
end
;
ini
.
Free
;
end
;
end
.
untlistitem.pas
View file @
2341542c
...
...
@@ -32,6 +32,7 @@ type
{ TOnCardListItemOpDeleted }
TOnCardListItemOpDeleted
=
procedure
(
ACardId
:
Int64
;
AIndex
:
Integer
)
of
object
;
TOnCardAddOneClicked
=
procedure
(
ACard
:
TCard
)
of
object
;
{ TCardListItemOp }
...
...
@@ -40,14 +41,17 @@ type
FCard
:
TCard
;
FCardName
:
string
;
FFace
:
Integer
;
FOnCardAddOneClicked
:
TOnCardAddOneClicked
;
FShowFace
:
Boolean
;
FId
:
Int64
;
FIndex
:
Integer
;
FOnDelete
:
TOnCardListItemOpDeleted
;
FImg
:
TD2Image
;
FLbl
:
TD2Label
;
FBtnAddOne
:
TD2RoundButton
;
FbtnFace
:
TD2CornerButton
;
FBtnDel
:
TD2CornerButton
;
procedure
innerBtnAddOneClick
(
Sender
:
TObject
);
procedure
innerBtnDelClick
(
Sender
:
TObject
);
procedure
innerBtnFaceClick
(
Sender
:
TObject
);
procedure
SetCardName
(
AValue
:
string
);
...
...
@@ -64,6 +68,7 @@ type
property
CardName
:
string
read
FCardName
write
SetCardName
;
property
Card
:
TCard
read
FCard
write
FCard
;
property
OnDelete
:
TOnCardListItemOpDeleted
read
FOnDelete
write
FOnDelete
;
property
OnCardAddOneClicked
:
TOnCardAddOneClicked
read
FOnCardAddOneClicked
write
FOnCardAddOneClicked
;
property
Index
:
Integer
read
FIndex
write
FIndex
;
property
Face
:
Integer
read
FFace
write
SetFace
;
property
ShowFace
:
Boolean
read
FShowFace
write
SetShowFace
;
...
...
@@ -263,6 +268,13 @@ begin
end
;
end
;
procedure
TCardListItemOp
.
innerBtnAddOneClick
(
Sender
:
TObject
);
begin
if
(
Assigned
(
FOnCardAddOneClicked
))
then
begin
FOnCardAddOneClicked
(
FCard
);
end
;
end
;
procedure
TCardListItemOp
.
innerBtnFaceClick
(
Sender
:
TObject
);
begin
if
(
FFace
=
0
)
then
begin
...
...
@@ -346,27 +358,40 @@ begin
FbtnFace
.
Parent
:=
Self
;
FbtnFace
.
Align
:=
vaRight
;
FbtnFace
.
Padding
.
Right
:=
0
;
FbtnFace
.
Padding
.
Top
:=
1
6
;
FbtnFace
.
Padding
.
Bottom
:=
1
6
;
FbtnFace
.
Padding
.
Top
:=
1
8
;
FbtnFace
.
Padding
.
Bottom
:=
1
8
;
FbtnFace
.
Padding
.
Left
:=
8
;
FbtnFace
.
Height
:=
4
3
;
FbtnFace
.
Width
:=
7
0
;
FbtnFace
.
Height
:=
4
0
;
FbtnFace
.
Width
:=
5
0
;
FbtnFace
.
Font
.
Family
:=
'Microsoft Yahei'
;
FbtnFace
.
Font
.
Size
:=
1
4
;
FbtnFace
.
Font
.
Size
:=
1
2
;
FbtnFace
.
OnClick
:=
innerBtnFaceClick
;
FBtnAddOne
:=
TD2RoundButton
.
Create
(
Self
);
FBtnAddOne
.
Parent
:=
Self
;
FBtnAddOne
.
Align
:=
vaRight
;
FBtnAddOne
.
Padding
.
Top
:=
20
;
FBtnAddOne
.
Padding
.
Bottom
:=
20
;
FBtnAddOne
.
Padding
.
Right
:=
0
;
FBtnAddOne
.
Height
:=
36
;
FBtnAddOne
.
Width
:=
36
;
FBtnAddOne
.
Font
.
Family
:=
'Microsoft Yahei'
;
FBtnAddOne
.
Font
.
Size
:=
12
;
FBtnAddOne
.
Text
:=
'+1'
;
FBtnAddOne
.
OnClick
:=
innerBtnAddOneClick
;
FBtnDel
:=
TD2CornerButton
.
Create
(
Self
);
FBtnDel
.
Parent
:=
Self
;
FBtnDel
.
Align
:=
vaMostRight
;
FBtnDel
.
Padding
.
Right
:=
8
;
FBtnDel
.
Padding
.
Top
:=
1
6
;
FBtnDel
.
Padding
.
Bottom
:=
1
6
;
FBtnDel
.
Padding
.
Top
:=
1
8
;
FBtnDel
.
Padding
.
Bottom
:=
1
8
;
FBtnDel
.
Padding
.
Left
:=
8
;
FBtnDel
.
Text
:=
'删除'
;
FBtnDel
.
Height
:=
4
3
;
FBtnDel
.
Width
:=
7
0
;
FBtnDel
.
Height
:=
4
0
;
FBtnDel
.
Width
:=
5
0
;
FBtnDel
.
Font
.
Family
:=
'Microsoft Yahei'
;
FBtnDel
.
Font
.
Size
:=
1
4
;
FBtnDel
.
Font
.
Size
:=
1
2
;
FBtnDel
.
OnClick
:=
innerBtnDelClick
;
end
;
...
...
untscriptgenerator.pas
View file @
2341542c
...
...
@@ -16,6 +16,7 @@ type
class
function
CardOWnerToInt
(
AO
:
TCardOwner
):
Integer
;
class
function
CardPlayerToInt
(
AP
:
TCardPlayer
):
Integer
;
class
function
CardLocationToStr
(
AL
:
TCardLocation
):
String
;
class
function
CardExtraSeq
(
AO
:
TCardOwner
;
ASeq
:
Integer
):
Integer
;
class
function
CardLocationToInt
(
AL
:
TCardLocation
):
Integer
;
class
function
CardPositionToStr
(
AP
:
TCardPosition
):
String
;
class
function
CardXEPositionToStr
(
AP
:
TCardPosition
):
String
;
...
...
@@ -55,6 +56,14 @@ begin
Exit
(
''
);
end
;
class
function
TScriptGenerator
.
CardExtraSeq
(
AO
:
TCardOwner
;
ASeq
:
Integer
):
Integer
;
begin
case
AO
of
coSelf
:
Exit
(
ASeq
);
coOpponent
:
if
(
ASeq
=
5
)
then
Exit
(
6
)
else
Exit
(
5
);
end
;
end
;
class
function
TScriptGenerator
.
CardLocationToInt
(
AL
:
TCardLocation
):
Integer
;
begin
case
AL
of
...
...
@@ -214,7 +223,7 @@ begin
CardOWnerToInt
(
c
.
Owner
),
// owner
CardPlayerToInt
(
c
.
Player
),
// player
CardLocationToStr
(
c
.
Location
),
// location
c
.
Seq
,
// seq
CardExtraSeq
(
c
.
Owner
,
c
.
Seq
),
// seq
CardPositionToStr
(
c
.
Position
),
// position
IfThen
<
String
>(
c
.
Proc
,
'true'
,
'false'
)
// proc
]));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment