Fix issue #32711 TWinControl.flipchildren does not flip anchored controls

git-svn-id: trunk@56437 -
This commit is contained in:
giuliano 2017-11-19 21:24:58 +00:00
parent 7f5d893c9f
commit 154cfbab51
5 changed files with 316 additions and 110 deletions

View File

@ -46,7 +46,7 @@
<CompilerOptions> <CompilerOptions>
<Version Value="11"/> <Version Value="11"/>
<SearchPaths> <SearchPaths>
<UnitOutputDirectory Value="lib\$(TargetOS)-$(TargetCPU)"/> <UnitOutputDirectory Value="lib/$(TargetOS)-$(TargetCPU)"/>
</SearchPaths> </SearchPaths>
<Linking> <Linking>
<Options> <Options>

View File

@ -4,14 +4,14 @@ object Form1: TForm1
Top = 131 Top = 131
Width = 687 Width = 687
Caption = 'Form1' Caption = 'Form1'
ClientHeight = 353 ClientHeight = 350
ClientWidth = 687 ClientWidth = 687
Menu = MainMenu1 Menu = MainMenu1
OnCreate = FormCreate OnCreate = FormCreate
LCLVersion = '0.9.29' LCLVersion = '1.9.0.0'
object PageControl1: TPageControl object PageControl1: TPageControl
Left = 8 Left = 8
Height = 309 Height = 306
Top = 40 Top = 40
Width = 672 Width = 672
ActivePage = TabSheet1 ActivePage = TabSheet1
@ -20,7 +20,7 @@ object Form1: TForm1
TabOrder = 0 TabOrder = 0
object TabSheet1: TTabSheet object TabSheet1: TTabSheet
Caption = 'Standard' Caption = 'Standard'
ClientHeight = 283 ClientHeight = 274
ClientWidth = 664 ClientWidth = 664
object Label1: TLabel object Label1: TLabel
Left = 13 Left = 13
@ -39,7 +39,6 @@ object Form1: TForm1
Top = 5 Top = 5
Width = 88 Width = 88
Caption = 'Notify Me!' Caption = 'Notify Me!'
Color = clBtnFace
Glyph.Data = { Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100 36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000FF00F7FFFF00 2000000000000004000064000000640000000000000000000000FF00F7FFFF00
@ -76,21 +75,20 @@ object Form1: TForm1
F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00 F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00
F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FF F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FFFF00F7FF
} }
NumGlyphs = 0
OnClick = SpeedButton1Click OnClick = SpeedButton1Click
end end
object Label2: TLabel object Label2: TLabel
Left = 540 Left = 494
Height = 14 Height = 17
Top = 5 Top = 5
Width = 116 Width = 162
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
Caption = 'Label Anchored to Right' Caption = 'Label Anchored to Right'
ParentColor = False ParentColor = False
end end
object Edit1: TEdit object Edit1: TEdit
Left = 128 Left = 128
Height = 21 Height = 27
Top = 161 Top = 161
Width = 150 Width = 150
TabOrder = 0 TabOrder = 0
@ -116,15 +114,15 @@ object Form1: TForm1
'Item2!' 'Item2!'
'Item3?' 'Item3?'
) )
ItemHeight = 13 ItemHeight = 17
TabOrder = 2 TabOrder = 2
end end
object ComboBox1: TComboBox object ComboBox1: TComboBox
Left = 284 Left = 284
Height = 21 Height = 27
Top = 161 Top = 161
Width = 167 Width = 167
ItemHeight = 13 ItemHeight = 17
Items.Strings = ( Items.Strings = (
'Item1.' 'Item1.'
'Item2!' 'Item2!'
@ -155,25 +153,25 @@ object Form1: TForm1
end end
object CheckBox1: TCheckBox object CheckBox1: TCheckBox
Left = 16 Left = 16
Height = 17 Height = 23
Top = 88 Top = 88
Width = 60 Width = 88
Caption = 'Check it!' Caption = 'Check it!'
TabOrder = 6 TabOrder = 6
end end
object RadioButton1: TRadioButton object RadioButton1: TRadioButton
Left = 16 Left = 16
Height = 17 Height = 21
Top = 111 Top = 111
Width = 63 Width = 87
Caption = 'This one?' Caption = 'This one?'
TabOrder = 7 TabOrder = 7
end end
object RadioButton2: TRadioButton object RadioButton2: TRadioButton
Left = 16 Left = 16
Height = 17 Height = 21
Top = 134 Top = 134
Width = 55 Width = 77
Caption = 'Or this?' Caption = 'Or this?'
TabOrder = 8 TabOrder = 8
end end
@ -241,14 +239,14 @@ object Form1: TForm1
Top = 26 Top = 26
Width = 185 Width = 185
Caption = 'GroupBox1' Caption = 'GroupBox1'
ClientHeight = 48 ClientHeight = 40
ClientWidth = 181 ClientWidth = 175
TabOrder = 11 TabOrder = 11
object CheckBox2: TCheckBox object CheckBox2: TCheckBox
Left = 15 Left = 15
Height = 17 Height = 23
Top = 8 Top = 8
Width = 60 Width = 88
Caption = 'Check it!' Caption = 'Check it!'
TabOrder = 0 TabOrder = 0
end end
@ -264,9 +262,9 @@ object Form1: TForm1
end end
object RadioGroup1: TRadioGroup object RadioGroup1: TRadioGroup
Left = 460 Left = 460
Height = 69 Height = 185
Top = 106 Top = 106
Width = 185 Width = 69
AutoFill = True AutoFill = True
Caption = 'RadioGroup1' Caption = 'RadioGroup1'
ChildSizing.LeftRightSpacing = 6 ChildSizing.LeftRightSpacing = 6
@ -277,8 +275,8 @@ object Form1: TForm1
ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2 ChildSizing.ControlsPerLine = 2
ClientHeight = 51 ClientHeight = 163
ClientWidth = 181 ClientWidth = 59
Columns = 2 Columns = 2
Items.Strings = ( Items.Strings = (
'One!' 'One!'
@ -290,13 +288,13 @@ object Form1: TForm1
end end
object TabSheet2: TTabSheet object TabSheet2: TTabSheet
Caption = 'Owner Draw' Caption = 'Owner Draw'
ClientHeight = 283 ClientHeight = 274
ClientWidth = 664 ClientWidth = 664
object Label3: TLabel object Label3: TLabel
Left = 16 Left = 16
Height = 14 Height = 17
Top = 10 Top = 10
Width = 61 Width = 83
Caption = 'Owner Draw' Caption = 'Owner Draw'
ParentColor = False ParentColor = False
end end
@ -310,7 +308,7 @@ object Form1: TForm1
end end
object ColorBox1: TColorBox object ColorBox1: TColorBox
Left = 212 Left = 212
Height = 22 Height = 27
Top = 9 Top = 9
Width = 127 Width = 127
ItemHeight = 16 ItemHeight = 16
@ -326,7 +324,7 @@ object Form1: TForm1
'Check2' 'Check2'
'Check3' 'Check3'
) )
ItemHeight = 15 ItemHeight = 23
TabOrder = 2 TabOrder = 2
Data = { Data = {
03000000000000 03000000000000
@ -348,7 +346,7 @@ object Form1: TForm1
end end
object ComboBox2: TComboBox object ComboBox2: TComboBox
Left = 12 Left = 12
Height = 19 Height = 27
Top = 77 Top = 77
Width = 167 Width = 167
ItemHeight = 13 ItemHeight = 13
@ -358,7 +356,6 @@ object Form1: TForm1
'Item2!' 'Item2!'
'Item3?' 'Item3?'
) )
ReadOnly = True
Style = csOwnerDrawFixed Style = csOwnerDrawFixed
TabOrder = 4 TabOrder = 4
Text = 'Item1.' Text = 'Item1.'
@ -366,7 +363,7 @@ object Form1: TForm1
end end
object TabSheet3: TTabSheet object TabSheet3: TTabSheet
Caption = 'Grids' Caption = 'Grids'
ClientHeight = 283 ClientHeight = 274
ClientWidth = 664 ClientWidth = 664
object Shape2: TShape object Shape2: TShape
Left = 0 Left = 0
@ -439,27 +436,134 @@ object Form1: TForm1
Height = 157 Height = 157
Top = 3 Top = 3
Width = 211 Width = 211
Color = clWindow
Columns = < Columns = <
item item
Title.Caption = 'Title'
end end
item item
Title.Caption = 'Title'
end> end>
TabOrder = 3 TabOrder = 3
end end
end end
object TabSheet4: TTabSheet
Caption = 'Anchored'
ClientHeight = 274
ClientWidth = 664
object Button7: TButton
AnchorSideLeft.Control = TabSheet4
Left = 6
Height = 26
Top = 23
Width = 194
AutoSize = True
BorderSpacing.Left = 6
Caption = 'Left anchored to TabSheet'
TabOrder = 0
end
object Label4: TLabel
AnchorSideLeft.Control = Button7
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Button7
AnchorSideTop.Side = asrCenter
Left = 206
Height = 17
Top = 28
Width = 168
BorderSpacing.Left = 6
Caption = 'Letf anchored to button '
Color = clWhite
ParentColor = False
Transparent = False
end
object Label5: TLabel
AnchorSideLeft.Control = Label4
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Label4
AnchorSideTop.Side = asrCenter
Left = 380
Height = 17
Top = 28
Width = 154
BorderSpacing.Left = 6
Caption = 'Left anchored to Label'
Color = clLime
ParentColor = False
Transparent = False
end
object Button9: TButton
AnchorSideLeft.Control = TabSheet4
AnchorSideLeft.Side = asrCenter
AnchorSideTop.Control = TabSheet4
AnchorSideTop.Side = asrCenter
Left = 226
Height = 26
Top = 124
Width = 213
AutoSize = True
Caption = 'Center anchored to TabSheet'
TabOrder = 1
end
object Button8: TButton
AnchorSideRight.Control = TabSheet4
AnchorSideRight.Side = asrBottom
Left = 457
Height = 26
Top = 80
Width = 201
Anchors = [akTop, akRight]
AutoSize = True
BorderSpacing.Right = 6
Caption = 'Right anchored to TabSheet'
TabOrder = 2
end
object Label7: TLabel
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Label6
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = Label6
Left = 109
Height = 17
Top = 85
Width = 161
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
Caption = 'Right anchored to Label'
Color = clLime
ParentColor = False
Transparent = False
end
object Label6: TLabel
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = Button8
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = Button8
Left = 276
Height = 17
Top = 85
Width = 175
Anchors = [akTop, akRight]
BorderSpacing.Right = 6
Caption = 'Right anchored to button '
Color = clWhite
ParentColor = False
Transparent = False
end
end
end end
object Button5: TButton object Button5: TButton
Left = 11 Left = 11
Height = 25 Height = 25
Top = 8 Top = 8
Width = 173 Width = 212
BorderSpacing.InnerBorder = 4 BorderSpacing.InnerBorder = 4
Caption = 'Switch Application.BidiMode ' Caption = 'Switch Application.BidiMode '
OnClick = Button5Click OnClick = Button5Click
TabOrder = 1 TabOrder = 1
end end
object Button3: TButton object Button3: TButton
Left = 184 Left = 224
Height = 25 Height = 25
Top = 8 Top = 8
Width = 173 Width = 173
@ -469,15 +573,31 @@ object Form1: TForm1
TabOrder = 2 TabOrder = 2
end end
object Button2: TButton object Button2: TButton
Left = 357 Left = 400
Height = 25 Height = 25
Top = 8 Top = 8
Width = 75 Width = 103
BorderSpacing.InnerBorder = 4 BorderSpacing.InnerBorder = 4
Caption = 'Flip Controls' Caption = 'Flip Controls'
OnClick = Button2Click OnClick = Button2Click
TabOrder = 3 TabOrder = 3
end end
object FlipLabel: TLabel
Left = 624
Height = 17
Top = 12
Width = 45
Caption = 'Native'
ParentColor = False
end
object Label8: TLabel
Left = 536
Height = 17
Top = 12
Width = 76
Caption = 'Flip Status:'
ParentColor = False
end
object MainMenu1: TMainMenu object MainMenu1: TMainMenu
Images = ImageList1 Images = ImageList1
left = 222 left = 222
@ -502,32 +622,40 @@ object Form1: TForm1
Caption = 'Undo' Caption = 'Undo'
Checked = True Checked = True
Bitmap.Data = { Bitmap.Data = {
36030000424D3603000000000000360000002800000010000000100000000100 36040000424D3604000000000000360000002800000010000000100000000100
18000000000000030000C40E0000C40E00000000000000000000FF00FFFF00FF 2000000000000004000064000000640000000000000000000000FF00FF00FF00
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
0000000000000000000000000000000000000000000000000000000000000000 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
00FF00FFFF00FFFF00FFFF00FFFF00FF0065639CFFFF00CFFF00CFFF00CFFF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
CFFF009ACE00CFFF009ACE009ACE000000FF00FFFF00FFFF00FFFF00FFFF00FF FF00000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
0065639CFFFF9CFFFF00CFFF00CFFF00CFFF00CFFF009ACE00CFFF009ACE0000 00FF000000FF000000FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00
00FF00FFFF00FFFF00FFFF00FFFF00FF0065639CFFFF00CFFF9CFFFF00CFFF00 FF00006563FF9CFFFFFF00CFFFFF00CFFFFF00CFFFFF00CFFFFF009ACEFF00CF
CFFF00CFFF00CFFF009ACE009ACE000000FF00FFFF00FFFF00FFFF00FFFF00FF FFFF009ACEFF009ACEFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00
0065639CFFFFFFFFFF00CFFF9CFFFF00CFFF00CFFF00CFFF00CFFF009ACE0000 FF00006563FF9CFFFFFF9CFFFFFF00CFFFFF00CFFFFF00CFFFFF00CFFFFF009A
00FF00FFFF00FFFF00FFFF00FFFF00FF0065639CFFFF00CFFFFFFFFF00CFFF9C CEFF00CFFFFF009ACEFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00
FFFF00CFFF00CFFF00CFFF009ACE000000FF00FFFF00FFFF00FFFF00FFFF00FF FF00006563FF9CFFFFFF00CFFFFF9CFFFFFF00CFFFFF00CFFFFF00CFFFFF00CF
0065639CFFFF9CFFFF9CFFFF9CFFFF9CFFFF9CFFFF9CFFFF9CFFFF9CFFFF0000 FFFF009ACEFF009ACEFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00
00FF00FFFF00FFFF00FFFF00FFFF00FF0065639CFFFF9CFFFF9CFFFF9CCFCE00 FF00006563FF9CFFFFFFFFFFFFFF00CFFFFF9CFFFFFF00CFFFFF00CFFFFF00CF
6563006563006563006563006563FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF FFFF00CFFFFF009ACEFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF006563006563006563006563FF00FFFF00FFFF00FFFF00FFFF00FFFF00 FF00006563FF9CFFFFFF00CFFFFFFFFFFFFF00CFFFFF9CFFFFFF00CFFFFF00CF
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF FFFF00CFFFFF009ACEFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF FF00006563FF9CFFFFFF9CFFFFFF9CFFFFFF9CFFFFFF9CFFFFFF9CFFFFFF9CFF
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 FFFF9CFFFFFF9CFFFFFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF FF00006563FF9CFFFFFF9CFFFFFF9CFFFFFF9CCFCEFF006563FF006563FF0065
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF 63FF006563FF006563FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00006563FF006563FF006563FF006563FFFF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
} }
ImageIndex = 1 ImageIndex = 1
end end
@ -543,24 +671,40 @@ object Form1: TForm1
object MenuItem6: TMenuItem object MenuItem6: TMenuItem
Caption = 'Copy' Caption = 'Copy'
Bitmap.Data = { Bitmap.Data = {
2E020000424D2E0200000000000036000000280000000B0000000E0000000100 36040000424D3604000000000000360000002800000010000000100000000100
180000000000F801000000000000000000000000000000000000FF00FFFF00FF 2000000000000004000064000000640000000000000000000000FF00FF00FF00
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF000000FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF00 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
0000FF00FFFF00FFFF00FF000000000000000000000000000000FF00FFFF00FF FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF000000FF00FFFF00FF0000003434CB3434CB3434CB3434CB3434CB0000 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
00FF00FFFF00FF000000FF00FF0000005C5CD63434CB3434CB3434CB3434CB34 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
34CB3434CB000000FF00FF000000FF00FF0000005C5CD65C5CD63434CB3434CB FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
3434CB3434CB3434CB000000FF00FF000000FF00FF0000007474DC5C5CD65C5C FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
D63434CB3434CB3434CB3434CB000000FF00FF000000FF00FF0000007474DC74 FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
74DC5C5CD63434CB3434CB3434CB3434CB000000FF00FF000000FF00FF000000 FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FF0000
7474DC7474DC7474DC5C5CD63434CB3434CB3434CB000000FF00FF000000FF00 00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FFFF00FF0000007474DC7474DC7474DC5C5CD65C5CD6000000FF00FFFF00FF00 FF00FF00FF00FF00FF00000000FF3434CBFF3434CBFF3434CBFF3434CBFF3434
0000FF00FFFF00FFFF00FF000000000000000000000000000000FF00FFFF00FF CBFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00 FF00FF00FF00000000FF5C5CD6FF3434CBFF3434CBFF3434CBFF3434CBFF3434
FFFF00FFFF00FF000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF CBFF3434CBFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
00FFFF00FFFF00FFFF00FF000000FF00FFFF00FFFF00FFFF00FFFF00FFFF00FF FF00FF00FF00000000FF5C5CD6FF5C5CD6FF3434CBFF3434CBFF3434CBFF3434
FF00FFFF00FFFF00FFFF00FFFF00FF000000 CBFF3434CBFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000FF7474DCFF5C5CD6FF5C5CD6FF3434CBFF3434CBFF3434
CBFF3434CBFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000FF7474DCFF7474DCFF5C5CD6FF3434CBFF3434CBFF3434
CBFF3434CBFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00000000FF7474DCFF7474DCFF7474DCFF5C5CD6FF3434CBFF3434
CBFF3434CBFF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00000000FF7474DCFF7474DCFF7474DCFF5C5CD6FF5C5C
D6FF000000FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00000000FF000000FF000000FF000000FF0000
00FFFF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
} }
ImageIndex = 2 ImageIndex = 2
end end
@ -582,25 +726,40 @@ object Form1: TForm1
object MenuItem22: TMenuItem object MenuItem22: TMenuItem
Caption = 'Contents' Caption = 'Contents'
Bitmap.Data = { Bitmap.Data = {
42020000424D4202000000000000420000002800000010000000100000000100 36040000424D3604000000000000360000002800000010000000100000000100
1000030000000002000000000000000000000000000000000000007C0000E003 2000000000000004000064000000640000000000000000000000FF00F700FF00
00001F0000001F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00
1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00
1F7C1F7C1F7C1F7C1F7C1F7C0000000000000000000000000000000000000000 F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00
00001F7C1F7C1F7C1F7C1F7C1042FF7FFF7F9C739C739C733967396739673967 F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00
00001F7C1F7C1F7C1F7C1F7C1042FF7F9C73FF7FFF7F9C73FF7F9C735A6B3967 F700FF00F700000000FF000000FF000000FF000000FF000000FF000000FF0000
00001F7C1F7C1F7C1F7C1F7C1042FF7FFF7FFF7FFF7FFF7F9C73FF7F9C733967 00FF000000FF000000FF000000FF000000FFFF00F700FF00F700FF00F700FF00
00001F7C1F7C1F7C1F7C1F7C1042FF7FFF7FFF7F9C73FF7FFF7F9C73FF7F9C73 F700FF00F70084868CFFFFFFFFFFFFFFFFFFE7E7EFFFE7E7EFFFE7E7EFFFCECF
00001F7C1F7C1F7C1F7C1F7C1042FF7FFF7FFF7FFF7FFF7FFF7FFF7F9C739C73 CEFFCECFCEFFCECFCEFFCECFCEFF000000FFFF00F700FF00F700FF00F700FF00
00001F7C1F7C1F7C1F7C1F7C1042FF7FFF7FFF7FFF7FFF7F9C73FF7FFF7F9C73 F700FF00F70084868CFFFFFFFFFFE7E7EFFFFFFFFFFFFFFFFFFFE7E7EFFFFFFF
00001F7C1F7C1F7C1F7C1F7C1042FF7FFF7FFF7FFF7FFF7FFF7F9C739C735A6B FFFFE7E7EFFFD6D7DEFFCECFCEFF000000FFFF00F700FF00F700FF00F700FF00
00001F7C1F7C1F7C1F7C1F7C1042FF7FFF7FFF7FFF7FFF7F0000000000000000 F700FF00F70084868CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7
00001F7C1F7C1F7C1F7C1F7C1042FF7FFF7FFF7FFF7FFF7F1042FF7FFF7F0000 EFFFFFFFFFFFE7E7EFFFCECFCEFF000000FFFF00F700FF00F700FF00F700FF00
1F7C1F7C1F7C1F7C1F7C1F7C1042FF7FFF7FFF7FFF7FFF7F1042FF7F00001F7C F700FF00F70084868CFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7EFFFFFFFFFFFFFFF
1F7C1F7C1F7C1F7C1F7C1F7C1042FF7FFF7FFF7FFF7FFF7F104200001F7C1F7C FFFFE7E7EFFFFFFFFFFFE7E7EFFF000000FFFF00F700FF00F700FF00F700FF00
1F7C1F7C1F7C1F7C1F7C1F7C10421042104210421042104200001F7C1F7C1F7C F700FF00F70084868CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C1F7C FFFFFFFFFFFFE7E7EFFFE7E7EFFF000000FFFF00F700FF00F700FF00F700FF00
1F7C1F7C1F7C F700FF00F70084868CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7
EFFFFFFFFFFFFFFFFFFFE7E7EFFF000000FFFF00F700FF00F700FF00F700FF00
F700FF00F70084868CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFE7E7EFFFE7E7EFFFD6D7DEFF000000FFFF00F700FF00F700FF00F700FF00
F700FF00F70084868CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000
00FF000000FF000000FF000000FF000000FFFF00F700FF00F700FF00F700FF00
F700FF00F70084868CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8486
8CFFFFFFFFFFFFFFFFFF000000FFFF00F700FF00F700FF00F700FF00F700FF00
F700FF00F70084868CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8486
8CFFFFFFFFFF000000FFFF00F700FF00F700FF00F700FF00F700FF00F700FF00
F700FF00F70084868CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8486
8CFF000000FFFF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00
F700FF00F70084868CFF84868CFF84868CFF84868CFF84868CFF84868CFF0000
00FFFF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00
F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00
F700FF00F700FF00F700FF00F700FF00F700FF00F700FF00F700
} }
ImageIndex = 0 ImageIndex = 0
end end

View File

@ -23,6 +23,9 @@ type
Button4: TButton; Button4: TButton;
Button5: TButton; Button5: TButton;
Button6: TButton; Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
CheckBox1: TCheckBox; CheckBox1: TCheckBox;
CheckBox2: TCheckBox; CheckBox2: TCheckBox;
CheckListBox1: TCheckListBox; CheckListBox1: TCheckListBox;
@ -37,6 +40,12 @@ type
Label1: TLabel; Label1: TLabel;
Label2: TLabel; Label2: TLabel;
Label3: TLabel; Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
FlipLabel: TLabel;
Label8: TLabel;
ListBox1: TListBox; ListBox1: TListBox;
ListBox2: TListBox; ListBox2: TListBox;
MainMenu1: TMainMenu; MainMenu1: TMainMenu;
@ -82,6 +91,7 @@ type
TabSheet1: TTabSheet; TabSheet1: TTabSheet;
TabSheet2: TTabSheet; TabSheet2: TTabSheet;
TabSheet3: TTabSheet; TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
TrayIcon1: TTrayIcon; TrayIcon1: TTrayIcon;
procedure Button1Click(Sender: TObject); procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject); procedure Button2Click(Sender: TObject);
@ -146,6 +156,16 @@ end;
procedure TForm1.Button2Click(Sender: TObject); procedure TForm1.Button2Click(Sender: TObject);
begin begin
FlipChildren(True); FlipChildren(True);
if IsFlipped then
begin
FlipLabel.Caption := 'Flipped';
FlipLabel.Color := clRed;
end
else
begin
FlipLabel.Caption := 'Native';
FlipLabel.Color := clNone;
end;
end; end;
procedure TForm1.FormCreate(Sender: TObject); procedure TForm1.FormCreate(Sender: TObject);

View File

@ -1948,6 +1948,7 @@ type
FClientWidth: Integer; FClientWidth: Integer;
FClientHeight: Integer; FClientHeight: Integer;
FDockManager: TDockManager; FDockManager: TDockManager;
FFlipped: boolean; // true if flipped - false if native
FOnAlignInsertBefore: TAlignInsertBeforeEvent; FOnAlignInsertBefore: TAlignInsertBeforeEvent;
FOnAlignPosition: TAlignPositionEvent; FOnAlignPosition: TAlignPositionEvent;
FOnDockDrop: TDockDropEvent; FOnDockDrop: TDockDropEvent;
@ -2186,6 +2187,7 @@ type
property DockSite: Boolean read FDockSite write SetDockSite default False; property DockSite: Boolean read FDockSite write SetDockSite default False;
property DoubleBuffered: Boolean read FDoubleBuffered write FDoubleBuffered default False; property DoubleBuffered: Boolean read FDoubleBuffered write FDoubleBuffered default False;
property Handle: HWND read GetHandle write SetHandle; property Handle: HWND read GetHandle write SetHandle;
property IsFlipped: Boolean read FFlipped;
property IsResizing: Boolean read GetIsResizing; property IsResizing: Boolean read GetIsResizing;
property TabOrder: TTabOrder read GetTabOrder write SetTabOrder default -1; property TabOrder: TTabOrder read GetTabOrder write SetTabOrder default -1;
property TabStop: Boolean read FTabStop write SetTabStop default false; property TabStop: Boolean read FTabStop write SetTabStop default false;
@ -2823,16 +2825,35 @@ begin
end; end;
function BidiFlipAnchors(Control: TControl; Flip: Boolean): TAnchors; function BidiFlipAnchors(Control: TControl; Flip: Boolean): TAnchors;
var
LeftControl,RightControl : TControl;
LeftSide,RightSide: TAnchorSideReference;
NewAnchors: TAnchors;
begin begin
Result := Control.Anchors; Result := Control.Anchors;
if Flip then if Flip then
begin begin
if (akLeft in Result) and (Control.AnchorSide[akLeft].Control=nil) LeftControl := Control.AnchorSide[akLeft].Control;
and not (akRight in Result) then LeftSide := Control.AnchorSide[akLeft].Side;
Result := Result - [akLeft] + [akRight] if LeftSide = asrTop then LeftSide := asrBottom
else if (akRight in Result) and (Control.AnchorSide[akRight].Control=nil) else if LeftSide = asrBottom then LeftSide := asrTop;
and not (akLeft in Result) then
Result := Result - [akRight] + [akLeft]; RightControl := Control.AnchorSide[akRight].Control;
RightSide := Control.AnchorSide[akRight].Side;
if RightSide = asrTop then RightSide := asrBottom
else if RightSide = asrBottom then RightSide := asrTop;
Control.AnchorSide[akLeft].Control := RightControl;
Control.AnchorSide[akLeft].Side := RightSide;
Control.AnchorSide[akRight].Control := LeftControl;
Control.AnchorSide[akRight].Side := LeftSide;
NewAnchors := [];
if (akTop in Result) then NewAnchors := NewAnchors + [akTop];
if (akBottom in Result) then NewAnchors := NewAnchors + [akBottom];
if (akLeft in Result) then NewAnchors := NewAnchors + [akRight];
if (akRight in Result) then NewAnchors := NewAnchors + [akLeft];
Result := NewAnchors;
end; end;
end; end;

View File

@ -4513,7 +4513,7 @@ begin
FlipControls.Free; FlipControls.Free;
EnableAlign; EnableAlign;
end; end;
FFlipped := not FFlipped; // toggle FFlipped status
// flip recursively // flip recursively
if AllLevels then begin if AllLevels then begin
for i := 0 to ControlCount - 1 do begin for i := 0 to ControlCount - 1 do begin
@ -6659,11 +6659,17 @@ var
i: Integer; i: Integer;
CurControl: TControl; CurControl: TControl;
AWidth: Integer; AWidth: Integer;
SaveLeft: Integer;
begin begin
AWidth:=GetLogicalClientRect.Right; AWidth:=GetLogicalClientRect.Right;
DisableAlign; DisableAlign;
for i:=0 to ControlCount-1 do begin for i:=0 to ControlCount-1 do begin
CurControl:=Controls[i]; CurControl:=Controls[i];
// flip BorderSpacing
SaveLeft := CurControl.BorderSpacing.Left;
CurControl.BorderSpacing.Left := CurControl.BorderSpacing.Right;
CurControl.BorderSpacing.Right := SaveLeft;
// flip control and anchors
CurControl.Left:=AWidth-CurControl.Left-CurControl.Width; CurControl.Left:=AWidth-CurControl.Left-CurControl.Width;
CurControl.Anchors := BidiFlipAnchors(CurControl, True); CurControl.Anchors := BidiFlipAnchors(CurControl, True);
end; end;