Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Привязка компонентов к форме


Автор: Aaabb 18.11.2009, 22:02
Как привязать компоненты, находящиеся на форме, к форме, то есть если приложение будет запущено на компьютере с разрешением монитора отличным от того на котором оно разрабатывалось, чтобы компоненты увеличились или уменьшились пропорционально формы ?

Автор: Keeper89 18.11.2009, 22:09
Aaabb, если у вас новые версии Delphi (2006 и выше), там есть TFlowPanel и TGridPanel. иначе - вручную.

Добавлено через 1 минуту и 44 секунды
А вообще, гляньте св-во Align - может и оно сгодится.

Автор: Aaabb 18.11.2009, 22:33
А если вручную, то как?

Автор: Frees 18.11.2009, 22:55
свойство Anchor посмотри

Автор: Aaabb 18.11.2009, 23:35
Установила свойства компонентов Button и Memo Align=AlNone, Anchor=[akLeft,akTop].  В Events ИО и активизировала событие OnResize.  
Что дальше? В задании написано: Используя свойства формы ClientWidth , ClientHeight , а также свойства компонентов Button и Memo – Left , Top , Width, Height добейтесь, чтобы обработчик обеспечивал пропорциональное воспроизведение и привязку компонентов формы в нормальном и максимизированном состояниях. Как это сделать???
Помогите пожалуйста кто чем может, срочно нужно лабораторку сдать.

Автор: Christoph 19.11.2009, 01:20
FormCanResize 
Находить разницу до ресайза и после, и настолько же увеличить высоту ширину контрола

Автор: kami 19.11.2009, 01:23
Для конкретики возьмем TButton. Вырезки из кода (пишу в браузере, могут быть синтаксические ошибки, но это не главное - важна идея).

Код

TMyForm=class(TForm)
  Button1:TButton;
private
  FLeftScale, FWidthScale: double;
  FTopScale, FHeightScale: double;
public
end;
//============
implementation
//============

procedure TMyForm.FormCreate(Sender:TObject);
begin
  // определяем коэффициенты масштабирования
  // положения кнопки
  FLeftScale:= Button1.Left/ClientWidth;
  FTopScale:=Button1.Top/ClientHeight;
  // и ее габаритов (пользоваться одними и теми же нельзя, бо будет непропорционально)
  FWidthScale:=Button1.Width/ClientWidth;
  FHeightScale:=Button1.Height/ClientHeight;
end;


procedure TMyForm.FormResize(...);
begin
  // и по завершению изменения размеров формы
  // в соответствии с ранее установленными коэффициентами
  // задаем новое положение и размеры кнопке.
  Button1.Left:=Round(ClientWidth*FLeftScale);
  Button1.Top:=Round(ClientHeight*FTopScale);
  Button1.Width:=Round(ClientWidth*FWidthScale);
  Button1.Height:=Round(ClientHeight*FHeightScale);
end;

Автор: Aaabb 19.11.2009, 19:22
kami, спасибо большое!!!! Всё получилось!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)