2
コードからTGridPanelでフォームを作成しようとしています。コードからTGridPanelに追加するときに、2つのパーセンテージ行の間に絶対行を入れる方法はありますか?
は含ま:
- (50%に設定されている)上部のメモ(24個の画素に設定されている)中心に
- ナビゲータ下部に
- グリッド
:(これは50%に設定されている)uses Winapi.Messages, Winapi.Windows, System.Classes, System.SysUtils, System.UITypes, System.Variants, Vcl.Controls, Vcl.DBCtrls, Vcl.DBGrids, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Forms, Vcl.Graphics, Vcl.Grids, Vcl.StdCtrls, Data.DB; procedure Test; var View: TForm; GridPanel: TGridPanel; Grid: TDBGrid; DataSource: TDataSource; Navigator: TDBNavigator; Memo: TMemo; begin View := TForm.Create(Application); try View.Name := 'Form2'; // SystemFont(View.Font); View.Width := 640; View.Height := 480; View.Position := TPosition.poOwnerFormCenter; GridPanel := TGridPanel.Create(View); GridPanel.Name := 'GridPanel'; GridPanel.Caption := ''; GridPanel.BevelOuter := TBevelCut.bvNone; GridPanel.FullRepaint := False; GridPanel.Parent := View; GridPanel.Align := TAlign.alClient; GridPanel.ColumnCollection.BeginUpdate; GridPanel.ColumnCollection.Delete(1); GridPanel.ColumnCollection[0].Value := 100; GridPanel.ColumnCollection.EndUpdate; GridPanel.RowCollection.BeginUpdate; GridPanel.RowCollection.Add; TCellItem(GridPanel.RowCollection[0]).Value := 50; TCellItem(GridPanel.RowCollection[0]).SizeStyle := TSizeStyle.ssPercent; TCellItem(GridPanel.RowCollection[1]).Value := 24; TCellItem(GridPanel.RowCollection[1]).SizeStyle := TSizeStyle.ssAbsolute; TCellItem(GridPanel.RowCollection[2]).Value := 50; TCellItem(GridPanel.RowCollection[2]).SizeStyle := TSizeStyle.ssPercent; GridPanel.RowCollection.EndUpdate; Memo := TMemo.Create(View); Memo.Name := 'Memo'; Memo.Parent := GridPanel; Memo.Lines.Clear; Memo.Align := TAlign.alClient; DataSource := TDataSource.Create(View); Navigator := TDBNavigator.Create(View); Navigator.Name := 'Navigator'; Navigator.DataSource := DataSource; Navigator.Parent := GridPanel; Navigator.Align := TAlign.alClient; Grid := TDBGrid.Create(View); Grid.Name := 'Grid'; Grid.Parent := GridPanel; Grid.Align := TAlign.alClient; Grid.DataSource := DataSource; { GridPanel.ControlCollection.BeginUpdate; GridPanel.ControlCollection.AddControl(Memo, 0, 0); GridPanel.ControlCollection.AddControl(Navigator, 0, 1); GridPanel.ControlCollection.AddControl(Grid, 0, 2); GridPanel.ControlCollection.EndUpdate; } // ShowMessage(ComponentToString(View)); View.ShowModal; finally View.Free; end; end
これは私が書いたコードであります
結果は次のようになります。
問題:フォームの下部にあるギャップと見られるようになしDBナビゲータがあります!
DFMのダンプは、私には罰金になります。私は位置を変更すると
object Form2: TForm
Left = 0
Top = 0
Caption = 'Form2'
ClientHeight = 441
ClientWidth = 624
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poOwnerFormCenter
PixelsPerInch = 96
TextHeight = 13
object GridPanel: TGridPanel
Left = 0
Top = 0
Width = 624
Height = 441
Align = alClient
BevelOuter = bvNone
ColumnCollection = <
item
Value = 100.000000000000000000
end>
ControlCollection = <
item
Column = 0
Control = Memo
Row = 0
end
item
Column = 0
Control = Navigator
Row = 1
end
item
Column = 0
Control = Grid
Row = 2
end>
FullRepaint = False
RowCollection = <
item
Value = 50.000000000000000000
end
item
SizeStyle = ssAbsolute
Value = 24.000000000000000000
end
item
Value = 50.000000000000000000
end>
TabOrder = 0
object Memo: TMemo
Left = 0
Top = 0
Width = 624
Height = 208
Align = alClient
TabOrder = 0
ExplicitLeft = 219
ExplicitTop = 59
ExplicitWidth = 185
ExplicitHeight = 89
end
object Navigator: TDBNavigator
Left = 0
Top = 208
Width = 624
Height = 18
Align = alClient
TabOrder = 1
ExplicitTop = 0
ExplicitWidth = 240
ExplicitHeight = 25
end
object Grid: TDBGrid
Left = 0
Top = 208
Width = 624
Height = 209
Align = alClient
TabOrder = 2
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
end
end
object TDataSource
end
end
、ナビゲーターは、正しい位置にあるが、私はそれが絶対的になりたいです。
TCellItem(GridPanel.RowCollection[1]).Value := 5;
TCellItem(GridPanel.RowCollection[1]).SizeStyle := TSizeStyle.ssPercent;
この場合、TGridPanel
はなぜ奇妙な動作をしますか?それについて私は何ができますか?
理由は 'TCellItem.SetValue'にあります。' TCellItem'クラスの中に 'FValue'の隣に' FSize'というフィールドがあります。どのようなハック... –
@JensMühlenhoff、 'FSize'は' SizeStyle'がssAbsoluteであるときに値に設定されるピクセルで実際のサイズをとります。それ以外の場合は 'TCustomGridPanel.RecalcCellDimensions'で計算されます。 –