С Новым годом! Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 143
1

Создание адаптивного интерфейса

25.11.2014, 21:16. Показов 2385. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Пытаюсь создать адаптивный интерфейс. Программа создается для университета. В разных аудиториях разные мониторы, соответственно - разное разрешение экрана. Программа по умолчанию разворачивается на весь экран. Никак не получается определить высоту объекта TMainMenu, площадь, занимаемая объектом TPageControl пересчитывается неправильно - TPageControl выезжает за видимую область монитора. На первом Tab'е имеется панель с именем "Holst", куда наносятся элементы логической схемы. Данная панель ограничивает область перемещения элементов схемы. Но по непонятной причине элементы схемы выезжают за область Holst'а. Как это можно исправить?

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
unit Unit1;
 
 
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus,
  ComCtrls, ExtCtrls, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    ElemAnd: TImage;
    ElemOr: TImage;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    PageControl1: TPageControl;
    Tools: TPanel;
    Holst: TPanel;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    procedure ElemAndClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
 
    procedure ElemOrClick(Sender: TObject);
    procedure _MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure _MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure _MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer
      );
 
 
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  tx, ty: Integer;
  Image: TImage;
  isDragging : boolean = false;
  MonitorH, MonitorW: Integer;
 
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
 
 
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 
    MonitorW:= Screen.Width;
    MonitorH:= Form1.Height;
    PageControl1.Top:= 70;
    PageControl1.Left:=0;
    PageControl1.Width:= Form1.ClientWidth ;
    PageControl1.Height:= Form1.ClientHeight;
 
    Tools.Left:=0;
    Tools.Top:=0;
    Tools.Width:= Form1.ClientWidth;
 
    Holst.Width:=Form1.ClientWidth;
    Holst.Height:=Form1.ClientHeight;
    Holst.Top:=0;
    Holst.Left:=0;
 
end;        // Адаптивность интерфейса
 
procedure TForm1.ElemOrClick(Sender: TObject);
begin
    Image:=TImage.Create(Form1);
  Image.Parent:=Holst;
  Image.Left:=50;
  Image.Top:=50;
  Image.Width:=48;
  Image.Height:=48;
 
  Image.Picture.LoadFromFile('img/elem_or.png');
  Image.OnMouseDown:= @_MouseDown;
  Image.OnMouseMove:= @_MouseMove;
  Image.OnMouseUp:= @_MouseUp;
end;
 
procedure TForm1.ElemAndClick(Sender: TObject);
begin
   Image:=TImage.Create(Form1);
  Image.Parent:=Holst;
  Image.Left:=50;
  Image.Top:=50;
  Image.Width:=48;
  Image.Height:=48;
 
  Image.Picture.LoadFromFile('img/elem_and.png');
  Image.OnMouseDown:= @_MouseDown;
  Image.OnMouseMove:= @_MouseMove;
  Image.OnMouseUp:= @_MouseUp;
end;
 
procedure TForm1._MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
      isDragging := false;
end;
 
procedure TForm1._MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 
      tx:=X; ty:=y;
        isDragging := Shift = [ssLeft];
 
end;
 
procedure TForm1._MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
 begin
        if not isDragging then Exit;
 
  Image := Sender as TImage;
  Holst := (Image.Parent) as TPanel;
 
  Image.Left := Image.Left + X - tx;
  Image.Top := Image.Top + y - ty;
 
  if Image.Left < 0 then Image.Left := 1;
  if Image.Top < 0 then Image.Top := 1;
  if Image.Left + Image.Width >= Holst.Width then
    Image.Left := Holst.Width - Image.Width;
  if Image.Top + Image.Height >= Holst.Height then
    Image.Top := Holst.Height - Image.Height - 1;
 
end;
end.
Вложения
Тип файла: rar qwe.rar (2.90 Мб, 24 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.11.2014, 21:16
Ответы с готовыми решениями:

Создание адаптивного сайта
Делаю первый адаптивный сайт,но столкнулся с проблемой, при широкоформатном монике блоки...

Создание адаптивного дизайна
Надо создать адаптивный дизайн, чтобы на широких экранах и на телефонах отображалось по-разному....

Создание формулы и последующее заполнение таблицы, избежание повторов информации, создание интерфейса
Не люблю просить о помощи, но, к сожалению, сроки поджимают и не позволяют подробно ознакомиться с...

Создание адаптивного сайта/ портфолио (посоветуйте разрешение сайта)
Добрый день. Помогите пож. Посоветуйте разрешение сайта для вот такого шаблона (чтоб выгладило...

3
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32993 / 21299 / 8180
Регистрация: 22.10.2011
Сообщений: 36,594
Записей в блоге: 8
25.11.2014, 21:29 2
1) в OnCreate формы:
Pascal
1
2
3
4
5
6
    MonitorW:= Screen.Width;
    MonitorH:= Form1.Height;
    PageControl1.Top:= 70;
    PageControl1.Left:=0;
    PageControl1.Width:= Form1.ClientWidth ;
    PageControl1.Height:= Form1.ClientHeight - 70; // <--- Вот это добавь, чтобы весь PageControl был видимым на форме
2) в инспекторе объектов той панели, которая лежит на TabSheet1 (она тоже называется Holst) назначь Align = alClient, чтобы она вся была в видимой области экрана. Тогда ничего уходить с панели не будет...
0
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 143
25.11.2014, 22:15  [ТС] 3
Цитата Сообщение от UI Посмотреть сообщение
1) в OnCreate формы:
Pascal
1
2
3
4
5
6
    MonitorW:= Screen.Width;
    MonitorH:= Form1.Height;
    PageControl1.Top:= 70;
    PageControl1.Left:=0;
    PageControl1.Width:= Form1.ClientWidth ;
    PageControl1.Height:= Form1.ClientHeight - 70; // <--- Вот это добавь, чтобы весь PageControl был видимым на форме
2) в инспекторе объектов той панели, которая лежит на TabSheet1 (она тоже называется Holst) назначь Align = alClient, чтобы она вся была в видимой области экрана. Тогда ничего уходить с панели не будет...
Все равно, слева, справа и снизу остаются маленькие отступы - пару пикселей.
Tab'ы не на весь монитор по высоте.
А если добавить "PageControl1.Height:= Form1.ClientHeight - 70; // <--- Вот это добавь, чтобы весь PageControl был видимым на форме", то не весь PageControl виден на форме.
Можно что-то предпринять?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32993 / 21299 / 8180
Регистрация: 22.10.2011
Сообщений: 36,594
Записей в блоге: 8
25.11.2014, 22:21 4
Я бы вообще не заморачивался с подобным изменением размеров, а дал бы возможность пользователю менять его самостоятельно: выставил бы верхней панели (где изображения изначально) Align = alTop, потом положил бы Splitter, и потом - TabControl, с Align = alClient, кому сколько надо будет - тот столько и сделает высоту верхней панели. Зато всегда всё будет на экране... Чтобы предотвратить чересчур высокую верхнюю панель, можно задать констрейнты, которые будут ограничивать возможность перемещения сплиттера.

Цитата Сообщение от Mazanton Посмотреть сообщение
А если добавить "PageControl1.Height:= Form1.ClientHeight - 70; // <--- Вот это добавь, чтобы весь PageControl был видимым на форме", то не весь PageControl виден на форме.
У меня - весь. Но еще раз: лучше всего выравнивать через значения, отличные от alNone...

P.S. Вот примерно так:
Вложения
Тип файла: 7z thread1310972.7z (64.3 Кб, 13 просмотров)
0
25.11.2014, 22:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2014, 22:21
Помогаю со студенческими работами здесь

Создание (интерфейса ) С++
Суть работы такова, нужно создать виртуальное наследование для нового класса персонажа который...

Создание интерфейса c++
Я новичок в c++ уже около месяца ищу по поисковикам материал по созданию интерфейса в...

Создание интерфейса
Дорогие форумчане! Мне нужна Ваша помощь: создать интерфейс на любой программе.)))У меня есть...

Создание интерфейса
Итак, имеется следующий код программы n= % Мощность 1 k= % Мощность 2 bablo1= %...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru