2013-12-11 7 views
-1

У меня есть рамка, которая помещается в форму. Я ожидаю разместить несколько экземпляров этого фрейма в форме.Как вы делаете событие OnResize TFrame, когда оно появляется первым?

У этого есть drawgrid с 2 столбцами, и в событии OnResize я делаю второй столбец, простирающийся до конца доступного пространства. Это работает, когда форма вручную изменяется с помощью рамки Align, установленного в alTop. Но когда форма появляется впервые, хотя FrameResize получает вызов, это не имеет никакого эффекта. (Хотя он действительно имел желаемый эффект, когда я наложил на него точку останова).

Итак, что я делаю сейчас, вызывается FrameResize из форм OnShow-обработчика, но это уродливо. Рамка должна быть правильно сформирована без помощи формы.

Любые идеи? Я попытался переопределить SetParent, но это не сработало. Использование Xe2.

ТИА Марк

+1

Это работает отлично для меня. Я поместил один фрейм с align = alNone и один с alRight в мою форму. Форма сначала получает сообщение «WM_SIZE», которое вызывает событие onResize на каждом TFrame. Затем их «TDrawGrids» будут настроены. Все отлично. Можете ли вы опубликовать свой код обработчика событий onResize? –

+1

Я создал пустой фрейм и пустую форму и добавил экземпляр фрейма в форму. Я выполнил событие OnResize для фрейма, который вызывает «Beep». Когда я запускаю приложение, он подает звуковой сигнал при запуске. Я думаю, нам нужен SSCCE. –

+0

Спасибо за ваши усилия, ребята, и преподаю мне акроним SSCCE. Это может быть ошибка, зависящая от версии? Я использую XE2. Поскольку я решил это, мне нужно заняться другими вещами. –

ответ

1

я решил его с советом из Питера Below, член Delphi Team B Delphi.

I overrode рамки рамки рамки. Его вызывали еще до того, как были заданы переменные компонента, поэтому он выглядит так:

procedure TfaDupDisplay.SetBounds(ALeft, ATop, AWidth, AHeight: Integer); // Had to use SetBounds because OnRezise was not working 
var grid: TDrawGrid; 
begin 
    inherited; 
    if pnlWebData = nil then 
    exit; 
    pnlWebData.Width := Width div 2; 
    for grid in TArray<TDrawGrid>.Create(grdData, grdDup) do 
    grid.ColWidths[1] := grid.Width - grdData.ColWidths[0]; 
end{ SetBounds};