C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Настройка расположения контролов на форме, Кто как решает эту проблему?
Wasabi
  Отправлено: 07.09.2004, 09:05


Ученик-кочегар

Группа: Участник
Сообщений: 23



Например дизайнеришь форму при разрешении 1024*768 и при стандартном шрифте в 96dpi.
Но если юзер (например тетка с хреновым зрением) ставит себе шрифт в 125% и фсе....формы выглядят хренова....контролы "едут"....в лэйблах текст не влезает...

Я вот сделал ini-файл с настройками контролов для разных разрешений и размеров шрифтов (написал процедуру выгрузки параметров) и перед открытием формы процедура считывает параметры и применяет их к контролам.
Может есть другой, более простой и изящный способ? smile.gif
Думаю многих такая проблема волнует, делитесь smile.gif

AVC
Отправлено: 07.09.2004, 09:21


Ветеран

Группа: Модератор
Сообщений: 1583



Я разрабатываю на 120 dpi + небольшой запас для текста + маштабирование на пользовательское dpi и размер основного шрифта формы + автоматической выравнивание по размерам формы/панели и т.д (событие Resize)

Кстати. Страшно раздражает непрофессиональность разработчиков у которых "контролы "едут"....в лэйблах текст не влезает...". У меня стоит 125%.

Отредактировано AVC — 07/09/2004, 09:27
Konstantine
Отправлено: 07.09.2004, 09:26


Мастер участка

Группа: Модератор
Сообщений: 545



А Я — делаю так ка выглядит для нормального шрифта. а если юзеру хочется выделываться и ставить 1600х1200 и 200dpi, ту пусть получает то шо хотел!!! и пусть определится — мельче или крупнее!!!
Gedeon
Отправлено: 07.09.2004, 09:27


Ветеран

Группа: Модератор
Сообщений: 1742



Честно говоря не доводилось никогда с такой проблемой бороться, но мне кажется ини не совсем хорошее решение, просто ведь все настройки умаяться можно считать.
Я бы делал так: де нить в конструкторе вызов функции (как впрочем и при изменении разрешения, размеров шрифта) которая бы и пересчитала размеры всех контролов, а с изменением размеров формы надо бороться выставляя свойство Alignment у контролов ди и садить их лучше на панели.
Wasabi
Отправлено: 07.09.2004, 09:29


Ученик-кочегар

Группа: Участник
Сообщений: 23



QUOTE (Gedeon @ 07/09/2004, 10:29)
Честно говоря не доводилось никогда с такой проблемой бороться, но мне кажется ини не совсем хорошее решение, просто ведь все настройки умаяться можно считать.
Я бы делал так: де нить в конструкторе вызов функции (как впрочем и при изменении разрешения, размеров шрифта) которая бы и пересчитала размеры всех контролов, а с изменением размеров формы надо бороться выставляя свойство Alignment у контролов ди и садить их лучше на панели.

я пытался написать такую функцию....высчитывал пропорции, пытался подобрать коэффициент для разных разрешений....все равно криво получается. Особенно когда на форме много контролов ввода текста и они расположены очень близко друг от друга....полюбому часть из них залазиет на рядом стоящие....
А послать юзера не могу. Приклад пишется под заказ...за хорошие бабки.
Konstantine
Отправлено: 07.09.2004, 09:37


Мастер участка

Группа: Модератор
Сообщений: 545



QUOTE (Wasabi @ 07/09/2004, 10:31)
А послать юзера не могу. Приклад пишется под заказ...за хорошие бабки.

а юзер описывал ЭТО в тех задании?

если нет — то это особенность недокументырованная проги :-)
Wasabi
Отправлено: 07.09.2004, 09:39


Ученик-кочегар

Группа: Участник
Сообщений: 23



QUOTE (Konstantine @ 07/09/2004, 10:39)
QUOTE (Wasabi @ 07/09/2004, 10:31)
А послать юзера не могу. Приклад пишется под заказ...за хорошие бабки.

а юзер описывал ЭТО в тех задании?

если нет — то это особенность недокументырованная проги :-)

Конечно.
Gedeon
Отправлено: 07.09.2004, 09:41


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (Wasabi @ 07/09/2004, 10:31)
я пытался написать такую функцию....высчитывал пропорции, пытался подобрать коэффициент для разных разрешений....все равно криво получается. Особенно когда на форме много контролов ввода текста и они расположены очень близко друг от друга....полюбому часть из них залазиет на рядом стоящие....

Ну тут тяжело что-либо дельное посоветовать, ведь все от каждой конкретной формы зависит, разве что не мучайтесь с коеффициентами, а считайте сразу размер шрифта, рядом сидящие контролы располагайте слева непрово, конец первого — начало вторго + чуть-чуть biggrin.gif . Все таки панели хорошее решение.
AVC
Отправлено: 07.09.2004, 10:35


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (Wasabi @ 07/09/2004, 09:31)
я пытался написать такую функцию....высчитывал пропорции, пытался подобрать коэффициент для разных разрешений....все равно криво получается. Особенно когда на форме много контролов ввода текста и они расположены очень близко друг от друга....полюбому часть из них залазиет на рядом стоящие....
А послать юзера не могу. Приклад пишется под заказ...за хорошие бабки.

Посылать юзера нехорошою Он наш кормилец.
Я пользуюсь
CODE

//---------------------------------------------------------------------------
// Load previos Position, Size and State for Form

PACKAGE void __fastcall IniFormRestore (TForm *frm, bool size, bool setstyle)
{
int ed;
bool b;

// Формы разрабатывались на экране с разрешением в 120 dpi
// Шрифтом MS Sans Serif 8
if (Form_Scale_Enable && frm->Scaled)
{ int i = Font_Form? Font_Form->Size : 8;
if (i <= 0) i = 8;
// frm->ScaleBy((DESIGN_PixelsPerInch * i), (Screen->PixelsPerInch * 8));
frm->ScaleBy(i, 8);
}

if (setstyle) SetStyle (frm);
AnsiString sect = NativeFormName(frm);
AnsiString tmp = Windows_XY->ReadString ("Forms", sect, "");
....

Это вызывается из FormCreate, тонкоя доводка контролов из ???Resize — например выравнивание друг за другом или по правому полю (кстати, Borland'овский якорь выравнивает по правому краю плохо) или по ширине. Использую много панелей с автовыравниванием, при условии что в одном направлении стоят не более трех (например Lef, Client, Right) (бывали случаи, когда Builder менял панели местами)

Отредактировано AVC — 07/09/2004, 10:41
Wasabi
Отправлено: 07.09.2004, 10:41


Ученик-кочегар

Группа: Участник
Сообщений: 23



QUOTE (AVC @ 07/09/2004, 11:37)
QUOTE (Wasabi @ 07/09/2004, 09:31)
я пытался написать такую функцию....высчитывал пропорции, пытался подобрать коэффициент для разных разрешений....все равно криво получается. Особенно когда на форме много контролов ввода текста и они расположены очень близко друг от друга....полюбому часть из них залазиет на рядом стоящие....
А послать юзера не могу. Приклад пишется под заказ...за хорошие бабки.

Посылать юзера нехорошою Он наш кормилец.
Я пользуюсь
CODE

//---------------------------------------------------------------------------
// Load previos Position, Size and State for Form

PACKAGE void __fastcall IniFormRestore (TForm *frm, bool size, bool setstyle)
{
int ed;
bool b;

// Формы разрабатывались на экране с разрешением в 120 dpi
// Шрифтом MS Sans Serif 8
if (Form_Scale_Enable && frm->Scaled)
{ int i = Font_Form? Font_Form->Size : 8;
if (i <= 0) i = 8;
// frm->ScaleBy((DESIGN_PixelsPerInch * i), (Screen->PixelsPerInch * 8));
frm->ScaleBy(i, 8);
}

if (setstyle) SetStyle (frm);
AnsiString sect = NativeFormName(frm);
AnsiString tmp = Windows_XY->ReadString ("Forms", sect, "");
....

Это вызывается из FormCreate, тонкоя доводка контролов из ???Resize — например выравнивание друг за другом или по правому полю (кстати, Borland'овский якорь выравнивает по правому краю плохо) или по ширине. Использую много панелей с автовыравниванием, при условии что в одном направлении стоят не более трех (например Lef, Client, Right) (бывали случаи, когда Builder менял панели местами)

Спасиба. Щас попробую smile.gif

Вернуться в Вопросы программирования в C++Builder