Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2011, 10:23   #1
novichok1
Пользователь
 
Регистрация: 22.01.2011
Сообщений: 25
По умолчанию Как уловить начало изменения размеров формы.

Всех приветствую. Подскажите пожалуйста, с помощью какого события можно подловить момент начала изменения размеров формы. Надо, чтобы при изменении размеров формы пропорционально изменялись размеры всех компонентов, я пытаюсь сохранить первичные размеры, далее найти коэффициент пропорции новых размеров по отношению к старым, и размеры компонентов умножить на полученный коэффициент, при этом конечно округляя полученные размеры. Событие onResize возвращет новые размеры, а вот запомнить старые не удается. Если можно сделать все это как то другим путем, то тоже сойдет за решение. Заранее всем спасибо.
novichok1 вне форума Ответить с цитированием
Старый 08.02.2011, 10:54   #2
VadikV
Форумчанин
 
Аватар для VadikV
 
Регистрация: 08.01.2011
Сообщений: 226
По умолчанию

можно в свойство tag каждого компонента прописывать его либо первоначальные (оригинальные) размеры, либо предыдущие размеры. ну и при ресайзе уже отталкиваться от этих цифр.
или завести ассоциативный массив, в которые прописывать нужные цифры.
icq 223-630-454
e-mail vysotskiy@list.ru
сайт http://www.big-library.net/
VadikV вне форума Ответить с цитированием
Старый 08.02.2011, 11:10   #3
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Цитата:
с помощью какого события можно подловить момент начала изменения размеров формы
FormCanResize
Цитата:
пропорционально изменялись размеры всех компонентов
у компонентов есть свойство Anchors, поиграй с ним, это тебе поможет...
принимаю благодарности в письменном виде( весы слева)...
MaxNik2009 вне форума Ответить с цитированием
Старый 08.02.2011, 11:20   #4
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Считать нужно именно от ПЕРВОНАЧАЛЬНОГО размера, а округлять именно при окончательном назначении габаритов.
Код:
var
  OldRects: array of TRect;
  OldSize: TPoint;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  OldSize.X := ClientWidth;
  OldSize.Y := ClientHeight;
  SetLength (OldRects, ControlCount);
  for i := 0 to Length (OldRects) - 1 do
    OldRects[i] := Controls[i].BoundsRect;
end;

procedure TForm1.FormResize(Sender: TObject);
var
  i: Integer;
  kX, kY: Real;
  BR: TRect;
begin
  kX := ClientWidth / OldSize.X;
  kY := ClientHeight / OldSize.Y;
  for i := 0 to Length (OldRects) - 1 do begin
    BR.Left   := Round (OldRects[i].Left   * kX);
    BR.Right  := Round (OldRects[i].Right  * kX);
    BR.Top    := Round (OldRects[i].Top    * kY);
    BR.Bottom := Round (OldRects[i].Bottom * kY);
    Controls[i].BoundsRect := BR;
  end;
end;
Sibedir вне форума Ответить с цитированием
Старый 08.02.2011, 11:30   #5
novichok1
Пользователь
 
Регистрация: 22.01.2011
Сообщений: 25
По умолчанию

Заработало, не совсем так как я хотел, но дальше сам разберусь. Спасибо всем кто откликнулся, и огромное спасибо Sibedir.

Последний раз редактировалось novichok1; 08.02.2011 в 11:33.
novichok1 вне форума Ответить с цитированием
Старый 08.02.2011, 13:09   #6
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Что-то вы тут намутили...
А ежели попроще ?
Код:
  private
    { Private declarations }
    procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
    message WM_GETMINMAXINFO;
...
procedure TForm1.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
begin
{...
тут запоминаем все, что нужно и не нужно :)
...}
// Можно "пикнуть", чтобы просигнализировать, что гадкий юзер меняет размер формы :)
MessageBeep(0);
inherited;
end;
asmodey1 вне форума Ответить с цитированием
Старый 08.02.2011, 13:28   #7
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

asmodey1, что это было? Зачем игнорировать юзера? ТС же четко поставил задачу: масштабировать компоненты при изменении размеров формы.
Sibedir вне форума Ответить с цитированием
Старый 08.02.2011, 18:00   #8
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
у компонентов есть свойство Anchors, поиграй с ним, это тебе поможет...
гениалное просто, че мудрить то, вед всего 4 параметра, поддерживаю
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 08.02.2011, 19:31   #9
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
asmodey1, что это было? Зачем игнорировать юзера? ТС же четко поставил задачу: масштабировать компоненты при изменении размеров формы.
Прошу прощения... Постараюсь исправиться... Видимо, мне просто показалось сослепу :
Цитата:
Сообщение от novichok1 Посмотреть сообщение
Подскажите пожалуйста, с помощью какого события можно подловить момент начала изменения размеров формы
novichok1 - это ТС...
asmodey1 вне форума Ответить с цитированием
Старый 08.02.2011, 20:06   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

А-а-а, ну всё, понял.
Но эт все-равно не поможет. Запоминать нужно именно при создании формы.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выход из формы без сохранения изменения Swatch Microsoft Office Access 5 18.12.2018 18:33
Задание размеров формы с помощью констант (C++) Хохол Общие вопросы .NET 2 20.11.2009 13:19
Запретить изменение размеров формы larin1974 Общие вопросы Delphi 9 12.09.2009 20:27
Как изменять размеры шрифта при изменении размеров canvas? SkAndrew Мультимедиа в Delphi 2 07.12.2008 23:02