Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
VladSmith
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 6
1

Изменять размер и положение объектов при изменении размеров формы

01.04.2017, 16:49. Просмотров 512. Ответов 7
Метки нет (Все метки)

Суть задачи. Сделать так чтобы размер и положение объектов менялся соответственно размерам формы, при изменении ее размеров. Реализовал это при помощи двух процедур. Но код выглядит ужасно и препод такой не примет. Как переделать всё так чтобы выглядело красиво, без глобальных переменных и повторов похожих строк кода? В первой процедуре мы берем размеры формы и объектов на ней, вычисляем коэффициенты, благодаря которым во второй процедуре размер и положение кнопок меняются соответственно размерам формы.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
unit UnitLab3;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TFormLab3 = class(TForm)
    BttnHelp: TButton;
    BttnAuthor: TButton;
    BttnExit: TButton;
    procedure FormResize(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BttnExitClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  FormLab3: TFormLab3;
  CoefWidth, CoefHeight, CoefTopBttnAuthor, CoefLeftBttnAuthor, CoefTopBttnHelp, CoefLeftBttnHelp, CoefTopBttnExit, CoefLeftBttnExit: real;
 
implementation
 
{$R *.dfm}
 
procedure TFormLab3.FormCreate(Sender: TObject);
begin
  CoefWidth := FormLab3.ClientWidth / BttnHelp.Width;
  CoefHeight := FormLab3.ClientHeight / BttnHelp.Height;
 
  CoefTopBttnAuthor := FormLab3.ClientHeight / BttnAuthor.Top;
  CoefLeftBttnAuthor := FormLab3.ClientWidth / BttnAuthor.Left;
 
  CoefTopBttnHelp := FormLab3.ClientHeight / BttnHelp.Top;
  CoefLeftBttnHelp := FormLab3.ClientWidth / BttnHelp.Left;
 
  CoefTopBttnExit := FormLab3.ClientHeight / BttnExit.Top;
  CoefLeftBttnExit := FormLab3.ClientWidth / BttnExit.Left;
end;
 
procedure TFormLab3.FormResize(Sender: TObject);
begin
 
  BttnHelp.Top := Trunc(FormLab3.ClientHeight / CoefTopBttnHelp);
  BttnHelp.Left := Trunc(FormLab3.ClientWidth / CoefLeftBttnHelp);
  BttnHelp.Width := Trunc(FormLab3.ClientWidth / CoefWidth);
  BttnHelp.Height := Trunc(FormLab3.ClientHeight / CoefHeight);
 
  BttnAuthor.Top := Trunc(FormLab3.ClientHeight / CoefTopBttnAuthor);
  BttnAuthor.Left := Trunc(FormLab3.ClientWidth / CoefLeftBttnAuthor);
  BttnAuthor.Width := Trunc(FormLab3.ClientWidth / CoefWidth);
  BttnAuthor.Height := Trunc(FormLab3.ClientHeight / CoefHeight);
 
  BttnExit.Top := Trunc(FormLab3.ClientHeight / CoefTopBttnExit);
  BttnExit.Left := Trunc(FormLab3.ClientWidth / CoefLeftBttnExit);
  BttnExit.Width := Trunc(FormLab3.ClientWidth / CoefWidth);
  BttnExit.Height := Trunc(FormLab3.ClientHeight / CoefHeight);
 
end;
 
procedure TFormLab3.BttnExitClick(Sender: TObject);
begin
  FormLab3.Close;
end;
 
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2017, 16:49
Ответы с готовыми решениями:

Перерисовка всех объектов формы при изменении ее размеров
создаю форму при помощи API следующим образом: // Заполняем структуру...

Автоматическое изменение размеров компонентов при изменении размеров формы
Приветствую. Подскажите. Форма по умолчанию при запуске приложения открывается...

При изменении содержимого поля Edit изменять заголовок формы
1.разместить на форме поле эдит.создать процедуру:изменение содержимого поля...

Масштабирование компонентов при изменении размеров формы
На форме есть следующие компоненты: Image, StringGrid, BitBtn (3 штуки),...

Как заставить компоненты оставаться на местах при изменении размеров формы?
у меня на форме DbGrid а под ней несколько кнопок. Как мне сделать так чтоб...

7
Ivandur
397 / 505 / 161
Регистрация: 11.08.2016
Сообщений: 964
01.04.2017, 19:17 2
Сделай их членами класса.
0
VladSmith
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 6
01.04.2017, 20:50  [ТС] 3
Да, думал об этом, но не допетрил как сделать. С классами только начал работать. Можете показать хотя бы простой пример, если не трудно?
0
krapotkin
3412 / 3019 / 1047
Регистрация: 14.04.2014
Сообщений: 14,653
Записей в блоге: 15
02.04.2017, 05:32 4
может, просто заглянуть в доки и посмотреть, для чего нам Align и Anchors ?
0
VladSmith
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 6
02.04.2017, 06:43  [ТС] 5
При уменьшении формы кнопки просто исчезают, а должны перемещаться относительно нового размера формы. Поэтому написал алгоритм
0
krapotkin
3412 / 3019 / 1047
Регистрация: 14.04.2014
Сообщений: 14,653
Записей в блоге: 15
02.04.2017, 07:22 6
совет про Align по-прежнему в силе
а еще совет если хотите получить нормальный ответ, нормально описывайте задачу
никто не знает, что вы хотели сделать, и есть ли для этого другие пути решения
понятно же, что кнопки с экрана ни у кого не "исчезают "
0
Ivandur
397 / 505 / 161
Регистрация: 11.08.2016
Сообщений: 964
06.04.2017, 16:47 7
Чтобы они стали членами класса TForm2, и к ним можно было обращаться снаружи, вставь эти переменные после слова public, там где комментарий { Public declarations }ю
0
Matan!
Delphi/Java/DB Dev + Math
447 / 311 / 118
Регистрация: 31.05.2013
Сообщений: 2,445
Записей в блоге: 5
Завершенные тесты: 2
06.04.2017, 16:58 8
Цитата Сообщение от VladSmith Посмотреть сообщение
должны перемещаться относительно нового размера формы
Сделайте все значения Anchors на False, и будут перемещаться.
0
06.04.2017, 16:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2017, 16:58

Изменять размер текста в SpeedButton в зависимости от размеров кнопки
Как сделать, что бы название кнопки speedbutton уменьшалось или увеличивалось в...

Как сделать так, чтобы при изменении размеров формы компоненты на форме тоже изменяли свои размеры?
Если форма развернута на весь экран, то все компоненты выглядят как нужно...

Включение режима, при котором нажатие клавиш со стрелками позволяет изменять размер формы
Пишу прогу на Delphi7 столкнулся с незнанием процедурки по такой теме ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru