Изменение размера формы при сохранении соотношения сторон - PullRequest
7 голосов
/ 07 июня 2011

У меня есть окно, в котором я показываю картинку. Я хочу, чтобы пользователь мог изменить размер этого окна, но сохраняйте его в том же соотношении сторон, что и на изображении, чтобы в окне не появлялись большие пустые области.

То, что я пробовал, выглядит примерно так в событии OnResize:

DragWidth := Width;
DragHeight := Height;

//Calculate corresponding size with aspect ratio
//...
//Calculated values are now in CalcWidth and CalcHeight

Width := CalcWidth;
Height := CalcHeight;

Проблема в том, что окно мигает во время перетаскивания изменения размера между исходным размером изменения размера и вычисленным, поскольку событие OnResize вызывается afaik после того, как изменение размера уже выполнено (и окрашено один раз).

Знаете ли вы какое-либо решение для плавного изменения размера изображения?

Спасибо за любую помощь.

Ответы [ 2 ]

7 голосов
/ 07 июня 2011

Добавление следующего обработчика для события OnCanResize мне показалось очень хорошим:

procedure TForm1.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
var
  AspectRatio:double;
begin
  AspectRatio:=Height/Width;
  NewHeight:=round(AspectRatio*NewWidth);
end;

Вы, конечно, можете изменить метод расчета NewHeight и NewWidth. Следующий метод выглядит интуитивно "правильным", когда я пробую его в чистом виде:

  NewHeight:=round(0.5*(NewHeight+AspectRatio*NewWidth));
  NewWidth:=round(NewHeight/AspectRatio);
2 голосов
/ 07 июня 2011

Последние Delphi имеют событие OnCanResize , которое позволяет вам сделать именно это.Вы можете просто вернуть рассчитанные значения NewWidth и NewHeight непосредственно из события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...