1 / 1 / 0
Регистрация: 25.12.2009
Сообщений: 49

Разрешение приложения - чтобы приложение подстраивалось под разрешение экрана

04.03.2012, 18:45. Показов 13460. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Можно ли средствами c++ bulder сделать так, чтобы разрешение приложения подстраивалось под разрешение экрана?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.03.2012, 18:45
Ответы с готовыми решениями:

Форма под любое разрешение экрана
Подскажите как сделать чтобы форма подходила под любое разрешение экрана. И подскажите как сделать чтобы пока форма актинва нельзя было...

Как сделать так, чтобы мобильное приложение автоматически подстраивалось под размер экрана?
В Android Studio мы же под определенную диагональ создаём приложение (один эмулятор).. Как при разработке сделать так, чтобы мобильное...

Почему разрешение экрана планшета на 1280 x600 , а разрешение экрана проектора 854 x 480?
Привет всем, вчера я посмотрел такой плашет с проектором, разрешение экрана планшета на 1280 x600, а разрешение экрана проектора 854 x...

18
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
04.03.2012, 19:25
А оно что у тебя не подстраивается?
1
1 / 1 / 0
Регистрация: 25.12.2009
Сообщений: 49
04.03.2012, 19:35  [ТС]
Не сам c++ bulder, а создаваемое приложение=)
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
04.03.2012, 19:56
C++
1
form->SetBounds( 0, 0, Screen->Width, Screen->Height );
И не разрешение программы - размер окна программы.
2
1 / 1 / 0
Регистрация: 25.12.2009
Сообщений: 49
04.03.2012, 20:14  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
C++
1
form->SetBounds( 0, 0, Screen->Width, Screen->Height );
И не разрешение программы - размер окна программы.
Согласен, не правильно выразился. Это в .cpp файле прописывается?
А то у меня вот такое сообщение об ошибке "Declaration syntax error". Ну то есть ошибка синтаксиса.
0
 Аватар для Sergey-K
238 / 229 / 58
Регистрация: 27.10.2011
Сообщений: 249
04.03.2012, 20:17
C++
1
2
3
4
5
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  Form1->SetBounds(0, 0, Screen->Width, Screen->Height);
}
1
1 / 1 / 0
Регистрация: 25.12.2009
Сообщений: 49
04.03.2012, 20:21  [ТС]
Спасибо, а отдельные элементы подстраивать реально под разрешение? Скажем у меня увеличилась сама форма, но что же делать с графиками, кнопками и т.п?=)
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
04.03.2012, 20:25
Можно в обработчике OnShow формы. И немножко по другому, чтоб форма под панель задач одним из краев не уходила:
C++
1
2
3
4
void __fastcall TForm1::FormShow( TObject *Sender )
{
    SetBounds( Screen->WorkAreaLeft, Screen->WorkAreaTop, Screen->WorkAreaWidth, Screen->WorkAreaHeight );
}
Про обработчики и вообще про билдер советую глянуть в книге Архангельский А.Я. - Программирование в C++ Builder
1
1 / 1 / 0
Регистрация: 25.12.2009
Сообщений: 49
04.03.2012, 20:31  [ТС]
Может я не внимательно смотрел, но про разрешение окон и отдельных элементов информации не нашел. Опять же ваш код подстраивает разрешение только самого окна, а элементы остаются на своих местах. Может их нужно как то привязывать к краям или еще как?
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,064
04.03.2012, 20:34
Цитата Сообщение от Denisgl Посмотреть сообщение
Может их нужно как то привязывать к краям или еще как?
Используй Якоря.
Миниатюры
Разрешение приложения - чтобы приложение подстраивалось под разрешение экрана  
1
1 / 1 / 0
Регистрация: 25.12.2009
Сообщений: 49
05.03.2012, 00:18  [ТС]
А размер отдельных элементов автоматически никак не подстроит под разрешение экрана? Скажем кнопка при большем разрешении экрана станет чуть больше? Ведь я делаю проект на 1600:900, а потом запущу на 800:600, от привязок толку не будет.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
05.03.2012, 00:36
Я обычно ставлю ограничение на расширение экрана если оно не соответствует тому в котором разрабатывалось приложение, то программма просто не запускается
0
1 / 1 / 0
Регистрация: 25.12.2009
Сообщений: 49
05.03.2012, 00:51  [ТС]
Но это явно не решение моей проблемы=)
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
05.03.2012, 01:52
Масштабирование окон в зависимости от разрешения монитора
В ранней стадии создания приложения решите для себя хотите ли вы позволить форме масштабироваться. Преимущество немасштабируемой формы в том, что ничего не меняется во время выполнения. В этом же заключается и недостаток (ваша форма может бать слишком маленькой или слишком большой в некоторых случаях).
Если вы не собираетесь делать форму масштабируемой, установите свойство Scaled=False и дальше не читайте. В противном случае Scaled=True.
Установите AutoScroll=False. AutoScroll = True означает не менять размер окна формы при выполнении что не очень хорошо выглядит, когда содержимое формы меняет размер.
Установите шрифты формы на TrueType, например Arial. Если такого шрифта не окажется на пользовательском компьютере, то Windows выберет альтернативный шрифт из того же семейства. Этот шрифт может не совпадать по размеру, что вызовет проблемы.
Установите свойство Position в любое значение, отличное от poDesigned. poDesigned оставляет форму там, где она была во время дизайна, и, например, при разрешении 1280x1024 форма окажется в левом верхнем углу и совершенно за экраном при 800x600.
Оставляйте по-крайней мере 4 точки между компонентами, чтобы при смене положения границы на одну позицию компоненты не "наезжали" друг на друга. Для однострочных меток (TLabel) с выравниванием alLeft или alRight установите AutoSize=True. Иначе AutoSize=False.
Убедитесь, что достаточно пустого места у TLabel для изменения ширины шрифта - 25% пустого места многовато, зато безопасно. При AutoSize=False убедитесь, что ширина метки правильная, при AutoSize=True убедитесь, что есть ссвободное место для роста метки.
Для многострочных меток (word-wrapped labels), оставьте хотя бы одну пустую строку снизу.
Будьте осторожны при открытии проекта в среде Delphi при разных разрешениях. Свойство PixelsPerInch меняется при открытии формы. Лучше тестировать приложения при разных разрешениях, запуская готовый скомпилированный проект, а редактировать его при одном разрешении. Иначе это вызовет проблемы с размерами.
Не изменяйте свойство PixelsPerInch!
В общем, нет необходимости тестировать приложение для каждого разрешения в отдельности, но стоит проверить его на 800x600 с маленькими и большими шрифтами и на более высоком разрешении перед продажей.
Уделите пристальное внимание принципиально однострочным компонентам типа TDBLookupCombo. Многострочные компоненты всегда показывают только целые строки, а TEdit покажет урезанную снизу строку. Каждый компонент лучше сделать на несколько точек больше.
1
12 / 12 / 0
Регистрация: 03.10.2011
Сообщений: 343
05.03.2012, 21:52
Упс...Спасибо) Я не так просто набирал...Про разрешение не додумался....

Добавлено через 12 минут
Правда на самом деле кое чего нет.. С разрешениями понятно. А мне надо, чтобы еще при разворачивании окна увеличивались объекты... Делаю так, как написано в статье - не работает..
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,064
05.03.2012, 23:00
А это?
Вложения
Тип файла: rar Форма.rar (340.0 Кб, 122 просмотров)
1
12 / 12 / 0
Регистрация: 03.10.2011
Сообщений: 343
06.03.2012, 17:34
да. так.. Только мне надо, что не на весь экран растягивались элементы...Как можно ограничить? пробовал с помощью Max Height/Width.. Но тогда само окно становится меньше. Хотя изменяю свойства у элемента...

Добавлено через 9 часов 44 минуты
Тыкался, пытался - так и не получилось добиться желаемого результата..
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
09.03.2012, 13:17
Можно, конечно, хитро накидать панелей и разделителей, повыставляв миллион Align, Anchors и Constraints. Неплохой путь, нужна только практика.

Есть и другой способ, зачастую предпочитаемый старшим поколением программистов(на всякий случай - себя я к таким не отношу). Можно все выравнивать динамически, используя расчеты, правила, какие-то свои соображения.
В этом случае дизайнером можно либо вообще не пользоваться, создавая все компоненты динамически, либо накидывать там все на глазок, ничего не выставляя.

Вот пример - функция компоновки формы в зависимости от размеров шрифта. Писалось это когда-то кусками, так что есть простор для оптимизации - просьба ногами меня за этот код не пинать
C++
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
void __fastcall Tlink_prop_form::rearrange_form( void ) // динамическая компоновка компонентов формы
{
    TControl *btns_arr[20] = {NULL}; // массивы соответственно кнопок, labels и edits
    TControl *lbls_arr[20] = {NULL};
    TControl *edits_arr[20] = {NULL};
 
    int i, temp, max, maxh;
    int edits_text_h = Canvas->TextHeight( "Fkij?!@iЁ(" ) + 6;
    // --------------------------------------
    int fields_count = 7;
 
    btns_arr[0] = name_fix_btn;
    btns_arr[1] = target_path_btn;
    btns_arr[2] = folder_path_btn;
    btns_arr[4] = icon_path_btn;
 
    lbls_arr[0] = name_lbl;
    lbls_arr[1] = target_lbl;
    lbls_arr[2] = folder_lbl;
    lbls_arr[3] = param_lbl;
    lbls_arr[4] = icon_lbl;
    lbls_arr[5] = win_lbl; // 5 и 6 забиты только для того, чтоб сдвинуть их направо и учесть их ширину при выставлении ширины labels_pnl
    lbls_arr[6] = set_lbl;
 
    edits_arr[0] = name_edit;
    edits_arr[1] = target_edit;
    edits_arr[2] = folder_edit;
    edits_arr[3] = param_edit;
    edits_arr[4] = icon_edit;
    // --------------------------------------
    arranged = false;
    // --------------------------------------
    Left = 0; // форма должна быть на экране (большой шрифт может ее сдвинуть за границы экрана)
    Top = 0;
    OnConstrainedResize = NULL; // избежим конфликта ограничений размера и перестройки формы - в конце перестройки восстановим событие
    // --------------------------------------
    Canvas->Font->Assign( Font ); // расположим панели так, чтоб не перекрывали caption of target_gb
    labels_pnl->Top = Canvas->TextHeight( target_gb->Caption );
    edits_pnl->Top = labels_pnl->Top;
    // --------------------------------------
    max = 0;
    for ( i = fields_count - 1; i >= 0; i-- ) { // изменим ширину labels_pnl до минимума, выяснив наибольшую ширину одной из label
        if ( lbls_arr[i] ) {
            if ( lbls_arr[i]->Width > max ) {
                max = lbls_arr[i]->Width;
            }
        }
    }
    labels_pnl->Width = max;
    // --------------------------------------
    edits_pnl->Left = labels_pnl->Left + labels_pnl->Width; // сдвинем edits_pnl встык к labels_pnl
    edits_pnl->Width = target_gb->Width - labels_pnl->Left - labels_pnl->Width - 3; // подгоним ширину edits_pnl, чтоб влазила в target_gb
    // --------------------------------------
    for ( i = fields_count - 1; i >= 0; i-- ) { // сдвинем на labels_pnl все label направо
        if ( lbls_arr[i] ) {
            lbls_arr[i]->Left = labels_pnl->Width - lbls_arr[i]->Width;
        }
    }
    // установим ширину и высоту кнопок на edits_pnl
    maxh = 0;
    for ( i = fields_count - 1; i >= 0; i-- ) {
        if ( btns_arr[i] ) {
            temp = Canvas->TextHeight( ( ( TButton* )btns_arr[i] )->Caption );
            if ( maxh < temp ) { // выясним наибольшую высоту
                maxh = temp;
            }
            btns_arr[i]->Width = Canvas->TextWidth( ( ( TButton* )btns_arr[i] )->Caption ) + 10; // установим ширину в зависимости от текста
        }
    }
    for ( i = fields_count - 1; i >= 0; i-- ) { // установим всем кнопкам одинаковую высоту
        if ( btns_arr[i] ) {
            btns_arr[i]->Height = maxh + 6;
        }
    }
    // равномерно распределим edits на edits_pnl ; их ширина зависит от ширины соответствующих кнопок
    edits_arr[0]->SetBounds( 3, 0, edits_pnl->Width - btns_arr[0]->Width - 7, edits_text_h );
    for ( i = 1; i < fields_count; i++ ) {
        if ( edits_arr[i] ) {
            edits_arr[i]->Height = edits_text_h;
            edits_arr[i]->Top = edits_arr[i - 1]->Top + edits_arr[i - 1]->Height + 2;
            edits_arr[i]->Left = 3;
        }
        if ( btns_arr[i] && edits_arr[i] ) {
            edits_arr[i]->Width = edits_pnl->Width - btns_arr[i]->Width - 7;
        }
        else if ( edits_arr[i] ) {
            edits_arr[i]->Width = edits_pnl->Width - 4;
        }
    }
    // отцентрируем все кнопки на edits_pnl относительно соответствующих edits
    for ( i = 0; i < fields_count; i++ ) {
        if ( btns_arr[i] && edits_arr[i] ) {
            btns_arr[i]->Left = edits_arr[i]->Width + edits_arr[i]->Left + 2;
            btns_arr[i]->Top = edits_arr[i]->Top - 1 + ( edits_arr[i]->Height - btns_arr[i]->Height ) / 2;
        }
    }
    // отцентрируем все labels на labels_pnl относительно соответствующих edits
    for ( i = 0; i < fields_count; i++ ) {
        if ( lbls_arr[i] && edits_arr[i] ) {
            lbls_arr[i]->Top = edits_arr[i]->Top - 1 + ( edits_arr[i]->Height - lbls_arr[i]->Height ) / 2;
        }
    }
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // <<<<<<<<<<<<<<<<< упорядочим содержимое add_prop_pnl >>>>>>>>>>>>>>>>>>>>>
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // загоним чек-боксы и эдиты в массивы
    TCheckBox *chbox[] = {group_chbox, win_confirm_chbox, win_adm_chbox, win_on_top_chbox, win_pos_chbox, win_size_chbox};
    TEdit *edits[] = {win_height_edit, win_pos_x_edit, win_pos_y_edit, win_width_edit};
    // сперва выставим top, left и width самой панели; ее высоту выставим позже
    add_prop_pnl->Top = edits_arr[4]->Top + edits_arr[4]->Height;
    add_prop_pnl->Left = 0;
    add_prop_pnl->Width = add_prop_pnl->Parent->Width;
    // установим высоту и ширину всех CheckBox, а также ширину одного win_state_cbox
    for ( i = 0; i < sizeof( chbox ) / sizeof( chbox[0] ); i++ ) {
        chbox[i]->Height = Canvas->TextHeight( chbox[i]->Caption );
        chbox[i]->Width = Canvas->TextWidth( chbox[i]->Caption ) + 25;
    }
    for ( i = 0, maxh = 0; i < win_state_cbox->Items->Count; i++ ) {
        temp = Canvas->TextWidth( win_state_cbox->Items->Strings[i] );
        if ( maxh < temp ) {
            maxh = temp;
        }
    }
    win_state_cbox->Width = maxh + 25;
    // высота и ширина edits по алгоритму под 4х-значное число
    for ( i = 0, temp = Canvas->TextWidth( "9086" ); i < sizeof( edits ) / sizeof( edits[0] ); i++ ) {
        edits[i]->Height = edits_text_h;
        edits[i]->Width = temp + 10;
    }
    // -- сперва left и top левых-верхних элементов
    win_state_cbox->Left = 3;
    win_state_cbox->Top = 2;
    win_on_top_chbox->Left = win_state_cbox->Left + win_state_cbox->Width + 6;
    win_on_top_chbox->Top = win_state_cbox->Top - 1 + ( win_state_cbox->Height - win_on_top_chbox->Height ) / 2;
    // -- все top эдитов
    win_width_edit->Top = win_state_cbox->Top + win_state_cbox->Height + 2;
    win_height_edit->Top = win_width_edit->Top;
    win_pos_x_edit->Top = win_width_edit->Top + win_width_edit->Height + 2;
    win_pos_y_edit->Top = win_pos_x_edit->Top;
    // -- левые check box - топы относительно эдитов
    win_size_chbox->Left = 3;
    win_size_chbox->Top = win_width_edit->Top - 1 + ( win_width_edit->Height - win_size_chbox->Height ) / 2;
    win_pos_chbox->Left = 3;
    win_pos_chbox->Top = win_pos_x_edit->Top - 1 + ( win_pos_x_edit->Height - win_pos_chbox->Height ) / 2;
    // -- следующие labels - left встык к width левых check-box - выравнивание вправо - tops по edits
    if ( win_size_chbox->Width > win_pos_chbox->Width ) {
        win_width_lbl->Left = win_size_chbox->Left + win_size_chbox->Width + 5;
    }
    else {
        win_width_lbl->Left = win_pos_chbox->Left + win_pos_chbox->Width + 5;
    }
    win_pos_x_lbl->Left = win_width_lbl->Left + ( win_width_lbl->Width - win_pos_x_lbl->Width );
    win_width_lbl->Top = win_width_edit->Top - 1 + ( win_width_edit->Height - win_width_lbl->Height ) / 2;
    win_pos_x_lbl->Top = win_pos_x_edit->Top - 1 + ( win_pos_x_edit->Height - win_pos_x_lbl->Height ) / 2;
    // -- следующие edits - встык к width предыдущих labels - tops не трогать!
    win_width_edit->Left = win_width_lbl->Left + win_width_lbl->Width + 5;
    win_pos_x_edit->Left = win_width_edit->Left;
    // -- следующие labels - встык к width левых edits - выравнивание вправо - tops предыдущим labels
    win_height_lbl->Left = win_width_edit->Left + win_width_edit->Width + 10;
    win_pos_y_lbl->Left = win_height_lbl->Left + ( win_height_lbl->Width - win_pos_y_lbl->Width );
    win_height_lbl->Top = win_width_lbl->Top;
    win_pos_y_lbl->Top = win_pos_x_lbl->Top;
    // -- следующие edits - встык к width предыдущих labels - tops не трогать!
    win_height_edit->Left = win_height_lbl->Left + win_height_lbl->Width + 5;
    win_pos_y_edit->Left = win_height_edit->Left;
    // -- правая колонка check-box - left встык к width последних edits - отступ 20 pix - tops левым check-boxes
    for ( i = 0; i < 3; i++ ) {
        chbox[i]->Left = win_height_edit->Left + win_height_edit->Width + 20;
    }
    win_confirm_chbox->Top = win_on_top_chbox->Top;
    win_adm_chbox->Top = win_size_chbox->Top;
    group_chbox->Top = win_pos_chbox->Top;
    // -- кнопка group_btn - высоту под другие кнопки, ширину по алгоритму, left встык с check-box, top отцентровать по edits
    group_btn->Height = icon_path_btn->Height;
    group_btn->Width = Canvas->TextWidth( group_btn->Caption ) + 10;
    group_btn->Left = group_chbox->Left + group_chbox->Width + 5;
    group_btn->Top = win_pos_x_edit->Top - 1 + ( win_pos_x_edit->Height - group_btn->Height ) / 2;
    // выставим высоту add_prop_pnl относительно последнего поля Edit - win_pos_x_edit
    add_prop_pnl->Height = win_pos_x_edit->Top + win_pos_x_edit->Height + 2;
    // наконец, выровняем пару labels, имеющих отношение в компонентам на add_prop_pnl
    win_lbl->Top = add_prop_pnl->Top + win_state_cbox->Top + ( win_state_cbox->Height - win_lbl->Height ) / 2;
    set_lbl->Top = add_prop_pnl->Top + win_width_edit->Top + ( win_width_edit->Height - set_lbl->Height ) / 2;
 
    // -------- подгоним высоту панелей и target_gb под содержимое --------------------
    max = add_prop_pnl->Top + add_prop_pnl->Height; // выясним максимальную высоту содержимого
    labels_pnl->Height = max + 2;
    edits_pnl->Height = max + 2;
    target_gb->Height = labels_pnl->Top + labels_pnl->Height + 6;
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // <<<<<<<<<<<<<<<<<<< упорядочим содержимое style_gb >>>>>>>>>>>>>>>>>>>>>>>
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    style_gb->Top = target_gb->Top + target_gb->Height + 3;
    // -------- выставим stext_gb ----------
    // выставим height & tops эдитов и combo-box
    stextsize_ed->Width = Canvas->TextWidth( "99" ) + 10;
    stextsize_ed->Height = edits_text_h;
    stextsize_ed->Top = Canvas->TextHeight( style_gb->Caption );
    stextplace_cb->Top = stextsize_ed->Top + stextsize_ed->Height + 4;
    // первая строчка - последовательно top, left, width, height
    stextcol_lbl->Left = 6;
    stextcol_lbl->Top = stextsize_ed->Top + ( stextsize_ed->Height - stextcol_lbl->Height ) / 2;
    stextcol_pnl->Left = stextcol_lbl->Left + stextcol_lbl->Width + 3;
    stextcol_pnl->Top = stextsize_ed->Top + ( stextsize_ed->Height - stextcol_pnl->Height ) / 2;
    stextsize_lbl->Left = stextcol_pnl->Left + stextcol_pnl->Width + 10;
    stextsize_lbl->Top = stextsize_ed->Top + ( stextsize_ed->Height - stextsize_lbl->Height ) / 2;
    stextsize_ed->Left = stextsize_lbl->Left + stextsize_lbl->Width + 3;
    stextbold_chb->Left = stextsize_ed->Left + stextsize_ed->Width + 10;
    stextbold_chb->Width = Canvas->TextWidth( stextbold_chb->Caption ) + 25;
    stextbold_chb->Height = Canvas->TextHeight( stextbold_chb->Caption );
    stextbold_chb->Top = stextsize_ed->Top + ( stextsize_ed->Height - stextbold_chb->Height ) / 2;
    // вторая строчка
    stextfont_btn->SetBounds( 6, stextplace_cb->Top, Canvas->TextWidth( stextfont_btn->Caption ) + 10,
        stextplace_cb->Height );
    stextplace_lbl->Left = stextfont_btn->Left + stextfont_btn->Width + 10;
    stextplace_lbl->Top = stextplace_cb->Top + ( stextplace_cb->Height - stextplace_lbl->Height ) / 2;
    stextplace_cb->Left = stextplace_lbl->Left + stextplace_lbl->Width + 3;
    stextplace_cb->Width = Canvas->TextWidth( stextplace_cb->Items->Strings[0] ) + 60;
    // увеличим ширину всплывающего списка stextplace_cb, выяснив ширину самой длинной строчки
    for ( i = 0, max = 0; i < stextplace_cb->Items->Count; i++ ) {
        temp = Canvas->TextWidth( stextplace_cb->Items->Strings[i] );
        if ( max < temp ) {
            max = temp;
        }
    }
    stextplace_cb->Perform( CB_SETDROPPEDWIDTH, max + 30, 0 );
    // сам stext_gb
    stext_gb->SetBounds( 6, Canvas->TextHeight( style_gb->Caption ),
        stextplace_cb->Left + stextplace_cb->Width + 6,
        stextplace_cb->Top + stextplace_cb->Height + 6 );
    // -------- выставим sicon_gb ----------
    // tops & heights & widths of edits
    siconsizew_edit->Height = edits_text_h;
    siconsizeh_edit->Height = edits_text_h;
    siconsizew_edit->Top = Canvas->TextHeight( sicon_gb->Caption ) + 4;
    siconsizeh_edit->Top = siconsizew_edit->Top;
    siconsizeh_edit->Width = Canvas->TextWidth( "999" ) + 10;
    siconsizew_edit->Width = siconsizeh_edit->Width;
    // первая строчка, кроме ширины siconsize_trbar - ее выставим после выравнивания ширины sicon_gb & stext_gb
    siconsize_lbl->Left = 6;
    siconsize_lbl->Top = siconsizew_edit->Top + ( siconsizew_edit->Height - siconsize_lbl->Height ) / 2;
    siconsizew_edit->Left = siconsize_lbl->Left + siconsize_lbl->Width + 3;
    siconsizex_lbl->Top = siconsize_lbl->Top;
    siconsizex_lbl->Left = siconsizew_edit->Left + siconsizew_edit->Width + 3;
    siconsizeh_edit->Left = siconsizex_lbl->Left + siconsizex_lbl->Width + 3;
    siconsize_trbar->Left = siconsizeh_edit->Left + siconsizeh_edit->Width + 6;
    siconsize_trbar->Top = siconsizeh_edit->Top + ( siconsizeh_edit->Height - siconsize_trbar->Height ) / 2;
    // вторая строчка
    siconproport_chb->SetBounds( 6, siconsizew_edit->Top + siconsizew_edit->Height + 6,
        Canvas->TextWidth( siconproport_chb->Caption ) + 25,
        Canvas->TextHeight( siconproport_chb->Caption ) );
    siconcol_chb->SetBounds( siconproport_chb->Left + siconproport_chb->Width + 20, siconproport_chb->Top,
        Canvas->TextWidth( siconcol_chb->Caption ) + 25,
        Canvas->TextHeight( siconcol_chb->Caption ) );
    siconcol_pnl->Left = siconcol_chb->Left + siconcol_chb->Width;
    siconcol_pnl->Top = siconcol_chb->Top + 1 + ( siconcol_chb->Height - siconcol_pnl->Height ) / 2;
    // сам sicon_gb
    sicon_gb->SetBounds( stext_gb->Left,
        stext_gb->Top + stext_gb->Height + 3,
        siconcol_pnl->Left + siconcol_pnl->Width + 6,
        siconproport_chb->Top + siconproport_chb->Height + 10 );
    // выровняем ширину sicon_gb & stext_gb
    if ( stext_gb->Width > sicon_gb->Width ) {
        sicon_gb->Width = stext_gb->Width;
    }
    else {
        stext_gb->Width = sicon_gb->Width;
    }
    // выставим ширину siconsize_trbar для максимального заполнения
    siconsize_trbar->Width = sicon_gb->Width - siconsize_trbar->Left - 3;
    // высота style_gb под сумму высот stext_gb & sicon_gb
    style_gb->Height = sicon_gb->Top + sicon_gb->Height + 6;
    // ssample_gb умещаем в остатке места
    ssample_gb->SetBounds( stext_gb->Left + stext_gb->Width + 6,
        stext_gb->Top,
        style_gb->Width - ( stext_gb->Left + stext_gb->Width ) - 12,
        style_gb->Height - stext_gb->Top - 6 );
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // <<<<<<<<<<<<<<<<<<< кнопки и форма >>>>>>>>>>>>>>>>>>>>>>>
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    TButton *modal_btns[] = {reset_btn, apply_btn, cancel_btn};
    // top & высота кнопок; ширина кнопок - минимум 111
    for ( i = 0, max = 0; i < 3; i++ ) { // выясним наибольшую ширину текста
        temp = Canvas->TextWidth( modal_btns[i]->Caption );
        if ( max < temp ) {
            max = temp;
        }
    }
    temp = Canvas->TextHeight( reset_btn->Caption ) + 8; // высота у всех одинаковая
    for ( i = 0; i < 3; i++ ) {
        modal_btns[i]->Height = temp;
        modal_btns[i]->Top = this->ClientHeight - temp - 3;
        if ( max > 111 ) {
            modal_btns[i]->Width = max;
        }
        else {
            modal_btns[i]->Width = 111;
        }
    }
    // left кнопок
    cancel_btn->Left = this->ClientWidth - cancel_btn->Width - 3;
    apply_btn->Left = cancel_btn->Left - apply_btn->Width - 5;
    reset_btn->Left = apply_btn->Left - reset_btn->Width - 15;
    // форма - ширина, высота
    ClientWidth = target_gb->Left + labels_pnl->Left + labels_pnl->Width + group_btn->Left + group_btn->Width + 15;
    ClientHeight = style_gb->Top + style_gb->Height + cancel_btn->Height + 10;
 
    OnConstrainedResize = FormConstrainedResize; // восстановим отключенное в начале перестройки формы
    arranged = true;
}
Вот ее работа:
Миниатюры
Разрешение приложения - чтобы приложение подстраивалось под разрешение экрана   Разрешение приложения - чтобы приложение подстраивалось под разрешение экрана  
1
0 / 0 / 0
Регистрация: 15.05.2017
Сообщений: 12
14.11.2017, 16:28
BRcr, заинтересовалась вашей программой. Вставила в свою программу.
Простите за темность, но откуда взять эти переменные:
btns_arr[0] = name_fix_btn;
btns_arr[1] = target_path_btn;
btns_arr[2] = folder_path_btn;
btns_arr[4] = icon_path_btn;

lbls_arr[0] = name_lbl;
lbls_arr[1] = target_lbl;
lbls_arr[2] = folder_lbl;
lbls_arr[3] = param_lbl;
lbls_arr[4] = icon_lbl;
lbls_arr[5] = win_lbl;
lbls_arr[6] = set_lbl;

edits_arr[0] = name_edit;
edits_arr[1] = target_edit;
edits_arr[2] = folder_edit;
edits_arr[3] = param_edit;
edits_arr[4] = icon_edit;

спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.11.2017, 16:28
Помогаю со студенческими работами здесь

Corel VideoStudio Pro X4 14.0.0.342 - текущее разрешение экрана меньше, чем стандартное разрешение установки
вопрос такой, загрузил Corel VideoStudio Pro X4 14.0.0.342 скачал, при установки вылазит такой скин..... и как долго устанавливается...

Разрешение экрана монитора и разрешение экрана браузера
Почему разрешение экрана монитора и разрешение экрана браузера отличаются? В настройках виндовс экрана стоит 1366 пкс, а в браузере body...

Адаптация под разрешение экрана
Доброго времени суток. Как сделать, чтобы два блока: меню(набор кнопок) и поисковая строка, находящиеся на шапке, при уменьшении...

Размер формы приложения и разрешение экрана
Всем привет! Стоит такая задача: Надо сделать так, чтобы при запуске приложения его форма и все его элементы подстраивались под...

Подстройка размера картинки под разрешение экрана (как поставить картинку по середине, чтобы была, я не знаю уже((( подскажите пож куда что поставить
HTML-код: &lt;table id=&quot;headerTb&quot; width=&quot;100%&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tr&gt; &lt;td class=&quot;hdImg&quot;&gt;&lt;img class=&quot;topImg&quot;...


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

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

Новые блоги и статьи
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru