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

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

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: gfilatov2002 пишет: Попробуй библиотеку по ссылке Спасибо ! Но это времянка... Нужен ключ какой то сделать. Одним нравиться без прыганья, другим наоборот.

SergKis: Andrey пишет:Нужен ключ какой то сделать. Одним нравиться без прыганья, другим наоборот. для прыганья можно ставить на колонку: oBrw5:aColumns[2]:nHAlign := {|nCol,oBrw| If( nCol == oBrw:nColOrder, DT_LEFT, oBrw:aColumns[nCol]:nHAlign ) } или oBrw5:aColumns[2]:nHAlign := {|nCol,oBrw| If( nCol == oBrw:nColOrder, DT_LEFT, DT_CENTER ) }

Andrey: SergKis пишет: для прыганья можно ставить на колонку: То что надо ! Спасибо !


SergKis: gfilatov2002 Для управления сортировкой колонок при ::lIsArr == .T. (включить\выключить) более простым способом (без bSetOrder) предлагаю использовать переменную колонки (TsColumn) lIndexCol, при работе с массивом она не используется, т.е. oCol:lIndexCol := .T.\.F. - сортируется\нет колонка. Изменения следующие: [pre2] METHOD SetOrder( nColumn, cPrefix, lDescend ) CLASS TSBrowse ... ElseIf ::lIsArr If nColumn <= Len( ::aArray[ 1 ] ) .and. oColumn:lIndexCol ::cOrderType := ValType( ::aArray[ ::nAt, nColumn ] ) ... METHOD New( cHeading, bData, cPicture, aColors, aAlign, nWidth, ; lBitMap, lEdit, bValid, lNoLite, cOrder, cFooting, ; bPrevEdit, bPostEdit, nEditMove, lFixLite, a3DLook, ; bWhen, oBrw, cData, cWhen, cValid, cPrevEdit, cPostEdit, cMsg, cToolTip, lTotal, ; lSpinner, bUp, bDown, bMin, bMax, cError, cSpcHeading,; cDefData, cName , lIndexCol ) CLASS TSColumn ... Default cHeading := "" , ; ... cName := "" If ! empty(oBrw) .and. oBrw:lIsArr // для работы по старому алгоритму - все колонки сортируются lIndexCol := .T. EndIf .. [/pre2] выделенным добавки тогда в программе можно колонкам без сортировки (массив) поставить oCol:lInexCol := .F. попробовал на своей версии - сработало. Может что не учел ?

SergKis: PS поправочка в последнем добавлении If ... ::lIndexCol := .T.

gfilatov2002: SergKis пишет: предлагаю использовать переменную колонки (TsColumn) lIndexCol Принимается

SergKis: gfilatov2002 пишет:Принимается тогда можно добавить обработку lNoDescend (для одинаковости с ::lIsDbf == .T.) [pre2] ElseIf ::lIsArr If nColumn <= Len( ::aArray[ 1 ] ) .and. oColumn:lIndexCol ::cOrderType := ValType( ::aArray[ ::nAt, nColumn ] ) //V90 If nColumn == ::nColOrder .or. Empty( oColumn:cOrder ) .or. oColumn:lDescend == Nil If lDescend == Nil lDescend := If( Empty( oColumn:cOrder ) .or. oColumn:lDescend == Nil, .F., ! oColumn:lDescend ) EndIf If oColumn:lNoDescend lDescend := .F. EndIf oColumn:lDescend := lDescend ::nColOrder := nColumn ... [/pre2]

gfilatov2002: SergKis пишет: можно добавить обработку lNoDescend OK

SergKis: gfilatov2002 Правка [pre2] METHOD DrawLine( xRow ) CLASS TSBrowse ... было ( line 2913 ) If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" .and. ! Empty( ::aBitMaps ) If uData > 0 .and. uData <= Len(::aBitMaps) uBmpCell := ::aBitMaps[ uData ] EndIf nAlign := nMakeLong( oColumn:nAlign, oColumn:nAlign ) uData := "" ElseIf Empty( cPicture ) uData := If( Valtype( uData ) != "C", cValToChar( uData ), uData ) Else uData := If( uData == NIL, "", Transform( uData, cPicture ) ) EndIf ... ( line 2969 ) If lCheck Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )} hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ] nAlign := nMakeLong( DT_CENTER, DT_CENTER ) uData := "" ElseIf oColumn:lEmptyValToChar .and. empty(uData) uData := "" EndIf ... стало If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" .and. ! Empty( ::aBitMaps ) If uData > 0 .and. uData <= Len(::aBitMaps) uBmpCell := ::aBitMaps[ uData ] EndIf nAlign := nMakeLong( oColumn:nAlign, oColumn:nAlign ) uData := "" ElseIf ! lCheck .and. oColumn:lEmptyValToChar .and. empty(uData) uData := "" ElseIf Empty( cPicture ) uData := If( Valtype( uData ) != "C", cValToChar( uData ), uData ) Else uData := If( uData == NIL, "", Transform( uData, cPicture ) ) EndIf ... If lCheck Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )} hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ] nAlign := nMakeLong( DT_CENTER, DT_CENTER ) uData := "" EndIf ... METHOD DrawSelect( xRow ) CLASS TSBrowse ... было ( line 3227 ) If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" .and. ! Empty( ::aBitMaps ) If uData > 0 .and. uData <= Len(::aBitMaps) uBmpCell := ::aBitMaps[ uData ] nAlign := nMakeLong( LoWord( nAlign ), nAlign ) uData := "" EndIf ElseIf Empty( cPicture ) uData := If( Valtype( uData ) != "C", cValToChar( uData ), uData ) Else uData := If( uData == NIL, "", Transform( uData, cPicture ) ) EndIf ... стало If nJ == ::nColSel .and. ::uBmpSel != Nil .and. lSelected uBmpCell := ::uBmpSel nAlign := nMakeLong( LoWord( nAlign ), ::nAligBmp ) ElseIf oColumn:lBitMap .and. Valtype( uData ) == "N" .and. ! Empty( ::aBitMaps ) If uData > 0 .and. uData <= Len(::aBitMaps) uBmpCell := ::aBitMaps[ uData ] nAlign := nMakeLong( LoWord( nAlign ), nAlign ) uData := "" EndIf ElseIf ! lCheck .and. oColumn:lEmptyValToChar .and. empty(uData) uData := "" ElseIf Empty( cPicture ) uData := If( Valtype( uData ) != "C", cValToChar( uData ), uData ) Else uData := If( uData == NIL, "", Transform( uData, cPicture ) ) EndIf [/pre2]

gfilatov2002: SergKis Благодарю за поправки, уже сделал эти исправления Но хотелось бы получить также небольшое пояснение по этому поводу

SergKis: gfilatov2002 пишет:пояснение по этому поводу начал делать реальную задачу, получилось nValToChar отрабатывала раньше по тексту и для числа пустого уже uData =='0.00', т.е алгоритм не работал, потому перенес выше по тексту (исключив lCheck==.T.), а в DrawSelect обработка пропущена и в строке с курсором lEmptyValToChar совсем не работал

gfilatov2002: SergKis пишет: начал делать реальную задачу Благодарю за разъяснение, желаю успеха в Ваших делах

fokinal21: Всем доброго здравия! Скажите, а IDE никак не прикручивается к 64 разрядной версии? Или здесь он не катит, нужен другой?

gfilatov2002: Просто к сведению. Выпустил сегодня очередную бета-версию для новой сборки библиотеки. Полный список изменений см. ниже [pre2] * Fixed: The hack in the menu's C-code was guarded for applying at the tray menu closing only. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Modified: The constant _PUBLIC_RELEASE_ is turned ON by default in the header file include\minigui.ch instead of the constant _ZEROPUBLIC_. The internal Public variables will be released at window's and control's destruction. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Replacing the cycles 'For-Next' with 'For Each-Next' for improvement of the speed of the Tab pages updating. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - added a new class TCursor for proper processing of TBROWSE cursor which was defined by user for a whole control. Syntax: TCursor():New( cResCursorName [, cPredefinedCursorName ] ) where the predefined names are "ARROW", "IBEAM", "WAIT", "CROSS" etc. Sample code: oBrw:oCursor := TCursor():New( , "HAND" ) Contributed by Grigory Filatov <gfilatov@inbox.ru> - added handling of the column's order in the ARRAY mode with using of the TSColumn variable oCol:lIndexCol. Contributed by SergKis (see demo at Menu TSBrowse->'Grid form' in folder \samples\Advanced\TSBrowse) - added a new service method GetCellInfo( nRowPos, nCell, lColSpecHd ) Contributed by SergKis (see demo2.prg in folder \samples\Advanced\Tsb_array_2) * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.12.0dev (from 3.11.0). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2016-02-18 17:02): * Fixed: HbZipArc library source code to support the ASCII characters above 128 in the name of files (see in folder \Source\HbZipArc). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * Updated: HMGS-IDE v.1.3.0 Project Manager and Two-Way Visual Form Designer. Contributed by Grigory Filatov <gfilatov@inbox.ru> (look for what's new at changelog.txt in folder \Ide) * New: 'Minigui Modal Form Designer Utility' sample (spanish only). Contributed by Rafael Moran <webrmoran[at]yahool.com> Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\xForm) * New: 'Gregorian Calendar to Microsoft Excel through HMG OLE' sample. Contributed by Danny A. del Pilar <dhaine_adp@yahoo.com>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\GregorianCalendar) * Updated: 'Vista Command Link Button' sample: - added a write only property 'NoteText'. You can set this property at runtime: Win.CLbutton.NoteText := 'New Note' SetProperty( Form, Control, 'NoteText', 'New Note' ) Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\CommandLink) * Updated: 'SendMailReport Enhanced 1.5' sample. Contributed by Pierpaolo Martinello <pier.martinello[at]alice.it> (see in folder \samples\Applications\SendMailReport) [/pre2] Поздравляю всех женщин (-программистов) на форуме с наступающим

SergKis: gfilatov2002 доделел ToolTip на TsBrowse. 1. Работает на всех колонках, строках с индикацией смены nRow, nCol мышой 2. убрал STATIC nToolTip, lToolTip, hToolTip, перенеся их в класс TSB 3. можно задавать ToolTiip так: oBrw:cToolTip := {|oBr,nCol,nRow| "My TBrowse tooltip. Col ="+str(nCol,3)+" Row ="+str(oBr:nRow,3) } aEval(oBrw:aColumns, {|oCol| oCol:cToolTip := {|oBr,nCol,nRow| "My column tooltip. Col ="+str(nCol,3)+" Row ="+str(oBr:nRow,3) } }) Изменения: [pre2] h_tsbrowse.prg было Static nLapsus, hPrvWnd, hWndParent, lToolTip, nToolTip, hToolTip := 0 //V90 ... ///////////////////////////////////////// Function _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight,; ... ParentFormHandle = GetFormHandle (ParentFormName) hToolTip := GetFormToolTipHandle (ParentFormName) oBrw := TSBrowse():New( ControlName, nRow, nCol, nWidth, nHeight,; ... lTransparent, uSelector, lEditable, lAutoCol, aColSel, tooltip) IF ( nColums := Len(oBrw:aColumns) ) > 0 /* BK 18.05.2015 */ ... ///////////////////////////////////////// CLASS TSBrowse FROM TControl ... DATA cToolTip // tooltip when mouse is over Cells ... ///////////////////////////////////////// METHOD New( cControlName, nRow, nCol, nWidth, nHeight, bLine, aHeaders, aColSizes, cParentWnd, ; ... EndIf SetToolTip ( ::hWnd , ::cToolTip , hToolTip ) //JP V90 IF nValue > 0 .AND. nValue <= ::nLen ... ///////////////////////////////////////// METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse Local nI, nIcon, lHeader, lMChange, nFirst, nLast, nDestCol, ; cMsg := ::cMsg, ; nColPixPos := 0, ; lFrozen := .F., ; nColumn := Max( 1, ::nAtCol( nColPix ) ) //V90 Default ::lMouseDown := .F., ; ::lNoMoveCols := .F., ; //V90 ::lDontChange := .F., ; //V90 nToolTip := 0, ; //V90 lToolTip := .F. //V90 If ::lIconView If ( nIcon := ::nAtIcon( nRowPix, nColPix ) ) != 0 If ::nIconPos != 0 .and. ::nIconPos != nIcon ::DrawIcon( ::nIconPos ) EndIf ::nIconPos := nIcon ::DrawIcon( nIcon, .T. ) CursorHand() Return 0 EndIf EndIf If ::nFreeze > 0 For nI := 1 To ::nFreeze nColPixPos += ::GetColSizes()[ nI ] Next If nColPix < nColPixPos lFrozen := .T. EndIf EndIf If ( lHeader := ::GetTxtRow( nRowPix ) == 0 ) .and. ! Empty( ::aColumns ) .and. ; ! Empty( ::aColumns[ nColumn ]:cToolTip ) If nToolTip != nColumn SetToolTip ( ::hWnd , ::aColumns[ nColumn ]:cToolTip , hToolTip ) SysRefresh() EndIf nToolTip := nColumn Else If nToolTip != 0 SetToolTip ( ::hWnd , ::cToolTip , hToolTip ) SysRefresh() endif nToolTip := 0 EndIf lHeader := (::GetTxtRow( nRowPix ) == 0 .or. ::GetTxtRow( nRowPix ) == -2) ... ///////////////////////////////////////// METHOD VertLine( nColPixPos, nColInit, nGapp ) CLASS TSBrowse ... If nColInit != Nil nsCol := nColInit nsWidth := nColPixPos nGap := If( ! Empty( nGapp ), nGapp, 0 ) nsOldPixPos := 0 hWndParent := 0 //V90 hPrvWnd := 0 //V90 lToolTip := .F. //V90 _InvertRect( ::hDC, { 0, nsWidth - ::aColSizes[ nsCol ] - 2, aRect[4], nsWidth - ::aColSizes[ nsCol ] + 2 } ) EndIf ... стало Static nLapsus, hPrvWnd, hWndParent ... ///////////////////////////////////////// Function _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight,; ... ParentFormHandle = GetFormHandle (ParentFormName) oBrw := TSBrowse():New( ControlName, nRow, nCol, nWidth, nHeight,; ... lTransparent, uSelector, lEditable, lAutoCol, aColSel, tooltip) oBrw:hToolTip := GetFormToolTipHandle (ParentFormName) IF ( nColums := Len(oBrw:aColumns) ) > 0 /* BK 18.05.2015 */ ... ///////////////////////////////////////// CLASS TSBrowse FROM TControl ... DATA cToolTip // tooltip when mouse is over Cells DATA hToolTip AS NUMERIC INIT 0 DATA nToolTip AS NUMERIC INIT 0 DATA nToolTipRow AS NUMERIC INIT 0 ... ///////////////////////////////////////// METHOD New( cControlName, nRow, nCol, nWidth, nHeight, bLine, aHeaders, aColSizes, cParentWnd, ; ... EndIf ctooltip := ::cToolTip If Valtype(ctooltip) == "B" ctooltip := Eval(ctooltip, Self) EndIf SetToolTip ( ::hWnd , ctooltip , ::hToolTip ) IF nValue > 0 .AND. nValue <= ::nLen ... ///////////////////////////////////////// METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse Local nI, nIcon, lHeader, lMChange, nFirst, nLast, nDestCol, ; cMsg := ::cMsg, ; nColPixPos := 0, ; lFrozen := .F., ; nColumn := Max( 1, ::nAtCol( nColPix ) ) //V90 Local nRowLine := ::GetTxtRow( nRowPix ) Local ctooltip Default ::lMouseDown := .F., ; ::lNoMoveCols := .F., ; //V90 ::lDontChange := .F. //V90 If ::lIconView If ( nIcon := ::nAtIcon( nRowPix, nColPix ) ) != 0 If ::nIconPos != 0 .and. ::nIconPos != nIcon ::DrawIcon( ::nIconPos ) EndIf ::nIconPos := nIcon ::DrawIcon( nIcon, .T. ) CursorHand() Return 0 EndIf EndIf If ::nFreeze > 0 For nI := 1 To ::nFreeze nColPixPos += ::GetColSizes()[ nI ] Next If nColPix < nColPixPos lFrozen := .T. EndIf EndIf If ( lHeader := nRowLine == 0 ) .and. ! Empty( ::aColumns ) .and. ; ! Empty( ::aColumns[ nColumn ]:cToolTip ) If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow ctooltip := ::aColumns[ nColumn ]:cToolTip If Valtype(ctooltip) == "B" ctooltip := Eval(ctooltip, Self, nColumn, nRowLine) EndIf SetToolTip ( ::hWnd , ctooltip , ::hToolTip ) SysRefresh() ::nToolTipRow := nRowLine EndIf ::nToolTip := nColumn Else If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow ctooltip := ::cToolTip If Valtype(ctooltip) == "B" ctooltip := Eval(ctooltip, Self, nColumn, nRowLine) EndIf SetToolTip ( ::hWnd , ctooltip , ::hToolTip ) SysRefresh() ::nToolTipRow := nRowLine endif ::nToolTip := nColumn EndIf lHeader := (::GetTxtRow( nRowPix ) == 0 .or. ::GetTxtRow( nRowPix ) == -2) ... ///////////////////////////////////////// METHOD VertLine( nColPixPos, nColInit, nGapp ) CLASS TSBrowse ... If nColInit != Nil nsCol := nColInit nsWidth := nColPixPos nGap := If( ! Empty( nGapp ), nGapp, 0 ) nsOldPixPos := 0 hWndParent := 0 //V90 hPrvWnd := 0 //V90 _InvertRect( ::hDC, { 0, nsWidth - ::aColSizes[ nsCol ] - 2, aRect[4], nsWidth - ::aColSizes[ nsCol ] + 2 } ) EndIf ... [/pre2]

Andrey: SergKis пишет: доделел ToolTip на TsBrowse. Классно ! Григорий, добавляй в новую версию !

gfilatov2002: Andrey пишет: добавляй в новую версию Уже добавил, обработка кодовых блоков в подсказках работает! Благодарю за помощь

SergKis: gfilatov2002 Еще к ToolTip [pre2] c_controlmisc.c HB_FUNC( SETTOOLTIP ) ... было ti.lpszText = Text; SendMessage( hWnd_ToolTip, ( UINT ) TTM_ADDTOOL, ( WPARAM ) 0, ( LPARAM ) &ti ); hb_retni( 0 ); стало ti.lpszText = Text; SendMessage( hWnd_ToolTip, ( UINT ) TTM_ADDTOOL, ( WPARAM ) 0, ( LPARAM ) &ti ); // Много строчно // (LPARAM)0xFFFFFF); Максимальная ширина очень большая SendMessage( hWnd_ToolTip, ( UINT ) TTM_SETMAXTIPWIDTH, ( WPARAM ) 0, ( LPARAM ) 0x00FFFFFF ); hb_retni( 0 ); [/pre2]

gfilatov2002: SergKis пишет: Еще к ToolTip Посмотрите команду SET TOOLTIP MAXWIDTH TO <w> OF <form>

SergKis: gfilatov2002 пишет:Посмотрите команду команды в ch файле упустил из вида



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