Автор | Сообщение |
|
| |
Пост N: 2
Зарегистрирован: 19.05.11
|
|
Отправлено: 06.06.11 15:07. Заголовок: Achoice, UserFunction, Row
В большом проекте много где используется Achoice с пользовательской функцией. В этой пользовательской функции, позиция курсора определяется через Row(); В Clipper 5.2 все нормально работает, а под Harbour текущая позиция курсора непредсказуема. Можно подправить исходники, и использовать 3-й параметр <nRowPos>, передающийся в функцию и прибавлять к нему верхнюю координату Achoice(Top... Но править очень много, хотелось бы облегчить себе жизнь. Может кто сталкивался с этим, или у кого есть идеи, поделитесь. Спасибо! PS Используется: harbour-2.0.0-win.exe
|
|
|
Ответов - 16
[только новые]
|
|
|
| moderator
|
Пост N: 220
Зарегистрирован: 11.02.10
|
|
Отправлено: 06.06.11 15:28. Заголовок: Sikambr пишет: у ко..
Sikambr пишет: цитата: | у кого есть идеи, поделитесь |
| Идея простая: надо использовать более свежую сборку харбора с SVN (которая обновляется ежесуточно в автоматическом режиме), поскольку после выхода 2-й версии в работу функции Achoice() гарантированно вносились изменения разработчиками.
|
|
|
|
| |
Пост N: 3
Зарегистрирован: 19.05.11
|
|
Отправлено: 06.06.11 18:23. Заголовок: Скачал ночную версию..
Скачал ночную версию, откомпилил прогу, а она вместо русских букв, стала кракозябры выводить. Пытался вставить HB_CDPSELECT( "RU866" ), нифига не вышло. PS Зато в Achoice() функция Row() стала как надо работать.
|
|
|
|
| |
Пост N: 206
Зарегистрирован: 11.06.10
|
|
Отправлено: 07.06.11 00:10. Заголовок: Sikambr пишет: Скач..
Sikambr пишет: цитата: | Скачал ночную версию, откомпилил прогу, а она вместо русских букв, стала кракозябры выводить. Пытался вставить HB_CDPSELECT( "RU866" ), нифига не вышло. |
| REQUEST HB_CODEPAGE_RU866 HB_CDPSELECT( "RU866" )
|
|
|
|
| |
Пост N: 4
Зарегистрирован: 19.05.11
|
|
Отправлено: 07.06.11 12:45. Заголовок: В Harbour rev.16855 ..
В Harbour rev.16855 заметил одну маленькую неточность в библиотеке SuperLib. В файле superlib.hbp строка цитата: | -olib/${hb_plat}/${hb_comp}/super |
| изменена на а в файле superlib.hbc указано цитата: | libpaths=lib/${hb_plat}/${hb_comp} |
| На мой взгляд, если в файле superlib.hbp сделать строку цитата: | -olib/${hb_plat}/${hb_comp}/superlib |
| то все будет пучком :) И еще такой вопрос: файл hbmk.cfg переименован в hbmk.hbc, а в дистрибутив он не положен. Это сделано умышленно?
|
|
|
|
| |
Пост N: 207
Зарегистрирован: 11.06.10
|
|
Отправлено: 07.06.11 15:31. Заголовок: Sikambr пишет: В Ha..
Sikambr пишет: цитата: | В Harbour rev.16855 заметил одну маленькую неточность в библиотеке SuperLib. В файле superlib.hbp строка цитата: -olib/${hb_plat}/${hb_comp}/super изменена на цитата: -o${hb_name} а в файле superlib.hbc указано цитата: libpaths=lib/${hb_plat}/${hb_comp} На мой взгляд, если в файле superlib.hbp сделать строку цитата: -olib/${hb_plat}/${hb_comp}/superlib то все будет пучком :) |
| Что за неточность и что должно быть пучком можно подробней? (Только что собрал libsuperlib.a как сказано в readme.txt, есть несколько warning а так все норм.)
|
|
|
|
| |
Пост N: 5
Зарегистрирован: 19.05.11
|
|
Отправлено: 07.06.11 16:20. Заголовок: Прошу прощения, что ..
Прошу прощения, что не до конца объяснил ситуацию. Если собрать superlib (как есть) и откомпилировать какой-нибудь prg-шник с superlib, например, как написано в readme: hbmk2 myapp.prg superlib.hbc то получим ошибку "cannot find -lsuperlib". Для наглядности, можно добавить в myapp.prg строку: ? CurD() А если в файле superlib.hbp изменить строку: -o${hb_name} на -olib/${hb_plat}/${hb_comp}/superlib собрать superlib, то myapp.prg компилится.
|
|
|
|
| |
Пост N: 208
Зарегистрирован: 11.06.10
|
|
Отправлено: 08.06.11 08:34. Заголовок: Вот сегодня были изм..
Вот сегодня были изменения: 2011-06-08 00:27 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * examples/superlib/superlib.hbp ... ! synced libpaths in .hbp and .hbc files. it also means multitarget support # $Id: superlib.hbp 16868 2011-06-07 22:29:10Z vszakats $ # -hblib -inc -olib/${hb_plat}/${hb_comp}/${hb_name}
|
|
|
|
| |
Пост N: 6
Зарегистрирован: 19.05.11
|
|
Отправлено: 13.06.11 12:35. Заголовок: Вывожу файлы в кодир..
Вывожу файлы в кодировке RU866 на принтер примерно так: WIN_PRINTFILERAW( cPrinter, cFileName, "testing raw printing" ) На одних принтерах печатается нормально, на других кракозябрами. Под Клиппером подгружали програмки, типа dosprn, но сейчас хотелось бы уйти от этого. Идея такая: 1. перекодировать строки при формирования файла в Windows-кодировку hb_Translate( cText,"RU866", "RU1251" ) 2. распечатать файл Пункт 1 реализовал, в пункте 2 затык. Печатаются кракозябры. Как распечатать файл в кодировке Windows?
|
|
|
|
| постоянный участник
|
Пост N: 1787
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.06.11 20:31. Заголовок: Sikambr пишет: Печа..
Sikambr пишет: Как печатаешь ? Покажи код ! Их хелпера по хХарбору: PrintFileRaw() - Prints a file to a Windows printer in RAW mode
|
|
|
|
| |
Пост N: 7
Зарегистрирован: 19.05.11
|
|
Отправлено: 14.06.11 05:26. Заголовок: Как печатаешь ? Пок..
цитата: | Как печатаешь ? Покажи код ! |
| Создается файл, а затем он печатается функцией WIN_PRINTFILERAW. Если файл в кодировке RU866, то на неруссифицированных принтерах печатаются кракозябры (нужно подгружать всякие dosprn-ы). Вот я и хотел, перекодировать файл в RU1251. Ведь Notepad печатает русский текст нормально. Только как распечатать файл в кодировке RU1251?
|
|
|
|
| |
Пост N: 8
Зарегистрирован: 19.05.11
|
|
Отправлено: 21.06.11 08:37. Заголовок: Написал две функции ..
Написал две функции печати DOS файла и строки через Win_Prn() с разбивкой на строки и страницы. Может кому пригодиться. Компилим так: harbour winprint.prg hbwin.hbc hbct.hbc Еще нужно создать файл winprint.txt в DOS кодировке. Сам исходник: Скрытый текст
#define FORM_A4 9 #define PS_SOLID 0 #define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) ) #define BLACK RGB( 0x0 ,0x0 ,0x0 ) procedure Main local cFile local nSelect REQUEST HB_CODEPAGE_RU866 HB_CDPSELECT( "RU866" ) cFile = "winprint.txt" nSelect = Alert( 'Печатаем?', {"Крупно", "Мелко", "Аборт"} ) do case case nSelect == 1 WinPrintFile(cFile, .F.) case nSelect == 2 WinPrintFile(cFile, .T.) otherwise quit endcase return procedure WinPrintFile(cFile, lCompressed, cPrinter) WinPrintText(MemoRead(cFile), lCompressed, cPrinter) return procedure WinPrintText(cText, lCompressed, cPrinter) local oPrinter local cDelim := chr(10)+chr(13) local nLineCount, nLineIndex, cLineText local I if Empty(lCompressed) lCompressed := .F. endif if Empty(cPrinter) cPrinter := win_PrinterGetDefault() endif oPrinter := Win_Prn():New(cPrinter) IF !oPrinter:Create() Alert("Cannot Create Printer") ELSE oPrinter:Landscape := .F. oPrinter:FormType := FORM_A4 oPrinter:Copies := 1 IF !oPrinter:startDoc('Krab printing') Alert("StartDoc() failed") ELSE oPrinter:SetPen(PS_SOLID, 1, BLACK) if lCompressed // oPrinter:SetFont('Courier New', 8,{3,-50}) oPrinter:SetFont('Lucida Console',8,{3,-50}) else oPrinter:SetFont('Courier New', 10,{4,-47}) endif oPrinter:Charset(255) nLineCount = numtoken( cText, cDelim ) nLineIndex = 1 while nLineIndex <= nLineCount cLineText := token( cText, cDelim, nLineIndex ) I := At(chr(12), cLineText) if I == 0 oPrinter:NewLine() oPrinter:TextOut(cLineText) else while I > 0 if I > 1 oPrinter:NewLine() oPrinter:TextOut(SubStr(cLineText, 1, I-1)) endif oPrinter:NewPage() cLineText := Right(cLineText, Len(cLineText) - I) I := At(chr(12), cLineText) enddo if .not. cLineText == "" oPrinter:NewLine() oPrinter:TextOut(cLineText) endif endif ++nLineIndex enddo oPrinter:EndDoc() ENDIF oPrinter:Destroy() ENDIF return
|
|
|
|
|
|
| |
Пост N: 9
Зарегистрирован: 19.05.11
|
|
Отправлено: 21.06.11 14:40. Заголовок: Хотел спросить, что ..
Хотел спросить, что есть 3-й параметр-массив в методе oPrinter:SetFont oPrinter:SetFont('Courier New', 10,{4,-50}) Первые два понятно (имя и размер шрифта), а вот 3-й в хелпах так и не смог найти. Еще хотел спросить, как узнать путь к экзешнику? Ну и заодно, значение переменной среды окружения (например SET TEMP=)? Спасибо!
|
|
|
|
| moderator
|
Пост N: 227
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.06.11 14:55. Заголовок: Sikambr пишет: oPri..
Sikambr пишет: цитата: | oPrinter:SetFont('Courier New', 10,{4,-50}) Первые два понятно (имя и размер шрифта), а вот 3-й в хелпах так и не смог найти. |
| Посмотрел в коде и нашел такое описание: цитата: | METHOD SetFont( cFontName, nPointSize, xWidth, nBold, lUnderline, lItalic, nCharSet, lManualSize ) // NB: xWidth is in "CharactersPerInch" // _OR_ { nMul, nDiv } which equates to "CharactersPerInch" // _OR_ ZERO ( 0 ) which uses the default width of the font // for the nPointSize // IF xWidth (or nDiv) is < 0 then Fixed font is emulated |
| Может, поможет
|
|
|
|
| moderator
|
Пост N: 228
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.06.11 14:58. Заголовок: Sikambr пишет: Еще ..
Sikambr пишет: цитата: | Еще хотел спросить, как узнать путь к экзешнику? |
| Использовать функцию FUNCTION EXENAME() RETURN HB_PROGNAME() Sikambr пишет: цитата: | Ну и заодно, значение переменной среды окружения (например SET TEMP=)? |
| Использовать функцию GetE()
|
|
|
|
| постоянный участник
|
Пост N: 509
Зарегистрирован: 25.12.07
|
|
Отправлено: 21.06.11 15:45. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | цитата: METHOD SetFont( cFontName, nPointSize, xWidth, nBold, lUnderline, lItalic, nCharSet, lManualSize ) // NB: xWidth is in "CharactersPerInch" // _OR_ { nMul, nDiv } which equates to "CharactersPerInch" // _OR_ ZERO ( 0 ) which uses the default width of the font // for the nPointSize // IF xWidth (or nDiv) is < 0 then Fixed font is emulated Может, поможет |
| WinAPI-функции CreateFont и CreateFontIndirect не имеют параметра просто "размер шрифта". Высота и ширина задаются отдельно двумя параметрами. Вполне можно задавать, например, высоту там 200, а ширину 4, будет забавный очень высокий и худой шрифт При использовании только одного размера, высота и ширина вычисляются обычно так: nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72); а в nWidth передается 0, что подразумевает умолчательную для этого шрифта ширину. В HB_FUNC_STATIC( CREATEFONT ) из win32prn.prg видно, что nPointSize так и используется: iHeight = -MulDiv(iHeight, GetDeviceCaps(hDC, LOGPIXELSY), 72); xWidth два параметра используются для корректировки ширины: if (iDiv ) { iWidth = MulDiv(abs(iMul), GetDeviceCaps(hDC,LOGPIXELSX), abs(iDiv)) ; } else { iWidth = 0 ; // Use the default font width }
|
|
|
|
| |
Пост N: 35
Зарегистрирован: 03.01.10
|
|
Отправлено: 01.07.11 10:48. Заголовок: Вставляю свой пятак...
Вставляю свой пятак. Нужно было сделать настройку для пользователя по изменению высоты и ширины шрифта. По умолчанию {3,-50}, я пропорционально менял вторую цифру -60 -70 и т д. В принципе своего добился. Насколько я понимаю ширина определяется так 50 /3 = 16.7 п/дюйм. Знак "-" означает то ли "моноширинность" , то ли еще что-то, не помню.
|
|
|
|