Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение) » Ответить

Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)

gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).

Ответов - 90, стр: 1 2 3 4 5 All

SergKis: gfilatov2002 пишет Без проблем Спасибо.

SergKis: gfilatov2002 Предложение:[pre2] 1. CLASS TKeyData ... _METHOD Destroy() ERROR HANDLER ControlAssign ENDCLASS /////////////////////////////////////////////////////////////////////////////// METHOD ControlAssign( xValue ) CLASS TKeyData LOCAL cMessage, uRet, lError cMessage := __GetMessage() lError := .T. If PCOUNT() == 0 uRet := ::Get( cMessage ) lError := .F. ElseIf PCOUNT() == 1 ::Set( SubStr( cMessage, 2 ), xValue ) uRet := ::Get( cMessage ) lError := .F. EndIf If lError uRet := Nil ::MsgNotFound( cMessage ) EndIf RETURN uRet тогда можно так (пример Advanced\Tsb_Basic\demo4.prg line 416) oRec2 := (cAls)->( RecGet() ) nKey2 := oRec2:F0 oRec2:F0 := nKey1 oRec1:F0 := nKey2 ... вместо oRec2 := (cAls)->( RecGet() ) nKey2 := oRec2:Get('F0') oRec2:Set('F0', nKey1) oRec1:Set('F0', nKey2) ... [/pre2] 2. предлагаю _LogFile(...) поправить, что бы команда ? не давала на вывод NIL [pre2] *-----------------------------------------------------------------------------* #ifndef __XHARBOUR__ FUNCTION _LogFile( lCrLf, ... ) #else FUNCTION _LogFile( ... ) #endif *-----------------------------------------------------------------------------* LOCAL hFile, i, xVal, cTp LOCAL aParams := hb_AParams() LOCAL nParams := Len( aParams ) LOCAL cFile := hb_defaultValue( _SetGetLogFile(), GetStartUpFolder() + "\_MsgLog.txt" ) #ifdef __XHARBOUR__ LOCAL lCrLf #endif IF !Empty( cFile ) hFile := iif( File( cFile ), FOpen( cFile, FO_READWRITE ), FCreate( cFile, FC_NORMAL ) ) IF hFile == F_ERROR RETURN .F. ENDIF FSeek( hFile, 0, FS_END ) #ifdef __XHARBOUR__ IF nParams > 0 lCrLf := aParams[ 1 ] ENDIF #endif IF ( lCrLf := hb_defaultValue( lCrLf, .T. ) ) FWrite( hFile, CRLF, 2 ) ENDIF IF nParams == 2 .and. HB_ISNIL(aParams[ 2 ]) .and. lCrLf ELSEIF nParams > 1 // IF lCrlf // FWrite( hFile, CRLF, 2 ) // ENDIF FOR i := 2 TO nParams xVal := aParams[ i ] cTp := ValType( xVal ) IF cTp == 'C' ; xVal := iif( Empty( xVal ), "'" + "'", Trim( xVal ) ) ELSEIF cTp == 'N' ; xVal := hb_ntos( xVal ) ELSEIF cTp == 'L' ; xVal := iif( xVal, ".T.", ".F." ) #ifdef __XHARBOUR__ ELSEIF cTp == 'D' ; xVal := DToC( xVal ) #else ELSEIF cTp == 'D' ; xVal := hb_DToC( xVal, 'DD.MM.YYYY' ) #endif ELSEIF cTp == 'A' ; xVal := "ARRAY[" + hb_ntos( Len( xVal ) ) + "]" ELSEIF cTp == 'H' ; xVal := "HASH[" + hb_ntos( Len( xVal ) ) + "]" ELSEIF cTp == 'B' ; xVal := "'" + "B" + "'" ELSEIF cTp == 'T' ; xVal := hb_TSToStr( xVal, .T. ) ELSEIF cTp == 'U' ; xVal := 'NIL' ELSE ; xVal := "'" + cTp + "'" ENDIF FWrite( hFile, xVal + Chr( 9 ) ) NEXT // ELSE // FWrite( hFile, CRLF, 2 ) ENDIF FClose( hFile ) ENDIF RETURN .T. [/pre2]

gfilatov2002: SergKis пишет: Предложение: 1-й пункт принят без вопросов, а со вторым - неясно, чем не угодил тип NIL


SergKis: gfilatov2002 пишет неясно, чем не угодил тип NIL "Старые" тексты с set alternate ... и исп. команд ? ... - все ок, но команды ? "портят" протокол\отчет. Только это

gfilatov2002: SergKis пишет: команды ? "портят" протокол\отчет Тогда надо заменить ? на ? "" например, с помощью препроцессора P.S. Нет, препроцессор в этом случае не поможет Поэтому 2-й пункт принят также. Благодарю за помощь

gfilatov2002: Завершена подготовка новой сборки 18.11, последней в этом году Кратко, что нового: * Fixed a problem with button's focus at a window activation when this button was defined with the DEFAULT clause. * A first TEXTBOX have got a control's content selection by default when a focus is received at a window activation. It is not required a calling of Setfocus method at form's 'On Init' event anymore (look at the InputBox() and InputWindow() functions). * Added an additional checking before a calling of the C-function _SetFont() due to a program crash in some situations (introduced in the build 16.12). * The optimized ON SIZE event's behavior with using of the auxiliary WinAPI events WM_ENTERSIZEMOVE and WM_EXITSIZEMOVE. * A Label control supports a codeblock type for assigning to 'Value' property, e.g. @ ... LABEL ... VALUE { || ... } Form.Label.Value := { || ... } * Modified handling of the WM_NEXTDLGCTL message according to WinAPI specification (synchronized with Official HMG). * Added the Harbour client library for access to LetoDBf server RDDLeto with the corresponding header files. * Updated and improved the TSBrowse, HbXML and HMG_HPDF libraries. * Updated Harbour Compiler 3.2.0dev to a recent Git-version. (ChangeLog Last Entry: 2018-11-16 16:33) * Added the new interesting samples: - Calendar; - Mandelbrot Fractal; - My Player sample is based upon the VLC ActiveX Control; - MiniGUI DataBase Utility (Inspired by EMAG Software DBU at https://www.emagsoftware.it) and updated some Advanced samples. Особая благодарность SergKis и Haz за их постоянную помощь в совершенствовании TsBrowse Выпуск последующих сборок отложен на неопределенное время...

Andrey: gfilatov2002 пишет: * The optimized ON SIZE event's behavior with using of the auxiliary WinAPI events WM_ENTERSIZEMOVE and WM_EXITSIZEMOVE. А новые свойства окна будут ? [pre2] DEFINE WINDOW test ; ...... MAIN TOPMOST ; ON MAXIMIZE ( zzzz() ) ; ON SIZE ( zzzz() ) ; ON SIZE_BEGIN ( хххх() ) ; ON SIZE_END ( хххх() ) ;[/pre2] Можно оставить по старому и новому варианту, программист сам будет решать, что использовать.

gfilatov2002: Выпущена новая сборка 18.11 для BCC 5.5.1 и компиляторов Harbour и xHarbour. Установщик дистрибутива находится по адресу http://hmgextended.com/files/CONTRIB/hmg-18.11-setup.exe Также имеются следующие сборки для Си-компиляторов: - MinGW 8.1.0 32-bit для Harbour 3.2.0dev; (есть в наличии) - MinGW 8.1.0 64-bit для Harbour 3.4.0dev; (есть в наличии) - MS VisualC 2017 32-bit для Harbour 3.2.0dev; (путь и имя архива не изменял) - MS VisualC 2017 64-bit для Harbour 3.2.0dev; (путь и имя архива не изменял) - Borland/Embarcadero C++ 7.3 (32-bit) для Harbour 3.4.0dev. (под заказ). Благодарю за Ваше внимание

SergKis: gfilatov2002 Можно собрать вариант сборки, как раньше, на 7z

gfilatov2002: SergKis пишет: вариант сборки, как раньше, на 7z Да, конечно. Кинул прямую ссылку в Л.С.

SergKis: gfilatov2002 Спасибо.

SergKis: gfilatov2002 Предлагаю на on size сделать 2-а вызова процедуры, а не один, как сейчас. Большой разницы нет, но немного удобней расчеты производить: 1-ый раз запоминаем старые значения (коэффициенты) 2-ой считаем новые Изменения:[pre2] //********************************************************************** CASE WM_ENTERSIZEMOVE //********************************************************************** IF ! _HMG_AutoAdjust lEnterSizeMove := Nil // .T. _HMG_MouseState := 1 ENDIF // EXIT //********************************************************************** CASE WM_SIZE //********************************************************************** IF ( ISNIL(lEnterSizeMove) .OR. ! lEnterSizeMove ) .OR. ! iswinnt() // IF ! lEnterSizeMove .OR. ! iswinnt() IF ISNIL(lEnterSizeMove) lEnterSizeMove := .T. ENDIF ControlCount := Len ( _HMG_aControlHandles ) ... //********************************************************************** CASE WM_EXITSIZEMOVE //********************************************************************** lEnterSizeMove := .F. IF ! _HMG_AutoAdjust _HMG_MouseState := 0 SendMessage ( hWnd , WM_SIZE , 0 , 0 ) ENDIF EXIT ... тогда результат процедуры в on size выглядит Start - Tsb_export987bcc.exe Number of records in the table: 1005 Windows 8.1 6.3 Harbour MiniGUI Extended Edition 18.11 (32-bit) . RESIZETABLE VK_LBUTTON -127 _HMG_MouseState 1 // первый раз RESIZETABLE VK_LBUTTON 1 _HMG_MouseState 0 // второй раз RESIZETABLE VK_LBUTTON -128 _HMG_MouseState 1 // первый раз RESIZETABLE VK_LBUTTON 0 _HMG_MouseState 0 // второй раз ... Пример процедуры on resize STATIC FUNCTION ResizeTable(oBrw) ? procname(), 'VK_LBUTTON', WAPI_GETKEYSTATE(VK_LBUTTON), '_HMG_MouseState', _HMG_MouseState IF _HMG_MouseState > 0 // первый раз ELSE // второй раз ENDIF ... [/pre2]

gfilatov2002: SergKis пишет: Предлагаю на on size сделать 2-а вызова процедуры Принято с благодарностью Два прохода для этого события решают также проблему перерисовки контролов, которая иногда возникает при быстром изменении размеров формы

Andrey: Поставил новую версию 18.11 Мой большой проект перестал собираться. Выдаёт ошибку: OBJ\use_LetoDb.c: Turbo Incremental Link 5.66 Copyright (c) 1997-2002 Borland Error: Unresolved external '_HB_FUN_LETO_SET' referenced from W:\HB_PROJECT\...\OBJ\USE_LETODB.OBJ Откатил назад на версию 18.10 - проект собирается !!! Использую Leto DB Server v.2.15b3 с 2015 года. Отлично работает, переходить на новую версию нет надобности. Я так понимаю функция LETO_SET берется из MiniGui\Harbour\include\RDDLETO.CH Т.е. появилась поддержка LetoDb. Можно ли починить МиниГуи версию 18.11 для правильной сборки ? Т.е. как задать правило в MyPrj.hbp для подключения сначала моих ch - W:\HB_Project\MyPrj\Include\rddleto.ch и моей библиотеки W:\HB_Project\MyPrj\rddleto.lib Хотя я в MyPrj.hbp прописал так [pre2]# включить путь к своим *.ch и *.fmg -incpath=Include -incpath=Source [/pre2]Но первым берется всё равно MiniGui\Harbour\include\RDDLETO.CH Можно конечно поступить проще, тупо удалить файлы из поставки минигуи RDDLETO.CH и RDDLETO.LIB, но хочется разобраться как делать правильно.

SergKis: Andrey пишет Можно ли починить МиниГуи версию 18.11 для правильной сборки ? 1 попробуй у себя ставить #define CaseSensitive // отключить #define set(...) LETO_SET(...) возможно пройдет проект на новой версии RddLeto 3.0 2. замени в MiniGui\Harbour\Lib\RDDLETO.LIB из версии Leto 2.0 3. замени в MiniGui\Harbour\Include\RDDLETO.CH из версии Leto 2.0

SergKis: PS по первому пункту, можно закрыть строки в RDDLETO.CH v.m.3.0[pre2] ... /* redirect for 4 options handled in LETO_SET(), others forward to SET() */ #ifdef CASESENSITIVE // #define set( _HB_SETTING, XSET ) LETO_SET( _HB_SETTING, XSET ) // #define Set( _HB_SETTING, XSET ) LETO_SET( _HB_SETTING, XSET ) #endif //#define SET( _HB_SETTING, XSET ) LETO_SET( _HB_SETTING, XSET ) [/pre2]

Andrey: SergKis пишет: по первому пункту, можно закрыть строки в RDDLETO.CH v.m.3.0 А как сделать, чтобы в prg брался ВСЕГДА мой ch - W:\HB_Project\MyPrj\Include\rddleto.ch ?

SergKis: Andrey Посмотри и выполни пункты 2 и 3 Будет все твое

PSP: Andrey пишет: А как сделать, чтобы в prg брался ВСЕГДА мой ch - W:\HB_Project\MyPrj\Include\rddleto.ch ? #include "W:\HB_Project\MyPrj\Include\rddleto.ch"

SergKis: PS Если хочешь разделить версии leto, переименуй свои rddleto.ch -> rddleto2.ch rddleto.lib -> rddleto2.lib и подключай их



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