Форум » [x]Harbour » Смена "режима" под GTWVT » Ответить

Смена "режима" под GTWVT

Dima: Заведу отдельную тему все же. [pre2] #include "hbgtinfo.ch" proc main local j:=.f. local a REQUEST HB_GT_WVT REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) hb_gtInfo(HB_GTI_CODEPAGE, 255) hb_gtInfo(HB_GTI_FONTNAME, 'Lucida Console') hb_gtInfo(HB_GTI_FONTQUALITY,4) do while .t. if(j,Wvt_setmode(35,130),Wvt_setmode(25,80)) for a=0 to maxrow() @ a,0 say a color "w/n" next inkey(0) j:=!j if lastkey()==27 exit endif enddo return ************* Func Wvt_setmode(nrow,ncol) HB_GtInfo(HB_GTI_FONTSIZE , Int(HB_GtInfo(HB_GTI_DESKTOPHEIGHT)/(nrow))) HB_GtInfo(HB_GTI_FONTWIDTH, Int(HB_GtInfo(HB_GTI_DESKTOPWIDTH) /(ncol))) return Setmode(nrow,ncol) [/pre2] При первом вызове установится Setmode 25x80 и окно почти на весь экран Жмем пробел Установится Setmode 35x130 и окно почти на весь экран Жмем пробел Установится Setmode 25x80 а окно уже не такое как было при первом вызове и намного меньше. Что не так делаю ? Помогите разобраться. Спасибо.

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

petr707: не указаны размеры шрифта - видимо при старте берутся из дефолта и окна получаются больше чем экран. добавил три строки - чтобы окна были меньшего размера, все переключается в норме ==================== #include "hbgtinfo.ch" proc main local j:=.f. local a REQUEST HB_GT_WVT REQUEST HB_GT_WVT_DEFAULT REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) hb_gtInfo(HB_GTI_CODEPAGE, 255) hb_gtInfo(HB_GTI_FONTNAME, 'Lucida Console') hb_gtInfo(HB_GTI_FONTQUALITY,4) do while .t. if(j,Wvt_setmode(35,130),Wvt_setmode(25,80)) for a=0 to maxrow() @ a,0 say a color "w/n" next inkey(0) j:=!j if lastkey()==27 exit endif enddo return ************* Func Wvt_setmode(nrow,ncol) HB_GtInfo(HB_GTI_FONTSIZE , Int(HB_GtInfo(HB_GTI_DESKTOPHEIGHT)/(nrow))) HB_GtInfo(HB_GTI_FONTWIDTH, Int(HB_GtInfo(HB_GTI_DESKTOPWIDTH) /(ncol))) Setmode(nrow,ncol) HB_GtInfo( HB_GTI_FONTWIDTH , 4 ) HB_GtInfo( HB_GTI_FONTSIZE , 10 ) return .t.

petr707: для 25*80 xFONTWIDTH := INT((HB_GTINFO( HB_GTI_DESKTOPWIDTH )-30 )/80 ) xFONTSIZE := INT((HB_GTINFO( HB_GTI_DESKTOPHEIGHT )-24 )/25 ) xSCREENWIDTH := 80 * xFONTWIDTH xSCREENHEIGHT := 25 * xFONTSIZE

Dima: petr707 Идею понял , спасибо Вот что получилось , работает правильно [pre2] Func Wvt_setmode(nrow,ncol) local xHEIGHT:=HB_GtInfo(HB_GTI_DESKTOPHEIGHT) local xWIDTH:=HB_GtInfo(HB_GTI_DESKTOPWIDTH) HB_GtInfo(HB_GTI_FONTSIZE , int(xHEIGHT/nrow)) HB_GtInfo(HB_GTI_FONTWIDTH, int(xWIDTH/ncol)) Setmode(nrow,ncol) HB_GtInfo(HB_GTI_SCREENWIDTH,Int(xWIDTH*(ncol))) HB_GtInfo(HB_GTI_SCREENHEIGHT,int(xHEIGHT*(nrow))) Setmode(nrow,ncol) // только так иначе окно уедет return .t. [/pre2]


Dima: Запарил меня совсем GTWVG Мне нужно на лету менять кол-во колонок и строк , под чистым WVT все нормально Что делаю не так ? PS Кроме того при HB_GT_WVT_DEFAULT цвета какие то блёклые При HB_GT_WVG_DEFAULT отличные сочные цвета ;) [pre2] #include "hbgtinfo.ch" proc main REQUEST HB_GT_WVT REQUEST HB_GT_WVG_DEFAULT // если вот так все работает , но WVG нужен так как без него не вывести картинки //REQUEST HB_GT_WVT_DEFAULT //REQUEST HB_GT_WVG REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) hb_gtInfo(HB_GTI_CODEPAGE, 255) hb_gtInfo(HB_GTI_FONTNAME, 'Lucida Console') hb_gtInfo(HB_GTI_FONTQUALITY,4) @ 0,0 say wvt_setmode(30,100) // .T. inkey(0) @ 0,0 say wvt_setmode(25,80) // почему то .F. inkey(0) return Func Wvt_setmode(nrow,ncol) local ret:=.t. local xHEIGHT:=HB_GtInfo(HB_GTI_DESKTOPHEIGHT) local xWIDTH:=HB_GtInfo(HB_GTI_DESKTOPWIDTH) local nMaxScrRow local nMaxScrCol setmode(25,80) hb_gtInfo( HB_GTI_FONTWIDTH, Int(HB_GtInfo(HB_GTI_DESKTOPWIDTH)/ncol)) hb_gtInfo( HB_GTI_FONTSIZE, Int(HB_GtInfo(HB_GTI_DESKTOPHEIGHT)/nrow)) /* resize console window using new font size */ SetMode( MaxRow() + 1, MaxCol() + 1 ) /* get screen dimensions */ nMaxScrRow := hb_gtInfo( HB_GTI_DESKTOPROWS ) nMaxScrCol := hb_gtInfo( HB_GTI_DESKTOPCOLS ) /* resize console window to the screen size */ SetMode( nMaxScrRow, nMaxScrCol ) HB_GtInfo(HB_GTI_SCREENWIDTH,xWIDTH) HB_GtInfo(HB_GTI_SCREENHEIGHT,xHEIGHT) ret:=SetMode( nMaxScrRow, nMaxScrCol ) return ret [/pre2]

Dima: WVT WVG Это по поводу цвета

Dima: что интересно первый вызов под WVG cрабатывает всегда wvt_setmode(30,110) // .t. при следующих вызовах возвращается .f. Возможно нужно выполнить некий сброс окна который выполняется до первого вызова wvt_setmode но мне о нем ни чего не известно. Есть мысли у кого ?

Sergy: Dima пишет: WVT WVG Это по поводу цвета Разные драйверы, написаны разными людьми. У них - разное восприятие цвета. aPal := hb_gtInfo(HB_GTI_PALETTE) // возвращает палитру hb_gtInfo(HB_GTI_PALETTE,aPal) // восстанавливает палитру целиком hb_gtInfo(HB_GTI_PALETTE,nColor,nRGB) // меняет один цвет в палитре В свое время я плюнул на эти изменения в цвете при переходе с WVT на WVG и привязал их персонально к каждому юзеру в базе настроек + дал возможность каждому поиграть виндовым Color Picker'om. Это сняло вопрос с "бледностью цветов".

Sergy: Dima пишет: что интересно первый вызов под WVG cрабатывает всегда wvt_setmode(30,110) // .t. при следующих вызовах возвращается .f. Потому что неправильно выполняется расчет размеров окна. Попробуй в wvt_SetMode сделать так: hb_gtInfo(HB_GTI_SCREENWIDTH ,nCol * hb_gtInfo( HB_GTI_FONTWIDTH)) hb_gtInfo(HB_GTI_SCREENHEIGHT,nRow * hb_gtInfo( HB_GTI_FONTSIZE)) Т.е. размер окна в пикселях нужно устанавливать не по размеру desktop, а по размеру символа * кол-во символов (в строке/столбце) Тогда всегда будут .T. хотя-бы под WVT.

Sergy: Вот так работает и под WVT и под WVG: [pre2] #include "hbgtinfo.ch" proc main REQUEST HB_GT_WVG_DEFAULT REQUEST HB_GT_WVT // REQUEST HB_GT_WVT_DEFAULT // REQUEST HB_GT_WVG REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) hb_gtInfo(HB_GTI_FONTNAME, 'Lucida Console') hb_gtInfo(HB_GTI_FONTQUALITY,3) @ 0,0 say MySetmode(30,100) @ 1,0 say hb_NTOS(MAXROW()+1)+"x"+hb_NTOS(MAXCOL()+1)+SPACE(10) inkey(0) @ 0,0 say MySetmode(50,150) @ 1,0 say hb_NTOS(MAXROW()+1)+"x"+hb_NTOS(MAXCOL()+1)+SPACE(10) inkey(0) @ 0,0 say MySetmode(40,90) @ 1,0 say hb_NTOS(MAXROW()+1)+"x"+hb_NTOS(MAXCOL()+1)+SPACE(10) inkey(0) @ 0,0 say MySetmode(35,85) @ 1,0 say hb_NTOS(MAXROW()+1)+"x"+hb_NTOS(MAXCOL()+1)+SPACE(10) inkey(0) return * --------------------- * Func MySetmode(nRow,nCol) // устанавливаем заведомо меньше hb_gtInfo( HB_GTI_FONTWIDTH, 5) hb_gtInfo( HB_GTI_FONTSIZE, 8) SetMode(nRow,nCol) // устанавливаем нужный размер шрифта под запрошенный размер окна программы в символах hb_gtInfo( HB_GTI_FONTWIDTH, INT(HB_GtInfo(HB_GTI_DESKTOPWIDTH) /nCol)) hb_gtInfo( HB_GTI_FONTSIZE, INT(HB_GtInfo(HB_GTI_DESKTOPHEIGHT)/nRow)) return SetMode(nRow,nCol)[/pre2]

Dima: Sergy пишет: Func MySetmode(nRow,nCol) Да ты прав ! Все работает как надо Спасибо. А я начал было мутить с пересозданием окна WVG , тоже работает.

Dima: Sergy Возможно у тебя есть еще один ответ на вопрос. Под WVT работает HB_gtInfo( HB_GTI_CLOSABLE, .f. ) // крестик становится не доступен Под WVG не работает , как то лечится ? PS В ранних версиях работает

Sergy: Dima пишет: Возможно у тебя есть еще один ответ на вопрос. Под WVT работает HB_gtInfo( HB_GTI_CLOSABLE, .f. ) // крестик становится не доступен Под WVG не работает , как то лечится ? PS В ранних версиях работает У меня работает так: hb_gtInfo( HB_GTI_CLOSEMODE, 1 ) [pre2]2013-11-06 23:09 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * include/hbgtinfo.ch + added new hb_gtInfo() switch: HB_GTI_CLOSEMODE It controls close event (i.e. ALT+F4 and/or [x] button in MS-Windows) behavior: == 0 - terminate application >= 1 - generate HB_K_CLOSE == 2 - disable close button[/pre2]

Dima: Sergy Да новую фишку я видел и да с GTWVT работает а вот с GTWVG нет. Ранее пахало.

Sergy: У меня с GTWVG работает. И на осенней сборке и на нынешней, июньской. При нажатии на крестик появляется HB_K_CLOSE.

Dima: Sergy пишет: У меня с GTWVG работает То есть крест такой ? Это под WVT Под WVG такого эффекта добиться не получилось...... PS Harbour 3.2.0dev (r1502260836)

Sergy: Dima пишет: Под WVG такого эффекта добиться не получилось...... Сначала тоже не получилось, потом вспомнил: индус, который разработчик - писал, что многие(некоторые?) настройки работают только после того, как WVG подсистема запущена. Т.е. перед установкой CLOSABLE нужно сделать CLS или хотя-бы ? "hello". Только что попробовал на твоем примере - крестик стал серым под WVG, если написать вызов не в самом начале программы, а после @ SAY: @ 0,0 say MySetmode(30,100) @ 1,0 say hb_NTOS(MAXROW()+1)+"x"+hb_NTOS(MAXCOL()+1)+SPACE(10) @ 2,0 say hb_gtVersion(1) hb_gtInfo(HB_GTI_CLOSEMODE, 2 ) inkey(0)

Dima: Sergy Писец Работает

Sergy:

Dima: Жесть. Сделал в рабочей проге парочку таблиц в 30 строк на 110 колонок , чисто эксперимента ради и что бы народ поюзал. Было 25 на 80 и окно на весь экран. Уверен был на 200 % что всем понравится. Спустя 3 дня начались вопли со стороны бухгалтерии и оптового отдела .......что им мелко и зрение могут потерять А ведь шрифт чуть совсем меньше почти и не заметно , зато инфы куда больше влезает. Не знаю что с ними и делать и это если учесть что руководство мечтает иметь GUI прогу. Представляю себе ГУЙ с таким шрифтом и размеры контролов , да они замаются с ней работать )) PS GTWVG

Andrey: Dima пишет: Не знаю что с ними и делать и это если учесть что руководство мечтает иметь GUI прогу. Сделай им выбор шрифта и пускай сами решают, каким пользоваться - беречь им зрение или нет. Бухи всегда капризные !



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