Программирование в Delphi. Трюки и эффекты. Александр Чиртик
Чтение книги онлайн.

Читать онлайн книгу Программирование в Delphi. Трюки и эффекты - Александр Чиртик страница 13

СКАЧАТЬ style="font-size:15px;">      MakeMovable(ListBox1.Handle);

      MakeMovable(Button1.Handle);

      end

      else

      begin

      //Запрещаем перемещение элементов управления

      MakeUnmovable(Memo1.Handle);

      MakeUnmovable(ListBox1.Handle);

      MakeUnmovable(Button1.Handle);

      end;

      end;

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

      Возможность масштабирования окон (форм) является интересным приемом, который может быть заложен в дизайн приложения. При этом имеется в виду масштабирование в буквальном смысле этого слова: как пропорциональное изменение размера элементов управления формы, так и изменение размера шрифта.

      Использовать масштабирование при работе с Delphi крайне просто, ведь в класс TWinControl, от которого наследуются классы форм, встроены методы масштабирования. Вот некоторые из них:

      • ScaleControls – пропорциональное изменение размера элементов управления на форме;

      • ChangeScale – пропорциональное изменение размера элементов управления с изменением шрифта, который используется для отображения текста в них.

      Оба приведенных метода принимают два целочисленных параметра: числитель и знаменатель нового масштаба формы. Пример задания параметров для методов масштабирования приведен в листинге 1.25.

Листинг 1.25. Масштабирование формы с изменением шрифта

      procedure TfrmScaleBy.cmbSmallerClick(Sender: TObject);

      begin

      ChangeScale(80, 100); //Уменьшение на 20 % (новый масштаб – 80 %)

      end;

      procedure TfrmScaleBy.cmbBiggerClick(Sender: TObject);

      begin

      ChangeScale(120, 100); //Увеличение на 20 % (новый масштаб – 120 %)

      end;

      Чтобы размер шрифта правильно устанавливался, для элементов управления нужно использовать шрифты семейства TrueType (в данном примере это шрифт Times New Roman).

      На рис. 1.16 показан внешний вид формы до изменения масштаба.

      Рис. 1.16. Форма в оригинальном масштабе

      Внешний вид формы после уменьшения масштаба в 1,25 раза (новый масштаб составляет 80 % от первоначального) показан на рис. 1.17.

      Рис. 1.17. Форма в масштабе 80 %

      То, что форма не изменяет свой размер при масштабировании, можно легко исправить, установив, например, свойство AutoSize в значение True с помощью редактора свойств объектов (Object Inspector).

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

      1. Получить прямоугольник клиентской области окна (GetClientRect).

      2. Вычислить новый размер клиентской области.

      3. Рассчитать разницу между новой и первоначальной шириной, новой и первоначальной высотой клиентской области; сложить полученные значения с первоначальными размерами самой формы.

      Пример расчета для увеличения размера клиентской области в 1,2 раза приведен ниже:

      GetClientRect(Handle, rc);

      newWidth:= (rc.Right – rc.Left) * 120 div 100;

      newHeight:= (rc.Bottom – rc.Top) * 120 div 100;

      Width:= Width + newWidth – (rc.Right – rc.Left);

      Height:= СКАЧАТЬ