|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблемы с компонентом TFrame
Доброго времени суток. Возникла щекотливая ситуация с компонентом TFrame.
Есть главная форма. На ней размещен объект класса TPageControl с несколькими объектами TTabSheet. При загрузке главного окна в событии OnCreate я создаю экземпляр класса TFrame и помещаю в нужный мне TabSheet. Выглядит примерно так. public: myFrame : TCustomFrame; //Класс наследник TFrame с моими компонентами там. . . . . . procedure TForm.FormCreate(Sender: TObject); begin myFrame := TCustomFrame.Create(Application); myFrame.Parent := My_TabSheet; end; Долгое время все устраивало. Но в один момент появилась необходимость запускать приложение на Full HD мониторе (1920x1080). И поскольку виндовые буквы были очень маленькими, через "Специальные возможности" винды установили "Средние буквы". Все поплыло и поехало... Винда своими топорными методами сделала Resize всех объектов, где-то увеличив только длину, а где-то длину и ширину. Но подгружаемые фреймы так и остались старого размера. Что сделало интерфейс кривым и неюзабельным. Вариант скопировать фрейм на форму не рассматривается, нарушится модульность. Да и сам запутаюсь в нескольких десятках тысяч строк кода. Будет путаница с огромным количеством компонентов. Разбить на разные окна - не катит. Именно данный вид вызывает бОльшее одобрение у юзеров. Пока приходит на ум единственный вариант - просто сделать отдельную версию программы для таких случаев (Текст 125%, Текст 150%). Можно проблему решить менее радикальным способом? А именно масштабируемость подгружаемых фреймов при включении специальных возможностей виндовс. |
#2
|
|||
|
|||
В общем посовещавшись, проблему исчерпали.
Насколько я понял, это фишка Windows 7, возможность увеличивать все окна для слабовидящих, создавая эффект уменьшения разрешения. Решение 1 : Найти где-то в WinAPI параметр, отвечающий за данный режим отображения. (А может и в реестре лежит). Физически на ПК разрешение остается тем же, через него не отследишь. И уже исходя из этого менять в коде все размеры фреймов и компонентов на них. Решение 2: Просто создать версию фреймов именно под эти параметры. Проще, быстрее и в виду единичного случая. Уже притащил себе монитор 22" с похожим разрешением. Все спасибо за внимание. Решение |