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

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

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

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Andrey: Вспомнил, как делал раньше. Только запрос не делал, из-за этого и непонятно было как делать.[pre2] bDelete := { | nAt, oBrw | ItogoNN(oBrw) } oBrw1:SetDeleteMode( .T., .F., bDelete ) // здесь включаем клавишу DEL !!![/pre2]

gfilatov2002: SergKis пишет: DrawIconEx( FormHandle, Col, Row, LoadIconByName( icon, w, h ), w, h, rgb, .T. ) Восьмой параметр этой функции, выделенный цветом, управляет удалением иконки, которая была загружена функцией LoadIconByName()

SergKis: gfilatov2002 Спасибо, упустил.


SergKis: gfilatov2002 Предлагаю поправить [pre2] METHOD DeleteRow( lAll, lUpStable ) CLASS TSBrowse Local lRecall, nAt, nRowPos, nRecNo, lRefresh, cAlias, lEval, uTemp ... lRecall := !Set( _SET_DELETED ) DEFAULT lUpStable := !lRecall If !::lIsTxt ... If !( "SQL" $ ::cDriver ) ( cAlias )->( DbUnlock() ) EndIf /* ::nLen := ( cAlias )->( Eval( ::bLogicLen ) ) If lUpStable ( cAlias )->( DbSkip() ) lRefresh := ( cAlias )->( EOF() ) ( cAlias )->( DbSkip( -1 ) ) ::nRowPos -= iif( lRefresh .and. ; ! ( cAlias )->( BoF() ), 1, 0 ) ::Refresh( .T. ) EndIf */ ElseIf lRecall ( cAlias )->( DbRecall() ) ( cAlias )->( DbUnlock() ) EndIf ::nLen := ( cAlias )->( Eval( ::bLogicLen ) ) If lUpStable ( cAlias )->( DbSkip() ) lRefresh := ( cAlias )->( EOF() ) ( cAlias )->( DbSkip( -1 ) ) ::nRowPos -= iif( lRefresh .and. ; ! ( cAlias )->( BoF() ), 1, 0 ) ::Refresh( .T. ) EndIf If ::lCanAppend .and. ::nLen == 0 ... [/pre2] Использовать, например, на индексе с FOR в котором есть Deleted() : :SetDeleteMode( .T., .F., {|| AlertYesNo(iif((oBrw:cAlias)->(OrdSetFocus()) == "DEL", ; "Восстановить", "Удалить")+" запись в таблице ?", "Подтверждение") } )

gfilatov2002: SergKis пишет: Предлагаю поправить /* ::nLen := ( cAlias )->( Eval( ::bLogicLen ) ) If lUpStable ( cAlias )->( DbSkip() ) lRefresh := ( cAlias )->( EOF() ) ( cAlias )->( DbSkip( -1 ) ) ::nRowPos -= iif( lRefresh .and. ; ! ( cAlias )->( BoF() ), 1, 0 ) ::Refresh( .T. ) EndIf */ т.е. перенести этот код ниже, чтобы учитывать восстановление записи также. Сделал, конечно. Благодарю за помощь

gfilatov2002: Подготовил 5-ю бету для новой сборки 20.06 со следующим списком изменений: [pre2] * Fixed: The back color of a TAB control was not changed at runtime. Problem was reported by Ivanil Marcelino <ivanil/at/linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\TAB) * Fixed: Pacified the C-warning "cast-function-type" in the MiniGUI core (was passed MinGW GNU C 10.1): - added the auxiliary C-function wapi_GetProcAddress(). It was a postponed modification. Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: Added the useful function HMG_SetMenuTheme( [ nType ][, cFormName ] ) for setting of the predefined menu themes, where the 1st parameter nType may have the following values: - MNUCLR_THEME_DEFAULT; - MNUCLR_THEME_XP; - MNUCLR_THEME_2000; - MNUCLR_THEME_DARK. Requested by Verchenko Andrey <verchenkoag/at/gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\MenuEx) * Updated: Synchronized Extended HMG for compatibility with Official HMG: - New: function GetFormNameByHandle( hWnd, @cFormName, ; @cFormParentName ) --> Return nFormIndex; - New: function GetControlNameByHandle ( hWnd, @cControlName, ; @cFormParentName ) --> Return nControlIndex. Based upon a contribution of Claudio Soto <srvet/at/adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Basic\MoveResizeControl) * New: 'HbCrypto' library contains (see source in folder \Source\HbCrypto): - Harbour interface to bcrypt password hashing; - BLAKE2s function wrapper (fast secure hash); - ED25519 wrappers; - Harbour interface to PBKDF2 password hashing; - Harbour interface to scrypt password hashing; - SHA3 function wrappers (secure hash). Based upon a contribution of Viktor Szakats (borrowed from 3.4 fork). Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'Bos Taurus' Graphics Library (see source in folder \Source\BosTaurus): - fixed the MinGW C-warning "cast-function-type". Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'HMG Debugger' library: - adapted to the recent Minigui core changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see source in folder \Source\Debugger) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - minor correction of a font handling in the method AddSuperHead(); - minor correction of a refreshing in the method DeleteRow(); - minor correction of a phantom column's painting in the method DrawSelect(). Contributed by Sergej Kiselev. * Updated: HbSQLite3 library: - update for using SQLITE3 latest version 3.32.2. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * Updated: 'Print Pie Graph' sample: updated the data for May 2020. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo.prg in folder \samples\Basic\GraphPrint) * Updated: The following samples were revised for compatibility with the recent Minigui modification: - menudemo2.prg in folder \samples\Basic\Menu; - \samples\Advanced\MenuEx; - \samples\Advanced\SetThemes; - \samples\Advanced\TransparentIcons. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'Quick Browse Generator' utility: - adapted to the recent Minigui core changes. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\QBGen) [/pre2] Благодарю за ваше внимание

gfilatov2002: P S По просьбе Андрея расширил возможности новой функции HMG_SetMenuTheme() по определению пользовательской темы меню. Синтаксис: HMG_SetMenuTheme( [ nType ][, cFormName ][, aUserDefined ] ) Пример определения массива aUserDefined: FUNCTION GetWin7Theme() LOCAL aUserDefined := Array( 24 ) aUserDefined[ MNUCLR_MENUBARBACKGROUND1 ] := GetSysColor( 15 ) aUserDefined[ MNUCLR_MENUBARBACKGROUND2 ] := RGB( 211, 218, 237 ) aUserDefined[ MNUCLR_MENUBARTEXT ] := RGB( 0, 0, 0 ) aUserDefined[ MNUCLR_MENUBARSELECTEDTEXT ] := RGB( 0, 0, 0 ) aUserDefined[ MNUCLR_MENUBARGRAYEDTEXT ] := GetSysColor( 17 ) aUserDefined[ MNUCLR_MENUBARSELECTEDITEM1 ] := RGB( 174, 206, 246 ) aUserDefined[ MNUCLR_MENUBARSELECTEDITEM2 ] := RGB( 174, 206, 246 ) aUserDefined[ MNUCLR_MENUITEMTEXT ] := GetSysColor( 7 ) aUserDefined[ MNUCLR_MENUITEMSELECTEDTEXT ] := GetSysColor( 7 ) aUserDefined[ MNUCLR_MENUITEMGRAYEDTEXT ] := GetSysColor( 17 ) aUserDefined[ MNUCLR_MENUITEMBACKGROUND1 ] := RGB( 240, 240, 240 ) aUserDefined[ MNUCLR_MENUITEMBACKGROUND2 ] := RGB( 240, 240, 240 ) aUserDefined[ MNUCLR_MENUITEMSELECTEDBACKGROUND1 ] := RGB( 232, 238, 246 ) aUserDefined[ MNUCLR_MENUITEMSELECTEDBACKGROUND2 ] := RGB( 232, 238, 246 ) aUserDefined[ MNUCLR_MENUITEMGRAYEDBACKGROUND1 ] := RGB( 240, 240, 240 ) aUserDefined[ MNUCLR_MENUITEMGRAYEDBACKGROUND2 ] := RGB( 240, 240, 240 ) aUserDefined[ MNUCLR_IMAGEBACKGROUND1 ] := RGB( 241, 241, 241 ) aUserDefined[ MNUCLR_IMAGEBACKGROUND2 ] := RGB( 241, 241, 241 ) aUserDefined[ MNUCLR_SEPARATOR1 ] := RGB( 224, 224, 224 ) aUserDefined[ MNUCLR_SEPARATOR2 ] := RGB( 255, 255, 255 ) aUserDefined[ MNUCLR_SELECTEDITEMBORDER1 ] := RGB( 174, 206, 246 ) aUserDefined[ MNUCLR_SELECTEDITEMBORDER2 ] := RGB( 174, 206, 246 ) aUserDefined[ MNUCLR_SELECTEDITEMBORDER3 ] := RGB( 174, 206, 246 ) aUserDefined[ MNUCLR_SELECTEDITEMBORDER4 ] := RGB( 174, 206, 246 ) RETURN aUserDefined Использование: HMG_SetMenuTheme( MNUCLR_THEME_USER_DEFINED, , GetWin7Theme() ) Благодарю за ваше внимание

SergKis: gfilatov2002 пишет - MNUCLR_THEME_DEFAULT; - MNUCLR_THEME_XP; - MNUCLR_THEME_2000; - MNUCLR_THEME_DARK. - MNUCLR_THEME_USER_DEFINED Как то сложновато запоминать, может упростить чуток ?[pre2] HMG_SetMenuTheme( "DEFAULT" ) HMG_SetMenuTheme( "XP" ) HMG_SetMenuTheme( "2000" ) HMG_SetMenuTheme( "DARK" ) HMG_SetMenuTheme( "USER", ... ) [/pre2]

gfilatov2002: SergKis пишет: Как то сложновато запоминать Это просто числовые константы: MNUCLR_THEME_DEFAULT = 0; MNUCLR_THEME_XP = 1 ; MNUCLR_THEME_2000 = 2; MNUCLR_THEME_DARK = 3. MNUCLR_THEME_USER_DEFINED = 99 так что можно использовать числа вместо имен

SergKis: gfilatov2002 Можно в сервер примера LetoDbf внести небольшие изменения, для проверки наличия\запуска сервера в памяти на localhost из клиента ? Или обходится своей сборкой ?[pre2] STATIC s_cIniName := "letodb.ini" STATIC s_hMutex := 0 THREAD STATIC s_hWASet PROCEDURE Main( cCommand, cData ) LOCAL oApp LOCAL cMutex := upper( hb_ProgName() ), lMutex IF Empty( cCommand ) AEval({".","\",":","/"," "}, {|cs| cMutex := StrTran(cMutex, cs, "_") }) s_hMutex := wapi_CreateMutex( NIL, NIL, cMutex ) lMutex := ( ! Empty( s_hMutex ) .AND. wapi_GetLastError() == 0 ) IF ! lMutex WrLog( "LetoDBF Server is running. Error "+hb_ntos(wapi_GetLastError())+" mutex "+cMutex ) RETURN ENDIF ENDIF s_cDirBase := hb_DirBase() leto_setDirBase( s_cDirBase ) ... IF cCommand != NIL .AND. Lower( cCommand ) == "stop" IF ! EMPTY( cData ) ... WrLog( "Can't STOP the server at port " + ALLTRIM( STR( oApp:nPort ) ) + " ( not started ? )" ) ENDIF IF ! empty( s_hMutex ) wapi_ReleaseMutex( s_hMutex ) ; s_hMutex := 0 ENDIF ELSEIF cCommand != NIL .AND. Left( Lower( cCommand ), 6 ) == "reload" ... [/pre2]

gfilatov2002: SergKis пишет: Можно в сервер примера LetoDbf внести небольшие изменения Пересобрал сервер с этими изменениями, все работает нормально. Благодарю за помощь

gfilatov2002: Опубликована новая сборка 20.06 для BCC 5.8.2 и компиляторов Harbour и xHarbour. Базовый дистрибутив находится по адресу http://hmgextended.com/files/CONTRIB/hmg-20.06-setup.exe Добавил также архив для бесплатного Embarcadero C++ 10.2 'Tokyo' compiler http://hmgextended.com/files/CONTRIB/hmg2003_bcc102.exe Огромная благодарность Сергею Киселеву за помощь при подготовке этой сборки Для частного использования подготовлены также два дистрибутива, основанные на компиляторе MinGW GNU C версии 10.1.1. Благодарю за ваше внимание

gfilatov2002: Выложил обновление для сборки 20.06 (Update 1) с учетом последних исправлений Базовый дистрибутив для BCC 5.8.2 находится по адресу http://hmgextended.com/files/CONTRIB/hmg-20.06-setup.exe Благодарю за ваше внимание

Andrey: gfilatov2002 пишет: Выложил обновление для сборки 20.06 (Update 1) с учетом последних исправлений Пере собрал свои проги ! Полёт нормальный ! Можно команду SET MULTIPLE OFF WARNING сделать через AlertStop() ?

Haz: Andrey пишет: Можно команду SET MULTIPLE OFF WARNING сделать через AlertStop() ? не надо. Или стандарт или с выбором куда выводить. Дизайн AlertStop() не к любому интерфейсу по фейсу Ps.. Кому нужно будет, могут команду переопределить

Andrey: Haz пишет: Кому нужно будет, могут команду переопределить А как ? Писать свою функцию не хочется. Можно переключатель сделать в стандартной библиотеке ?

Haz: Andrey пишет: А как ? Писать свою функцию не хочется. зачем писать свою. Посмотри как в ch команда транслируется и замени для себя msgstop() на что хочешь.

Andrey: Haz пишет: Посмотри как в ch команда транслируется и замени для себя msgstop() на что хочешь. Не, это не то... Ладно, проехали... Не особо существенно это. Другая проблема достаёт. Под Win 8.1 нет у меня сообщения из функции WaitWindow( cMessage, lNoWait ). Под ХР, 7, 10 всё есть. Нашёл эту функцию в h_windows.prg Сделал отладку и увидел почему так: [pre2] @ iif( IsVistaOrLater(), 4, 7 ), 12 LABEL Message ; WIDTH GetProperty( cFormName, "Width" ) - 24 - GetBorderWidth() ; HEIGHT 18 VALUE cMessage SIZE 10 CENTERALIGN TRANSPARENT END WINDOW ? "hb_osIsWin8()=",hb_osIsWin8() ? "nWidth := GetTextWidth( , '"+cMessage+"')" ? "nWidth := ", nWidth ? GetProperty( cFormName, "Width" ), "<", 2 * nWidth ? GetProperty( cFormName, "Width" ) < 2 * nWidth IF GetProperty( cFormName, "Width" ) < 2 * nWidth SetProperty( cFormName, "Message", "Value", "" ) _DefineTimer( "Timer", cFormName, 100, {|| EfeitoLabel( cMessage ) } ) ENDIF[/pre2] В отладке вот так: [pre2]My test program (2): Запуск второй копии программы / Starting a second copy of the program hb_osIsWin8()= .T. nWidth := GetTextWidth( , 'My test program (2): Запуск второй копии программы / Starting a second copy of the program' ) nWidth := 611 800 < 1222 .T. [/pre2] Исправить в коде это можно ?

Haz: Andrey пишет: Исправить в коде это можно ? Андрей, конечно можно исправить. Напиши Григорию обоснованное исправление и он точно скажет тебе спасибо. Из твоей отладки я вижу, что по условию выдаст пустую строку. Кто и зачем это условие поставил я не задумывался. В принципе исходник простой, разобраться не сложно.

Andrey: А кто нибудь пользовался примером MiniGUI\SAMPLES\Advanced\Decompiler ? А то у меня Decompiler.exe вылетает с ошибкой: [pre2]Application: W:\HB_Project\PROJECT\ТЕСТ\Decompiler.exe Time from start: 0 days 0 hours 0 mins 15 secs Error BASE/1132 Bound error: array access Args: [1] = A { ... } length: 1 [2] = N 2 --------------------------------- Stack Trace --------------------------------- Called from DCP_F80(739) in module: Decompiler.prg Called from DCP_F25(674) in module: Decompiler.prg Called from DCP_SPLIT_CODE(337) in module: Decompiler.prg Called from DECODE_C2PRG(38) in module: Decompiler.prg Called from E2CHD(167) in module: Decompiler.prg Called from (b)MAIN(27) in module: Decompiler.prg Called from _DOCONTROLEVENTPROCEDURE(1901) in module: h_windows.prg Called from EVENTS(1757) in module: h_events.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1514) in module: h_windows.prg Called from MAIN(23) in module: Decompiler.prg [/pre2]



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