| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Маштабирование при изменении разрешения экрана |
| Автор: Бегемот 24.3.2005, 20:51 |
| Здравствуйте! Такая вот у меня проблемма: Приложение работает в полноэкранном режиме. Мне необходимо, чтобы визуальные размеры компонентов оставались неизменными при любом разрешении экрана. Спасибо. |
| Автор: JAnty 24.3.2005, 21:19 |
| Никак (кажись). Или вычисляй разрешение(разширение) зкрана и меняй размеры компонентов по процйнтному соотнашению размеров по высоте и ширине(замучеешся), а лучше запускай прогу в определённом режиме экрана и не меняй его во время выполнения проги, так проще |
| Автор: Бегемот 24.3.2005, 22:27 | ||||||||
После двух километров кода таким способом
...именно эта мысль меня ударила первой...так только программно не могу реальзовать При запуске приложения, для начала, получаем текущее разрешение экрана
...далее проверяем соответствует ли разрешение экрана пользователя нашему разрешению, т.е тому под которое писали прогу.
...ну и при выходе из приложения востанавливаем чего мы там наменяли ...вероятно так же как и меняли |
| Автор: JAnty 25.3.2005, 10:39 |
| Изменение параметров экрана: // Для изменения параметров экрана используйте следующий // код: DEVMODE DM; DM.dmSize = sizeof(DEVMODE); DM.dmBitsPerPel = 16; // глубина цвета, бит на пиксель DM.dmPelsWidth = 1024; // разрешение по горизонтали DM.dmPelsHeight = 768; // разрешение по вертикали DM.dmFields = DM_BITSPERPEL + DM_PELSWIDTH + DM_PELSHEIGHT + DM_DISPLAYFREQUENCY; DM.dmDisplayFrequency = 75; // частота обновления экрана ChangeDisplaySettings(&DM, 0); // ЗАМЕЧАНИЕ: при изменении параметров смотрите чтобы монитор поддерживал это режим Как узнать частоту обновления экрана: // Для получения частоты обновления экрана напишите следующий код: HDC hDCScreen = GetDC(NULL); int Refresh = GetDeviceCaps(hDCScreen, VREFRESH); ReleaseDC(NULL, hDCScreen); // в Refresh содержится частота обновления экрана по горизонтали Как узнать разрешение экрана (VCL вариант): // Разрешение экрана можно узнать, прочитав значения // свойств Screen->Width и Screen->Height: int HorzRes = Screen->Width; int VertRes = Screen->Height; Как узнать разрешение экрана (WinAPI вариант): // Для получения разрешения экрана напишите следующий код: HDC hDCScreen = GetDC(NULL); int Horres = GetDeviceCaps(hDCScreen, HORZRES); int Vertres = GetDeviceCaps(hDCScreen, VERTRES); ReleaseDC(NULL, hDCScreen); // в Horres содержится разрешение экрана по горизонтали, // в Vertres содержится разрешение экрана по вертикали. Как узнать разрешение экрана: // Для получения разрешения экрана напишите следующий код: int screenW=GetSystemMetrics(SM_CXSCREEN);//Получить ширину экрана int screenH=GetSystemMetrics(SM_CYSCREEN);//Получить высоту экрана // в screenW содержится разрешение экрана по горизонтали, // в screenH содержится разрешение экрана по вертикали. |
| Автор: Бегемот 25.3.2005, 19:29 |
| Я вот никак не могу найти на форуме инфу по поводу того КТО МОЖЕТ? и КАК? повысить репутацию собеседнику. Кто-нибудь подскажите. Ну а если я, нисколь не отметившийся гражданин, могу это сделать, то прошу руководство наградить JAnty плюсом. JAnty, СПАСИБО, за подробный ответ на вопрос! Здорово помог! |
| Автор: JAnty 25.3.2005, 20:15 |
| Пожалусто |
| Автор: Perun 21.2.2008, 17:20 |
| ДОбрый день, не подскажите, а размеры компоннтов при этом изменятся пропорционально? |
| Автор: UniBomb 21.2.2008, 21:14 |
| некрофил.... |
| Автор: Perun 22.2.2008, 09:44 | ||
| Вы на что намекаете? С этого места поподробнее...и по уважительней пожайлуста
Приложение написано для разрешения 1280x1024 На форме используется AdvColumnGrid(без scrollbar'ов) У меня проблема заключается в том, что при уменьшении разрешения сам Grid не уменьшается, некоторые записи не видно и перемещаться по нему приходится при помощи стрелок. Необходимо, чтобы просто Grid целиком отображался на форме, без искажений. |
| Автор: jonie 22.2.2008, 22:45 | ||
эт он шутит про поднятие тем 2005 года) благо человек поискал прежде чем задать вопрос, что есть гуд.
|
| Автор: Perun 26.2.2008, 12:14 |
| Понятно...шутит. А может Grid к размеру формы. Т.е. изменить размеры шрифта, формы, всех компонентов... А короче, через масштабирование путь есть? |
| Автор: UniBomb 27.2.2008, 12:43 |
| Perun, Если обидел - извини... В общем, чтобы твой грид менялся подстать форме, то в его свойствах Anchors поставь все значение в true. Тогда грид будет меняться в размерах настолько же, насколько меняется форма. Если ты хочеш при этом менять размеры ячеек (я так понял это какая то таблица) и размеры шрифта, то в событии OnResize формы сделай проверку размеров формы. Ну скажем например - если размеры формы лежат в пределах 600-800 пикселей, то размер шрифта мы установим равным 10ппт, а размеры ячейки 25х25. А если размеры лежат в пределах 800-1024 пикселей, то размер шрифта - 12ппт, а ячейки - 30х30. И т.д. Я надеюсь правильно понял проблему...... |
| Автор: Perun 28.2.2008, 17:43 |
| Ничего всё нормально! Благодарю за помощь - разобрался, получилось. |