Форум » [x]Harbour » Full screen mode » Ответить

Full screen mode

Dima: Windows XP и ниже поддерживает такой режим. Начиная с VISTA такого режима нет для консольных приложений. Как выставить в приложении режим развернуть окно на весь экран в зависимости от версии OS Windows ? Что то типа такого нужно [pre2] if isfullscreemode() // все как обычно как в Clipper else // развернем окошко поширше и на весь экран endif [/pre2]

Ответов - 37, стр: 1 2 All

Andrey: Dima пишет: Как выставить в приложении режим развернуть окно на весь экран в зависимости от версии OS Windows IF OS_ISWINVISTA_OR_LATER() // развернем окошко поширше и на весь экран ELSE // все остальное.... END Какой терминал и Харбор используешь ? Если хочешь: "// развернем окошко поширше и на весь экран " то надо GTVWG -терминал использовать. Для хХарбора выкладывал уже, для Харбора еще "допиливать" нужно, там пара функций не работает...

Dima: Andrey пишет: Какой терминал и Харбор используешь ? GTWIN Ведь я же могу ручками зайти в свойства окна и подобрать нужный шрифт для окна что бы оно было на весь экран или почти. А как это программно задать ? Andrey пишет: то надо GTVWG -терминал использовать Там ясно как сделать.

Andrey: Dima пишет: А как это программно задать ? Не знаю... Я из-за этого ушел на GTVWG -терминал.


Dima: Andrey пишет: Не знаю... Способ есть. Вопрос кто возьмется перевести это под Harbour Вот сырец http://forum.oszone.net/thread-129824-6.html

Pasha: Dima пишет: Вопрос кто возьмется перевести это под Harbour Пишут, что SetConsoleFont - это недокументированная функция. Т.е., она будет работать не на всех ОС, и не для всех размеров шрифта. Перевести то под харбор ее несложно. Я перевел (см.ниже). Но она у меня не работает (xp sp3). Почему - не знаю. [pre2]#pragma BEGINDUMP #include "hbapi.h" #include "windows.h" typedef BOOL (WINAPI *SETCONSOLEFONT)(HANDLE, DWORD); SETCONSOLEFONT SetConsoleFont; HB_FUNC( WIN_SETCONSOLEFONT ) { HMODULE hmod = GetModuleHandleA("KERNEL32.DLL"); SetConsoleFont = ( SETCONSOLEFONT ) GetProcAddress(hmod, "SetConsoleFont"); if ( SetConsoleFont ) SetConsoleFont( GetStdHandle(STD_OUTPUT_HANDLE), hb_parni( 1 ) ); } #pragma ENDDUMP [/pre2]

Dima: Pasha а параметры какие ? Похоже число (поигрался) и вплоть до 10 размер окна меняется. Но все равно что то не то.

Pasha: Dima пишет: а параметры какие ? Размер шрифта win_SetConsoleFont( <nFontSize> )

Dima: А сам шрифт можно указать ?

Pasha: В этой функции - нет. Да и для консоли windows доступен только шрифт Lucida Console, других вариантов нет.

Dima: Pasha Спасибо

Dima: Pasha пишет: Но она у меня не работает (xp sp3) Поигрался , работает. WIN_SETCONSOLEFONT(16) установит 24 размер WIN_SETCONSOLEFONT(17) установит 24 размер BOLD WIN_SETCONSOLEFONT(18) установит 28 размер С параметром меньше 11 ставятся точечные шрифты

AndreyZh: Pasha пишет: В этой функции - нет. Да и для консоли windows доступен только шрифт Lucida Console, других вариантов нет. Почему: Courier New & Terminal так же ставятся

Pasha: AndreyZh пишет: Почему: Courier New & Terminal так же ставятся Значит, на разных версиях windows по разному. У меня вот есть только Lucida Console

Dima: Pasha А как получить дескриптор текущего консольного окна ? Пробовал так но что то не получается #include "hbapi.h" #include "Windows.h" HB_FUNC( GETCONSOLEWINDOW ) { hb_retnl( GetConsoleWindow( hb_parc( 1 ) ) ) ; } PS Читал о ней тут http://www.vsokovikov.narod.ru/New_MSDN_API/Console/fn_getconsolewindow.htm

Pasha: Так у GetConsoleWindow нет параметров. Значит, надо так: HB_FUNC( GETCONSOLEWINDOW ) { hb_retnl( GetConsoleWindow( ) ) ; }

Dima: хммм Warning W8065 test.prg 1209: Call to function 'GetConsoleWindow' with no prototype in function HB_FUN_GETCONSOLEWINDOW ага... В Wincon.h BCC 55 нет такой функции а в BCC 582 есть И что же делать теперь если у меня BCC 55 ?

Dima: Dima пишет: а в BCC 582 есть Попробовал пересобрать HArbour 3.2 под BCC 582 и облом. Во время сборки вывалилась месага об отсутствии Unicows.dll , что ему надо ? ;) Под BCC 55 сборка проходила нормально. PS Windows XP SP3

Pasha: Пишут, что GetConsoleWindow есть в winapi начиная с win2k. Это значит, что программы, ее использующие, не будут работать под win98 Если такой вариант устраивает, то есть несколько вариантов решения проблемы: 1. Попробовать просто скопировать прототип этой функции из wincon.h от bcc582. Может быть такой фокус пройдет. 2. Выяснять, почему не получается сборка с 5.8.2. Должна получаться. unicows.lib в поставке харбора есть, и для bcc 5.5 он нужен точно так же, как и для bcc 5.8.2 3. Использовать не bcc 5.8.2, а mingw, что перспективнее 4. Использовать для загрузки GetConsoleWindow тот же прием, что и для недокументированной SetConsoleFont, т.е. загружать ее из kernel32.dll, тогда тоже можно оставить bcc55

Dima: Pasha Понял. Разобрался уже. Спасибо

Dima: Пересобрал Harbour под Mingw 4.7.2 Собирался он очень долго. По прежнему такой код не катит при сборке obj/sklad.o:sklad.c:(.text+0x574): undefined reference to `GetConsoleWindow' #PRAGMA BEGINDUMP #include "hbapi.h" #include "Windows.h" #include "Wincon.h" HB_FUNC( GETCONSOLEWINDOW ) { hb_retnl( GetConsoleWindow( ) ) ; } #PRAGMA ENDDUMP В wincon.h есть вот такой код #if (_WIN32_WINNT >= 0x0500) BOOL WINAPI GetConsoleDisplayMode(LPDWORD); HWND WINAPI GetConsoleWindow(void); #endif Вопрос откуда компилятор знает значение _WIN32_WINNT , похоже у меня эта ветка и не сработала

Pasha: Dima пишет: Пересобрал Harbour под Mingw 4.7.2 Собирался он очень долго. Помнится, наш немецкий друг со своим знаменитым шефом жаловался на медленную сборку под bcc55. Это он сборки современными компиляторами еще не видел :-) По прежнему такой код не катит при сборке .. Вопрос откуда компилятор знает значение _WIN32_WINNT , похоже у меня эта ветка и не сработала У меня тоже. Харбор получается не определят этот макрос. Ну и ладно. Эту функцию можно определить и вручную: #include "hbapi.h" #include "windows.h" WINBASEAPI HWND APIENTRY GetConsoleWindow( VOID ); HB_FUNC( WIN_GETCONSOLEWINDOW ) { hb_retnl( ( HB_LONG ) GetConsoleWindow( ) ); } #pragma ENDDUMP Функция вроде бы работает, что-то возвращает.

Dima: Pasha Да работает ;) Вот только ворнинг при сборке sklad.prg: In function 'HB_FUN_GETCONSOLEWINDOW': sklad.prg:1227:1: warning: passing argument 1 of 'hb_retnl' makes integer from pointer without a cast [enabled by defaul t] In file included from sklad.prg:1112:0: c:/hb32mingw/include/hbapi.h:699:25: note: expected 'long int' but argument is of type 'HWND'

Dima: ага вроде так надо HB_FUNC( GETCONSOLEWINDOW ) { hb_retnl( (LONG)GetConsoleWindow( ) ) ; }

Dima: Все как бы нормально , но перестала нормально работать WIN_SETCONSOLEFONT() Когда сборка была под BCC все было норм а сейчас она не реагирует на параметр больше 10 И до кучи еще вопрос. Можно ли опционально указать hbmk2 в качестве параметра где искать компилятор , дабы не прописывать путь к нему через SET PATH ?

Петр: Dima пишет: Можно ли опционально указать hbmk2 в качестве параметра где искать компилятор , дабы не прописывать путь к нему через SET PATH ? Я обычно запускаю скриптом @rem hbmk.bat @ECHO OFF setlocal set PATH=d:\mingw\bin "%~dp0hbmk2.exe" %* endlocal Здесь скрипт находится в одной папке с hbmk2

Петр: Dima пишет: Все как бы нормально , но перестала нормально работать WIN_SETCONSOLEFONT() А можно все в студию, вместе с обьяснительной Самодостаточный пример

Dima: Петр пишет: set PATH=d:\mingw\bin я тоже так , но думалось что есть опция для hbmk2 , но пока ее нет .

Dima: Петр пишет: А можно все в студию, вместе с обьяснительной Самодостаточный пример ХЗ что было ;) Но сейчас работает одинаково и в BCC и MINGW [pre2] proc main cls setmode(25,80) WIN_SETCONSOLEFONT(12) // фонт 24 Lucida console @ 10,10 say "TEST" color "gr+/r" WAIT "TEST 24 Lucida console" return #pragma BEGINDUMP #include "hbapi.h" #include "windows.h" typedef BOOL (WINAPI *SETCONSOLEFONT)(HANDLE, DWORD); SETCONSOLEFONT SetConsoleFont; HB_FUNC( WIN_SETCONSOLEFONT ) { HMODULE hmod = GetModuleHandleA("KERNEL32.DLL"); SetConsoleFont = ( SETCONSOLEFONT ) GetProcAddress(hmod, "SetConsoleFont"); if ( SetConsoleFont ) SetConsoleFont( GetStdHandle(STD_OUTPUT_HANDLE), hb_parni( 1 ) ); } #pragma ENDDUMP [/pre2]

Dima: Pasha пишет: У меня тоже. Харбор получается не определят этот макрос Мне вот стало интересно если харбор не определяет такие макросы а они натыканы по всюду , тогда встает под сомнение и сборка харбор под MINGW или я не прав !? Когда собирался харбор под MinGW частенько возникали разного рода ворнинги , и меня это малехо напрягает

Pasha: Dima пишет: Мне вот стало интересно если харбор не определяет такие макросы а они натыканы по всюду , тогда встает под сомнение и сборка харбор под MINGW или я не прав !? Когда собирался харбор под MinGW частенько возникали разного рода ворнинги , и меня это малехо напрягает Я могу только предположить. Если в харборе будет определен макрос вида. #define _WIN32_WINNT 0x0500 и будут использованы функции, которые есть в версиях windows старше некоторой, то харбор будет непригоден для использования в младших версиях этой ОС. А харбор универсален, и его можно использовать для всех версий windows. Но можно определить подобный макрос в своих программах, и использовать такие функции. К примеру: #define _WIN32_WINNT 0x0500 #include "hbapi.h" #include "windows.h" HB_FUNC( WIN_GETCONSOLEWINDOW ) { hb_retnl( ( HB_LONG ) GetConsoleWindow( ) ); }

Dima: Pasha пишет: #define _WIN32_WINNT 0x0500 #include "hbapi.h" #include "windows.h" HB_FUNC( WIN_GETCONSOLEWINDOW ) { hb_retnl( ( HB_LONG ) GetConsoleWindow( ) ); } Не прокатило и снова ругается что нет GetConsoleWindow

Pasha: У меня с mingw работает. А с bcc55 работать не будет, поскольку прототипа этой функции нет совсем.

Dima: Pasha пишет: У меня с mingw работает про MINGW и пишу , помучаю еще.........

Dima: Dima пишет: помучаю еще......... Не фига ;) Только вот с такой вставкой и работает WINBASEAPI HWND APIENTRY GetConsoleWindow( VOID ); зы Mingw 4.7.2

Dima: Жесть. Убил кучу времени. Вот так не cобирается и не находит GetConsoleWindow [pre2] PROC Main cls ? GETCONSOLEWINDOW() wait return #pragma BEGINDUMP #include "hbapi.h" #include "windows.h" HB_FUNC( SETCONSOLETITLE ) { hb_retl( SetConsoleTitle( hb_parc( 1 ) ) ) ; } HB_FUNC( FINDWINDOW ) { hb_retnl( (LONG)FindWindow( NULL, hb_parc( 1 ) ) ) ; } #PRAGMA ENDDUMP #pragma BEGINDUMP #define _WIN32_WINNT 0x0500 #include "hbapi.h" #include "windows.h" HB_FUNC( GETCONSOLEWINDOW ) { hb_retnl( (HB_LONG)GetConsoleWindow( ) ) ; } #PRAGMA ENDDUMP [/pre2] а вот так собирается и работает [pre2] PROC Main cls ? GETCONSOLEWINDOW() wait return #pragma BEGINDUMP #define _WIN32_WINNT 0x0500 #include "hbapi.h" #include "windows.h" HB_FUNC( SETCONSOLETITLE ) { hb_retl( SetConsoleTitle( hb_parc( 1 ) ) ) ; } HB_FUNC( FINDWINDOW ) { hb_retnl( (LONG)FindWindow( NULL, hb_parc( 1 ) ) ) ; } HB_FUNC( GETCONSOLEWINDOW ) { hb_retnl( (HB_LONG)GetConsoleWindow( ) ) ; } #PRAGMA ENDDUMP [/pre2] Где я ошибаюсь ?

Pasha: Dima пишет: Жесть. Убил кучу времени. Вот так не cобирается и не находит GetConsoleWindow Проблема в том, что в этом коде строка #include "windows.h" встречается 2 раза, причем первый раз макрос _WIN32_WINNT не задан. Но срабатывает только включение windows.h первый раз, без определения _WIN32_WINNT Второй оператор include игнорируется Поэтому правильно было бы включить все в один фрагмент BEGINDUMP - ENDDUMP, в начале которого указать #define _WIN32_WINNT 0x0500 #include "hbapi.h" #include "windows.h" а затем включать функции.

Dima: Pasha Понял. Спасибо !



полная версия страницы