Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Опять масштабирование формы


Автор: RN3QGA 26.2.2006, 20:23
Здравствуйте.
Попался мне код для масштабирования при различном разрешении экрана.

Код

unit Main;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics,
 Controls, Forms, Dialogs, StdCtrls;
type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
     procedure WMDisplayChange(var message: TMessage); message WM_DISPLAYCHANGE;
 public
   { Public declarations }
   W, H: integer;
 end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
 Width := Round(Width * 1.5);
 Height := Round(Height* 1.5);
 ScaleBy(150, 100)
end;
procedure TForm1.WMDisplayChange(var message: TMessage);
begin
 inherited;
 Width := Round(Width * LOWORD(message.LParam) / W);
 Height := Round(Height * HIWORD(message.LParam) / H);
 ScaleBy(LOWORD(message.LParam), W);
 W := Screen.Width;
 H := Screen.Height;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
 W := Screen.Width;
 H := Screen.Height;
end;
end.


По нажатии на Buuton1 происходит увеличение размера формы и элементов на ней.
Но я не могу до конца разобраться (ну не хватает тямушки пока) как тут что работает.
Не моглибы мне пояснить ну хоть комментариями.
Я хочу использовать этот код и для увеличения размера и для уменьшения. Как это сделать ???
Спасибо большое за помощь буду безмерно благодарен.

Автор: Guedda 26.2.2006, 21:15
Вот те комменты к строкам:
Код

unit Main;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics,
 Controls, Forms, Dialogs, StdCtrls;
type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
     procedure WMDisplayChange(var message: TMessage); message WM_DISPLAYCHANGE;
 public
   { Public declarations }
   W, H: integer;
 end;
var
 Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
 Width := Round(Width * 1.5);  //Увеличивает размер практически в 1,5 раза
 Height := Round(Height* 1.5); //Тоже самое
 ScaleBy(150, 100)
end;
procedure TForm1.WMDisplayChange(var message: TMessage);
//процедура отлавливает сообщения об изменении разрешения
begin
 inherited;
 Width := Round(Width * LOWORD(message.LParam) / W); //здесь меняется ширина формы
 Height := Round(Height * HIWORD(message.LParam) / H); //здесь высота
 ScaleBy(LOWORD(message.LParam), W);
 W := Screen.Width;
 H := Screen.Height;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
 W := Screen.Width;
 H := Screen.Height;
end;
end.


Автор: RN3QGA 27.2.2006, 18:25
Доброго времени суток.
Так чегото я этот код мучал, мучал и знаки мменял и множители и делил.
Так и не добился нормального измененияв сторону уменьшения и увеличения формы и компонентомв на ней. Может кто подскажет как сделать такое.
Заранее благодарен. smile

Автор: Guedda 27.2.2006, 20:19
Что именно ты хочешь?

Автор: RN3QGA 28.2.2006, 12:13
Добрый день.
Да собственно хочу чтобы при нажатии на кнопочку происходило масштабирование формы.
Для каждого элемента на форме прописывать изменение размеров довольно трудоемко, вот думал может с помощью этого кода можно.
Получаетчся, что при нажатии вродебы размер меняется но вот пропорциональности не получается все время либо вылетает за область, либо наооборот уменьшается до микроскопического.
Я пробывал менять знак умножения на деление и множитель с делителем, но чтото не получается.
Может есть более грамотное решение этого вопроса.
Спасибо.

Автор: RN3QGA 1.3.2006, 15:38
Все, вопрос решен.
Спасибо всем. smile

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