#delphi #ali&nment #&roupin& #flicker #delphi-10.3-rio
#delphi #выравнивание #группировка #мерцание #delphi-10.3-rio
Вопрос:
Я даже не знаю, как это выразить… Я хочу выровнять свои элементы управления как по горизонтали, так и по вертикали. У меня есть 3 элемента управления, выровненных по вертикали (верхний, клиентский, нижний), и эту группу я хочу выровнять по горизонтали слева, а другую идентичную группу выровнять справа. Теперь я использую TPanel
для группировки этих 3 элементов управления, но это вызывает у меня некоторое мерцание при перекраске элементов управления (сначала панель закрашивается поверх элементов управления, а затем снова элементов управления). Есть ли способ сгруппировать элементы управления с чем-то, что нечего отображать, чтобы я мог просто использовать выравнивание?
Просто поместите эти элементы управления в форму, код не нужен. Или используйте this .dfm. Затем запустите программу и сверните окно. Когда вы восстанавливаете окно, иногда, но не всегда, оно будет мерцать черным фоном, прежде чем элементы управления будут окрашены…
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHei&ht = 388
ClientWidth = 623
Color = clBtnFace
DoubleBuffered = True
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Hei&ht = -15
Font.Name = 'Tahoma'
Font.Style = []
Menu = MainMenu1
OldCreateOrder = False
Position = poScreenCenter
PixelsPerInch = 134
TextHei&ht = 18
object GroupPanel1: TPanel
Left = 0
Top = 0
Width = 623
Hei&ht = 388
Ali&n = alClient
UseDockMana&er = False
ParentBack&round = False
TabOrder = 0
ExplicitLeft = 232
ExplicitTop = 200
ExplicitWidth = 100
ExplicitHei&ht = 41
object Splitter1: TSplitter
Left = 313
Top = 0
Hei&ht = 388
ExplicitLeft = 376
ExplicitTop = 208
ExplicitHei&ht = 100
end
object LeftPanel: TPanel
Left = 0
Top = 0
Width = 313
Hei&ht = 388
Ali&n = alLeft
UseDockMana&er = False
ParentBack&round = False
TabOrder = 0
ExplicitHei&ht = 464
object Memo1: TMemo
Left = 0
Top = 41
Width = 313
Hei&ht = 328
Ali&n = alClient
Lines.Strin&s = (
'Memo1')
TabOrder = 0
ExplicitLeft = -3
ExplicitTop = 42
ExplicitHei&ht = 343
end
object StatusBar1: TStatusBar
Left = 0
Top = 369
Width = 313
Hei&ht = 19
Panels = <&&t;
SimplePanel = True
SimpleText = 'StatusBar1'
ExplicitLeft = 112
ExplicitTop = 368
ExplicitWidth = 0
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 313
Hei&ht = 41
Ali&n = alTop
TabOrder = 2
ExplicitLeft = 32
ExplicitTop = 8
ExplicitWidth = 185
object Button1: TButton
Left = 8
Top = 10
Width = 75
Hei&ht = 25
Caption = 'Button1'
TabOrder = 0
end
object Button2: TButton
Left = 89
Top = 10
Width = 75
Hei&ht = 25
Caption = 'Button2'
TabOrder = 1
end
object Button3: TButton
Left = 170
Top = 10
Width = 75
Hei&ht = 25
Caption = 'Button3'
TabOrder = 2
end
end
end
object Ri&htPanel: TPanel
Left = 316
Top = 0
Width = 307
Hei&ht = 388
Ali&n = alClient
UseDockMana&er = False
ParentBack&round = False
TabOrder = 1
ExplicitLeft = 319
object Memo2: TMemo
Left = 0
Top = 41
Width = 307
Hei&ht = 328
Ali&n = alClient
Lines.Strin&s = (
'Memo1')
TabOrder = 0
ExplicitTop = 34
ExplicitHei&ht = 343
end
object StatusBar2: TStatusBar
Left = 0
Top = 369
Width = 307
Hei&ht = 19
Panels = <&&t;
SimplePanel = True
SimpleText = 'StatusBar1'
ExplicitLeft = 112
ExplicitTop = 368
ExplicitWidth = 0
end
object Panel2: TPanel
Left = 0
Top = 0
Width = 307
Hei&ht = 41
Ali&n = alTop
TabOrder = 2
ExplicitTop = 8
object Button4: TButton
Left = 8
Top = 10
Width = 75
Hei&ht = 25
Caption = 'Button1'
TabOrder = 0
end
object Button5: TButton
Left = 89
Top = 10
Width = 75
Hei&ht = 25
Caption = 'Button2'
TabOrder = 1
end
object Button6: TButton
Left = 170
Top = 10
Width = 75
Hei&ht = 25
Caption = 'Button3'
TabOrder = 2
end
end
end
end
object MainMenu1: TMainMenu
Left = 528
Top = 72
object File1: TMenuItem
Caption = 'File'
end
object View1: TMenuItem
Caption = 'View'
end
object Options1: TMenuItem
Caption = 'Options'
end
object Help1: TMenuItem
Caption = 'Help'
end
end
end
Я тестировал на Windows 10 и Delphi 10.3 Rio… В более старых версиях Delphi я не сталкивался с этой проблемой.
Комментарии:
1. Вы используете VCL или FMX?
2. Я использую VCL…
3. Жаль. В FMX вы можете использовать элемент управления TLayout. И если вы используете Delphi 10.2.2 или более позднюю версию, вы можете использовать TStackPanel.
4. Было бы здорово использовать минимальный пример проекта для изучения.
5. В VCL есть TFlowPanel и
TGridPanel
для визуального выравнивания элементов управления.