Wasabi |
Отправлено: 07.09.2004, 09:05 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 23
|
Например дизайнеришь форму при разрешении 1024*768 и при стандартном шрифте в 96dpi.
Но если юзер (например тетка с хреновым зрением) ставит себе шрифт в 125% и фсе....формы выглядят хренова....контролы "едут"....в лэйблах текст не влезает...
Я вот сделал ini-файл с настройками контролов для разных разрешений и размеров шрифтов (написал процедуру выгрузки параметров) и перед открытием формы процедура считывает параметры и применяет их к контролам.
Может есть другой, более простой и изящный способ?
Думаю многих такая проблема волнует, делитесь
|
|
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) | я пытался написать такую функцию....высчитывал пропорции, пытался подобрать коэффициент для разных разрешений....все равно криво получается. Особенно когда на форме много контролов ввода текста и они расположены очень близко друг от друга....полюбому часть из них залазиет на рядом стоящие....
|
Ну тут тяжело что-либо дельное посоветовать, ведь все от каждой конкретной формы зависит, разве что не мучайтесь с коеффициентами, а считайте сразу размер шрифта, рядом сидящие контролы располагайте слева непрово, конец первого — начало вторго + чуть-чуть . Все таки панели хорошее решение.
|
|
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 менял панели местами) |
Спасиба. Щас попробую |
|