Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Масштабирование


Страницы:   1 2

RASkov ©   (2006-09-06 01:44:00) 

Народ, здрасте. Чего то туплю я сегодня. Нужно при изменении размера формы менять размер панели или другими словами масштабировать ее. При ширине формы 500 панель должна быть 200 т.е. это такие размеры при старте. Делаю так, но чето весь в сомнениях если расскоментировать строчку и закоментить следующую, то вроде нормально но че то не нравиться мне это. Вот код:

procedure TForm1.FormResize(Sender: TObject);
begin
 //Panel1.Width:=Width div (500 div 200)-50;
 Panel1.Width:=Width div (500 div 200);
end;

Сомнения в этих самых -50.
ЗЫ Математика это сила, а я в ней бессилен:)


RASkov   (2006-09-06 14:08:00) [21]

> [15] Desdechado ©   (06.09.06 13:46)

Это не совсем то что надо. Если все выставляешь в True то ерунда получаеться, а вот если в False то получается вроде бы нормальное позиционирование, а размер остаеться тот же.
Нужно добиться токого эффекта
когда на форме есть Image в нем картинка, У Image Align:=alClient он на всю форму на картинке есть небольшой черный прямоугольник, пусть 50х150, вот надо на него положить панель, т.е. во время дизайна положить панель на форму так что бы она закрыла этот прямоугольник но оставив при этом 1..2 пикселя по краям черных ну а далее понятно при запуске эта панель должна все время закрывать этот прямоугольник даже при изменении размера формы.
Вот такая вот загагулина. Может это каким нибудь другим способом можно дабиться?
P/S

> [11] Barloggg   (06.09.06 12:24)
и вообще есть такие вещи как onResizeу формы.

А я как делаю? см [0],[5]


RASkov   (2006-09-06 13:53:00) [22]

> [11] Barloggg   (06.09.06 12:24)
> а вот не надо пользоваться x div y.
> надо пользоваться trunc(  x / y);

Да это похоже одно и тоже...

Спасибо всем, счас будем пробовать..... ночью башка не варит:)


MacroDenS   (2006-09-06 13:49:00) [23]

koefW:= Trunc(RoundTo(Form.windth / DefaultWidth, 0)); <=> koefW:= Trunc(RoundTo( Form.width/ DefaultWidth, 0));


MacroDenS   (2006-09-06 13:47:00) [24]

to Наиль ©   (06.09.06 12:47) [12]

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

Можно сделать так:



uses Math;

Const
  DefaultWidth = 500;
  DefaultHeight = 200;

...OnResizeForm...
var
  koefW, koefH: Integer;
begin
  ...
  koefW:= Trunc(RoundTo(Form.windth / DefaultWidth, 0));
  koefH:= Trunc(RoundTo(Form.Height / DefaultHeight, 0));

  Panel1.width:=Trunc(RoundTo(Panel1.width*koefW));
  Panel1.height:=Trunc(RoundTo(Panel1.Height*koefH));
  ...
end;


Desdechado   (2006-09-06 13:46:00) [25]

Anchors тебе в помощь


Virgo_Style   (2006-09-06 13:45:00) [26]

Loginov Dmitry ©   (06.09.06 13:35) [13]
Найди 2 отличия ;)


var x,y : single; //впрочем, в данном случае это оффтоп %-)


Loginov Dmitry   (2006-09-06 13:35:00) [27]

> а вот не надо пользоваться x div y.
> надо пользоваться trunc(  x / y);


Найди 2 отличия ;)


Наиль   (2006-09-06 12:47:00) [28]

Const
StartPanelWidth=200;
StartFormWidth=500;
Ratio=StartPanelWidth/StartFormWidth;

procedure TForm1.FormResize(Sender: TObject);
Var
begin
Panel1.Width:=Round(Width*Ratio);
end;


Barloggg   (2006-09-06 12:24:00) [29]

а вот не надо пользоваться x div y.
надо пользоваться trunc(  x / y);

и вообще есть такие вещи как onResize у формы.
там сразу все и пересчитывать. для каждой конкретной панели...


Loginov Dmitry   (2006-09-06 08:21:00) [30]

> Panel1.Width:=Width div (500 div 200);


Имхо, Panel1.Width:=Width div 2 короче выглядет


unknown   (2006-09-06 03:47:00) [31]


> RASkov

Масштабирование? Извратное занятие, должен сказать.
У меня нормальнореализовать масштабирование формы
и контролов на ней (динамически) не получилось.
Есть у Дмитрия компонент - http://ehlib.com/autopnl.zip
но тоже не очень красиво получается частенько.
p.s.
Если серьезно заняться этой проблемой, то можно и сделать, однако
пользователи эту фишку наврядли оценят по достоинству.


Rial   (2006-09-06 03:29:00) [32]

Panel1.Width:=Width * 200 div 500;

Просто div - целочисленное деление, поэтому

Width div (500 div 200) = Width div 2


RASkov   (2006-09-06 03:12:00) [33]

Блин, походу все спят... ну тады спокой ной ночи:)
Вопрос в силе. Зарание спасибо.


RASkov   (2006-09-06 03:09:00) [34]

Это... FW и PW это ширина формы и панели во время дизайна соответственно


RASkov   (2006-09-06 03:07:00) [35]

Сделал так...

procedure TForm1.FormResize(Sender: TObject);
var PW, FW: Integer;
begin
 FW:=580;
 PW:=200;
 if(FW mod PW)<>0 then Panel1.Width:=Width div (FW div PW)-50
  else Panel1.Width:=Width div (FW div PW);
 Caption:=Format('Panel=%d, Width=%d, PW=%d, FW=%d',[Panel1.Width, Width, PW, FW]);
end;


... и тоже не правильно, народ ну кто знает как правильно масштабировать панель на форме при изминении размеров формы?


RASkov   (2006-09-06 02:46:00) [36]

Чето ну никак не соображу почему так... Ставлю ширину у формы 450 у панели 150 стартую прогу все нормально - стартует с размерами 450 ширина у формы и 150 у панели, а если делаю у формы 400 а у панели 150 то после старта панель становиться на 50 больше. Как сделать чебы всегда было правильно? т.е. как узнать что надо отнять 50 (я так понял что отнимать нужно только 50) при некоторых обстоятельствах?


RASkov   (2006-09-06 02:15:00) [37]

Наверное опять непонятно написал:(


RASkov   (2006-09-06 01:58:00) [38]

> [1] Palladin ©   (06.09.06 01:48)

Почему приходиться отнимать 50?
Откуда это число? просто я для проверки так сделал 500 и 200, а если размеры будут типа 637 у формы и 153 у панели то как правильно сделать? Сколько отнимать надо?
Если оставить эту строчку (Panel1.Width:=Width div (500 div 200);) из примера выше то при создании формы ее ширина 500 а у панели 250 становиться вот я и отнял эти 50..а размеры перед стартом были 500 и 200, и должны были остаться такими, и только потом при изменении размера формы панель должна масштабироваться... вот... если не понятно опять то остаеться надеяться на Ваш телепатор:))


Palladin   (2006-09-06 01:48:00) [39]

телепатор inside не в силах понять что же тебе конкретно не нравиться в коде...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо