Форум » [x]Harbour » Технические вопросы по смене версии xHarbour на современную » Ответить

Технические вопросы по смене версии xHarbour на современную

AndreyZh: Как конкретизация вопросов по теме: http://clipper.borda.ru/?1-4-0-00001352-000-0-0-1636542981 Поставил себе xHarbour самой свежей сборки. Попытался собирать программы - конечно выявилось несколько откровенных ошибок кода программ, которые исправил, а далее сборки производились без проблем... Однако появились ошибки/косяки времени исполнения, которые буду озвучивать в данной теме и надеюсь на Ваше участие в их исправление... Пожалуйста помогите "кто, чем может"

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

AndreyZh: №1. Проблема с функцией HB_gtInfo терминала WVT. Раньше заголовок окна с иконкой отражался корректно и для этого использовалась универсальная процедура [pre2] * Замена заголовка окна Win и вставка исходника на С PROC pWind(cTxt,cIconFile) LOCA hW cIconFile := IF(cIconFile == NIL, "", cIconFile ) /* Блок для терминала Win SetConsoleTitle(Alltrim(cTxt)) hW := FindWindow(Alltrim(cTxt)) DeleteCloseButton(hW) // Перекодировка строки в UTF-8 WAIT HB_STRTOUTF8([АРМ кладовщика, менеджера, бухгалтера + производство. Версия 1.993 Весна 2013г.]) */ /* Блок для терминала WVT */ HB_gtInfo( HB_GTI_WINTITLE, HB_OEMTOANSI(cTxt) ) // Заголовок окна // Добавляю иконку к головному окну. IF !Empty(cIconFile) HB_gtInfo( HB_GTI_ICONFILE, cIconFile ) // Иконка из файла ресурсов ENDI RETU [/pre2] Код терминала gtwvt.c радикально поменялся и сейчас ни иконка не отражается, а заголовок "pWind(cgMyIdEga+" ("+cgObosName+")"+Spac(10)+cpCapt,"hle.ico")", cpCapt="УС Лэнд:ЕГАИС (УСЕга)... Версия 11 ноября 2021 г." при каждом запуске программы меняяется и отражается сокращенно до нескольких символов Что мне нужно поменять? З.Ы. И цветовая гамма поменялась "черный на красный" - почему?

Dima: AndreyZh пишет: HB_gtInfo( HB_GTI_ICONFILE, cIconFile ) // Иконка из файла ресурсов это не из ресурса а из файла на диске. У меня так в Harbour без X Hb_GtInfo( HB_GTI_ICONRES , cIconRes ) Что касается палитры , не знаю как в X а в Harbour попробуй сделать так Hb_GtInfo( HB_GTI_PALETTE,{0, 8716288, 34048, 8750336, 133, 8716421, 34181, 13027014, 6316128, 16711680, 6356832, 16777056, 2490616, 16736511, 65535, 16777215})

AndreyZh: Dima палитра восстановилась... а как с русским текстом заголовка? с иконкой у меня какой-то косяк нарисовался - поразбираюсь


Dima: Андрей не знаю как в X в Harbour без всяких перекодировок делаю так hb_GTInfo( HB_GTI_WINTITLE, "~-=Проверка=-~ ") кодовая страница у меня установлена hb_cdpSelect( "RU866" ) и терминал WVT (WVG)

AndreyZh: Dima не помогает... Думал что данная библиотека одна для Harbour & xHarbour. Может что подскажет... в С как "свинья в апельсинах" Старый модуль [pre2] case HB_GTI_WINTITLE: { char * szTitle = NULL; if( hb_gt_wvt_GetWindowTitle( pWVT->hWnd, &szTitle ) ) pInfo->pResult = hb_itemPutCPtr( pInfo->pResult, szTitle, strlen( szTitle ) ); else pInfo->pResult = hb_itemPutC( pInfo->pResult, NULL ); if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) hb_gt_wvt_SetWindowTitle( pWVT->hWnd, hb_itemGetCPtr( pInfo->pNewVal ) ); break; }[/pre2] Новый модуль [pre2] case HB_GTI_WINTITLE: pInfo->pResult = HB_ITEMPUTSTR( pInfo->pResult, pWVT->lpWindowTitle ); if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) { hb_strfree( pWVT->hWindowTitle ); pWVT->lpWindowTitle = HB_ITEMGETSTR( pInfo->pNewVal, &pWVT->hWindowTitle, NULL ); if( pWVT->hWnd ) SetWindowText( pWVT->hWnd, pWVT->lpWindowTitle ); } break;[/pre2]

Dima: hb_GTInfo( HB_GTI_WINTITLE....... объявлено после установки кодовой страницы или до ?

AndreyZh: Dima пишет: hb_GTInfo( HB_GTI_WINTITLE....... объявлено после установки кодовой страницы или до ? После

AndreyZh: Dima сейчас слабал отдельную, очищенную от всего программу только для теста hb_GTInfo - заголовок на русском и иконка отражается правильно... Буду изучать, что в программах не соответствует данным "эталонам": [pre2] #include "hbgtinfo.ch" * --------------------------------------------------------------------------------------------------- * Головной модуль программы PROC Main() LOCA nW:=0, nH:=0 // Глобальные системные установки пакета. SET DATE GERMAN SET DELE ON SET ESCA ON SET SCOR OFF SET WRAP ON SET CENT ON // Руссифицирую - работа с кириллецей REQUEST HB_CODEPAGE_RU866 HB_SetCodePage("RU866") // Блок для терминала WVT - якобы быстрее работает в Win98 ANNOUNCE HB_GTSYS REQUEST HB_GT_WVT REQUEST HB_GT_WVT_DEFAULT HB_gtInfo( HB_GTI_CLOSABLE, .F. ) // Блокирую крестик HB_gtInfo( HB_GTI_CODEPAGE,255 ) // Кодовая страница HB_gtInfo( HB_GTI_FONTNAME, "Lucida Console" ) // Шрифт экрана HB_gtInfo( HB_GTI_FONTQUALITY, 3 ) // Наилучшее качество шрифта. // Размер шрифта (максимальный) подбираю в зависимости от разрешения. Иной порядок НЕ РАБОТАЕТ nW := 1280/wvt_GetScreenWidth() // Коеф для ширины экрана nH := 1024/wvt_GetScreenHeight() // Коеф для высоты экрана HB_gtInfo( HB_GTI_FONTWIDTH, 15/nW ) // 1 15 (16)| На полный HB_gtInfo( HB_GTI_FONTSIZE, 36/nH ) // 2. 36 Шрифт размер (38)| экран с размером // Определяю сразу окно 25*80 символов, иначе нужна дополнительная настройка SetMode(25,80) //*** Отрисовываю заголовок окна Hb_GtInfo( HB_GTI_PALETTE,{0, 8716288, 34048, 8750336, 133, 8716421, 34181, 13027014, 6316128, 16711680, 6356832, 16777056, 2490616, 16736511, 65535, 16777215}) HB_gtInfo( HB_GTI_WINTITLE, HB_OEMTOANSI(" Заголовок окна Windows и иконка") ) // Заголовок окна HB_gtInfo( HB_GTI_ICONFILE, "test.ico" ) // Иконка текущего каталога CLS WAIT "ТЕСТ - Нажмите любую клавишу" Inkey(0) RETU [/pre2]

Dima: AndreyZh пишет: Dima сейчас слабал отдельную, очищенную от всего программу только для теста hb_GTInfo Все правильно AndreyZh пишет: HB_gtInfo( HB_GTI_FONTQUALITY, 3 ) я ставлю 4 , так как с 3 , шрифт погрызанный какой то (присмотрись) AndreyZh пишет: HB_gtInfo( HB_GTI_WINTITLE, HB_OEMTOANSI(" Заголовок окна Windows и иконка") ) Странно , у меня и без HB_OEMTOANSI все нормально показывает , правда в Harbour AndreyZh пишет: Иной порядок НЕ РАБОТАЕТ Работает [pre2] WVG_setmode(25,80) // не нравится название , придумай своё :) Func WVG_setmode(nrow,ncol) local ret:=.f. 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)) ret:=SetMode(nRow,nCol) cls return ret [/pre2]

Andrey: Для терминалки делал ещё в 2012 году. Может пригодиться... https://cloud.mail.ru/public/unmS/tu7RbbpXy И ещё - https://cloud.mail.ru/public/Khyo/5YuW4H4WJ

AndreyZh: Andrey пишет: Может пригодиться... Скачал, но можно очень кратко - чем эти разработки могут быть полезными?

AndreyZh: Dima Andrey Спасибо за содействие! Однако - в проблеме, обрисованной выше не я дурак, а глюк xHarbour, а возможно и Harbour, т.к. hb_GTInfo скорее всего очень близко по поведению. Авось будет полезно? 1. Когда прямо пишу текст в заголовок окна, пусть даже через свою функцию pWind("Заголовок","hle.ico") он отражается корректно... прямо, как в тестовом примере 2. Когда передаю выражение возвращающее корректное символьное значение. В программе: pWind(cgMyIdEga+" ("+cgObosName+")"+Spac(10)+cpCapt,"hle.ico") отражается козябяка… и более того программа остаётся в памяти после выхода и мешает повторной сборке 3. Если до вызова описания заголовка с выражение вызову отражение (активацию) русского языка... т.е. последовательность: @ 0,0 SAY "Рус" pWind(cgMyIdEga+" ("+cgObosName+")"+Spac(10)+cpCapt,"hle.ico") Всё отражается корректно Причем, если вызываю @ 0,0 SAY " ", то это не влияет на уборку козябяков Результат на скрине: На двух картинках проверка - HB_gtInfo( HB_GTI_FONTQUALITY, х ) на верхней с 3 (чуть толще, как мне кажется), а на второй с 4... Попробую проверить читабельность на юзерах … и продолжу искать грабельки в свежем компиляторе

SergKis: AndreyZh В WVT ставлю для лат. языка ( hb3.2 )[pre2] hb_gtInfo( HB_GTI_CODEPAGE, 866 ) hb_cdpSelect( "LV866" ) hb_gtInfo( HB_GTI_ICONRES, 1001) ... МиниГуи hb_cdpSelect("LV866") ; hb_setTermCP("LV866") [/pre2] prg тексты в кодировке LV866 набираю в hbedit.exe (своя сборка с LV866) Для RU866 должно быть похоже, наверно PS все ANNOUNCE HB_GTSYS REQUEST HB_GT_WVT REQUEST HB_GT_WVT_DEFAULT и т.д. делаю до FUNCTION Main() может это не важно, но как то в одном месте, не разбрасывая по коду, удобнее по мне

AndreyZh: Как можно понять, где ошибка компиляции? - лог: Подскажите плиз? Lines 2647, Functions/Procedures 9, pCodes 18684 xHarbour 1.2.3 Intl. (SimpLex) (Build 20201212) Copyright 1999-2020, http://www.xharbour.org http://www.harbour-project.org/ Compiling 'PRINTUPD.PRG'... Generating C source output to 'OBJ\OBJA\PRINTUPD.c'... Done. Building object module for 'OBJ\OBJA\PRINTUPD.c' using C compiler 'BCC32' as defined in 'c:\xharbour\bin\harbour.cfg'... Exec: BCC32 -c -D__EXPORT__ -IC:\XHB7432\include -d -LC:\XHB7432\lib -oOBJ\OBJA\PRINTUPD.obj OBJ\OBJA\PRINTUPD.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland OBJ\OBJA\PRINTUPD.c: Done. Deleting: "OBJ\OBJA\PRINTUPD.c" Done. Lines 1733, Functions/Procedures 4, pCodes 9883 xHarbour 1.2.3 Intl. (SimpLex) (Build 20201212) Copyright 1999-2020, http://www.xharbour.org http://www.harbour-project.org/ Compiling 'SCHPRINT.PRG'... 1 error No code generated

AndreyZh: Подскажите пожалуйста - может некую опцию компилятора включить?

AndreyZh: Проблемные модули прогнал через harbour /ic:\xharbour\include /s SCHPRINT.PRG каждый... Может быть есть более простой способ?

AndreyZh: Писец подкрался незаметно... Размещаю наблюдение, как информацию для размышления. Т.к. постоянно нужно помогать пользователям с проблемами оставил сборку системы на "старом" xHb, как оказалось не настолько старом 1.2.1 от 2010, ну и "развлекаюсь" доделками и тестированием режимов в сборке системы на xHb 1.3.1 от 12.2020г. Система на DBF+NTX и очень быстрая при работе с БД. Советы по SQL не интересны, т.к. работаем через "удаленный рабочий стол" и было очень много сравнений скорости, как с 1С MSSQL, так и запросами в отчетных системах. Очень случайно, выискивая косяки увидел, как показалось, что новый xHb работает с БД медленнее? Провел замеры на долгих операциях построения сложных отчетов, где размер анализируемой БД в 5 раз превышает размер Ram и оказался в шоке... По всем видам отчетов программа на "новом" xHb работает на 33% медленнее, а это бесконечно тормознее, учитывая огромные мои усилия по увеличению быстродействия системы! Доказательство на одном из отчетов на скрине... и думаю мало кто пытался так сравнивать инструменты?

Dima: Время в чём чч:мм или мм:cc ?

AndreyZh: Dima пишет: Время в чём чч:мм или мм:cc ? минуты и секунды... к счастью нет "часовых" отчетов и режимов. БД производства - от 1000 до 1700 отгрузок в сутки

Dima: AndreyZh Остатки на дату , не простой отчёт (в плане построения по времени ) , 2-3 минуты для построения это нормально. У меня уходит больше времени: кол-во складских карточек около 50 000 + общий движняк по ним в другой базе лежит и там 10 лямов движухи записей. Тут конечно важно как структура базы устроена.... Покажи примерно как устроена складская картотека у тебя и как примерно строится отчет , в том числе остатки на дату , движение за дату, ну если не сложно



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