2014-09-30 5 views
0

В настоящее время я пытаюсь изменить размеры компонентов в моей форме, но я не могу понять, как это работает. Я пробовал событие OnResize и OnCanResize, но это не изменит мой компонентный heigh или widht.Изменение размеров элементов на formResize в delphi

То, что я делал до сих пор, добавляет фиксированные значения в мое состояние, когда пользователь изменяет размер, но не изменяет размер данного компонента.

Например:

В моей FormResize даже у меня есть что-то подобное:

procedure myform.FormResize(Sender TObject); 
var 
    width: integer; 
begin 
    width := grid.Width +100; //yes it only grows but it doesn't even work 
    grid.setBounds(grid.Left,grid.Top,width,grid.height); 
end; 

Это не работает.

Я также попытался direcly изменения с grid.Width := grid.Width +100, но он не работает либо

Я пытался ставить один и тот же код в CanResize, но тот же вопрос. Я попытался с точками разрыва, если это правильное событие, и если процедура выполняется, когда я изменяю размер и да, это так. Так что, наверное, я что-то пропустил. Моя цель - изменить размер сетки, чтобы сохранить отношение к моей форме, когда пользователь изменит размер/максимизирует форму.

Итак, каков правильный способ изменения размера компонента?

спасибо.

DFM

object BDDTool: TBDDTool 
    Left = 0 
    Top = 0 
    Caption = 'BDD Manager' 
    ClientHeight = 303 
    ClientWidth = 680 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    Menu = mMainMenu 
    OldCreateOrder = False 
    Position = poScreenCenter 
    OnCloseQuery = FormCloseQuery 
    OnCreate = FormCreate 
    OnResize = FormResize 
    PixelsPerInch = 96 
    TextHeight = 13 
    object pnlFileManager: TPanel 
    Left = 8 
    Top = 8 
    Width = 665 
    Height = 289 
    BevelOuter = bvNone 
    TabOrder = 0 
    object Label1: TLabel 
     Left = 156 
     Top = 263 
     Width = 86 
     Height = 13 
     Caption = 'Primary key color:' 
    end 
    object Label2: TLabel 
     Left = 364 
     Top = 263 
     Width = 86 
     Height = 13 
     Caption = 'Foreign key color:' 
    end 
    object sgFilePreview: TStringGrid 
     Left = 143 
     Top = 23 
     Width = 514 
     Height = 234 
     Align = alCustom 
     ColCount = 1 
     Enabled = False 
     FixedCols = 0 
     RowCount = 2 
     TabOrder = 0 
     OnDrawCell = sgFilePreviewDrawCell 
     OnMouseDown = sgFilePreviewMouseDown 
     ColWidths = (
     64) 
     RowHeights = (
     24 
     24) 
    end 
    object btnConnectToDB: TButton 
     Left = 0 
     Top = 32 
     Width = 137 
     Height = 25 
     Caption = 'Connect to DB' 
     Enabled = False 
     TabOrder = 1 
     OnClick = btnConnectToDBClick 
    end 
    object btnCreateTabIncK: TButton 
     Left = 0 
     Top = 94 
     Width = 137 
     Height = 25 
     Caption = 'Create table (inc keys)' 
     Enabled = False 
     TabOrder = 2 
     OnClick = btnCreateTabIncKClick 
    end 
    object btnCreateTabGuidK: TButton 
     Left = 0 
     Top = 125 
     Width = 137 
     Height = 25 
     Caption = 'Create table (guid keys)' 
     Enabled = False 
     TabOrder = 3 
    end 
    object btnAscFk: TButton 
     Left = 0 
     Top = 156 
     Width = 137 
     Height = 25 
     Caption = 'Associate foreign keys' 
     Enabled = False 
     TabOrder = 4 
     OnClick = btnAscFkClick 
    end 
    object pnlFKColor: TPanel 
     Left = 456 
     Top = 263 
     Width = 81 
     Height = 18 
     TabOrder = 5 
    end 
    object btnDeconnectDB: TButton 
     Left = 0 
     Top = 63 
     Width = 137 
     Height = 25 
     Caption = 'Deconnect from DB' 
     Enabled = False 
     TabOrder = 6 
     OnClick = btnDeconnectDBClick 
    end 
    end 
    object pnlPKColor: TPanel 
    Left = 256 
+0

Sidenote, 'Width' является плохим именем переменной. Хорошо, это полезно для объяснения того, что он делает, но он * конфликтует * с свойством 'Width' формы (на самом деле). То, что правильно * правильно, трудно сказать, не зная макет. Если я получу правильный макет (и как вы хотите изменить размер сетки), я бы назвал * правильным * с помощью якорей. – TLama

+0

Я изменил имя моей переменной, но оно не работает :( – user28470

+1

Если вы хотите изменить размер сетки с помощью формы, установите для свойства 'Anchors'' [akLeft, akTop, akRight, akBottom] '(в наборе IDE все 4 'Anchors' property * subvalues ​​* to True), затем удалите свой код из события OnResize и расслабьтесь ;-) – TLama

ответ

0

Проверить вам свойство Align GRID в. Если он настроил что-то еще на alNone, то изменение размера не будет работать как исключенное.

Вместо OnResize попробуйте использовать якоря. Якорям скажут компонент, где его края будут «склеены» внутри его родителя. Если вы установите пустой якорь [], он останется всегда центрированным, если вы установите его на [akBottom, akRight], он останется в нижнем правом углу его родителя при изменении размера родительского компонента. Если вы установите его на [akLeft, akTop, akRight, akBottom], он изменит размер в вертикальном и горизонтальном режимах и сохранит пространство между ребрами родителя и его собственным.

Если вы используете Anchors, для этого вам не требуется событие OnResize.

+0

Mycomponent - это компонент TStringGrid. Я установил его в alNone (он был на заказ), но не работает:/ – user28470

+0

I4ve искал в Интернете, как изменить размер StringGrid. Все, что я могу найти, - это изменить размеры столбцов, но мне это не нужно – user28470

+0

Просьба предоставить дополнительную информацию. Обновите сообщение с помощью определения StringGrid (скопируйте его из файла DFM). – Fenistil