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

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

01.04.2017, 16:49. Просмотров 449. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Изменять размер и положение объектов при изменении размеров формы (Delphi):

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

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

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

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

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

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

7
Ivandur
193 / 398 / 161
Регистрация: 11.08.2016
Сообщений: 836
01.04.2017, 19:17 #2
Сделай их членами класса.
0
VladSmith
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 6
01.04.2017, 20:50  [ТС] #3
Да, думал об этом, но не допетрил как сделать. С классами только начал работать. Можете показать хотя бы простой пример, если не трудно?
0
krapotkin
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,261
Записей в блоге: 13
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
3297 / 2937 / 1015
Регистрация: 14.04.2014
Сообщений: 14,261
Записей в блоге: 13
02.04.2017, 07:22 #6
совет про Align по-прежнему в силе
а еще совет если хотите получить нормальный ответ, нормально описывайте задачу
никто не знает, что вы хотели сделать, и есть ли для этого другие пути решения
понятно же, что кнопки с экрана ни у кого не "исчезают "
0
Ivandur
193 / 398 / 161
Регистрация: 11.08.2016
Сообщений: 836
06.04.2017, 16:47 #7
Чтобы они стали членами класса TForm2, и к ним можно было обращаться снаружи, вставь эти переменные после слова public, там где комментарий { Public declarations }ю
0
Matan!
Delphi/Java/DB Dev + Math
395 / 264 / 112
Регистрация: 31.05.2013
Сообщений: 2,161
Записей в блоге: 4
Завершенные тесты: 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
Привет! Вот еще темы с решениями:

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

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

Изменение размеров Image.Picture.LoadFromFile при изменении размеров окна
Подскажите, пожалуйста, какие функции для этого нужны.

При изменении размера формы изменяется её цвет и на экран выводится сообщение "размер формы был изменен"
При изменении размера формы изменяется её цвет и на экран выводится сообщение...


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

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

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