Форум » 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

SergKis: gfilatov2002 еще ввел в TSColumn.prg DATA lNoDescend AS LOGICAL INIT .F. // No descending order flag ( dbf ) и в TsBrowse для работы с ордером METHOD SetOrder( nColumn, cPrefix, lDescend ) [pre2]... было If ::lIsDbf .and. ! Empty( oColumn:cOrder ) //V90 If nColumn == ::nColOrder .or. oColumn:lDescend == Nil //V90 If lDescend == Nil lDescend := If( Empty( ::nColOrder ) .or. oColumn:lDescend == Nil, .F., ! oColumn:lDescend ) EndIf ( ::cAlias )->( OrdDescend( ,, lDescend ) ) oColumn:lDescend := lDescend ... стало EndIf If oColumn:lNoDescend lDescend := .F. Else ( ::cAlias )->( OrdDescend( ,, lDescend ) ) EndIf oColumn:lDescend := lDescend ... [/pre2] не всегда мне descend нужет на dbf

Haz: Григорий, добавил в метод SetBtnGet() поддержку символьного имени колонки. Если можно - включите это в сборку. [pre2] METHOD SetBtnGet( nColumn, cResName, bAction, nBmpWidth ) CLASS TSBrowse Default nBmpWidth := 16 nColumn := if( ValType( nColumn ) == "C", ::nColumn( nColumn ), nColumn ) If nColumn == Nil .or. nColumn > Len( ::aColumns ) .or. nColumn <= 0 Return Self EndIf ::aColumns[ nColumn ]:cResName := cResName ::aColumns[ nColumn ]:bAction := bAction ::aColumns[ nColumn ]:nBmpWidth := nBmpWidth ::aColumns[ nColumn ]:lBtnGet := .t. Return Self [/pre2] Теперь можно вместо oBrw:SetBtnGet( oBrw:nColumn("TEST"), "", { |oEdit, xVar| ....... } , 32 ) так oBrw:SetBtnGet( "TEST", "", { |oEdit, xVar| ....... } , 32 ) , что гораздо читабельнее

gfilatov2002: Haz пишет: включите это в сборку Не вопрос - уже сделал SergKis Для отключения сортировки колонок есть переменная lNoChangeOrd в классе TSBrowse


SergKis: gfilatov2002 Как я понял, флаг lNoChangeOrd - отменяет переключение ордеров при .T. вообще, а при .F. SetOrder(...) работает с переключением lDescend := .F.\.T. и если на теге dbf ключ по возрастанию, то обратную сортировку не отключить (в тек. версии), у меня не получилось. А что с постом 846 предыдущего листа. Там, на мой взгляд, ошибка, т.е. центрованный текст в шапке прыгает влево при SetOrder(...) на колонку, а nAlign определяется выше по тексту

gfilatov2002: SergKis пишет: на мой взгляд, ошибка, т.е. центрованный текст в шапке прыгает влево Благодарю за разъяснение! Действительно, при переключении сортировки игнорируется текущее выравнивание колонки (так - у автора библиотеки). Поправил для новой сборки SergKis пишет: обратную сортировку не отключить (в тек. версии) Да, все верно! Но, если обратная сортировка колонки пользователем не нужна, то тогда просто можно отменить сортировку, ведь остается только прямая сортировка Или я что-то упустил...

SergKis: gfilatov2002 пишет:тогда просто можно отменить сортировку [pre2] METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) ... ElseIf nClickRow == 0 .and. ::lDrawHeaders .and. ! ::lNoChangeOrd // GF 1.71 If ::bLDblClick != Nil .and. ::aActions == Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self ) Else ::SetOrder( ::nAtCol( nColPix, ! ::lSelector ) ) //V90 EndIf ... [/pre2] колонок со связанными тегами может быть от 2-х и больше, т.е. управление\переключение ими затруднено

SergKis: PS. поставив oCol:cOrder := <тег наме> нескольким колонкам, далее по переключению все делает TsBrowse, без внешнего управления

gfilatov2002: SergKis пишет: поставив oCol:cOrder := <тег наме> нескольким колонкам Понял, добавлю переменную lNoDescend, как было предложено выше

Haz: Григорий , еще поправочка в TSBrowse Описание проблемки: Установку фильтра на базу обычно делаю так : [pre2](oBrw:cAlias)->dbSetFilter() (oBrw:cAlias)->dbGoTop() oBrw:Reset()[/pre2] Если фильтр возвращает 0 записей , то в методе ::Reset() по ::GoTop() или ::GoBottom() игнорируется выполнение блока bChange. т.к. в исходниках при ::nLen < 1 сразу идет Return Self Но по сути ведь произошло перепозиционирование записи с какой то до фильтра, на Bof() или Eof() и по логике bChange должен сработать. У меня по bChange висит вывод комментария по текущей записи в окно и получаю что записей нет, а коммент остался. Мне не сложно после Reset выполнить Eval( oBrw:bChange ) , но есть ощущение что это не наш метод Решение Можно подправить методы ::GoTop() или ::GoBottom() чтобы перед Return Self вызывался bChange, но думаю проще это один раз сделать в ::Reset(). Тем более эта ситуация возникает только в случае когда явно этот ::Reset() требуется Предлагаю такую концовку метода ::Reset() [pre2] ::Refresh( .T., .T. ) If ::nLen <1 .and. ::bChange != Nil Eval( ::bChange, Self, 0 ) EndIf Return Self [/pre2]

gfilatov2002: Haz пишет: еще поправочка в TSBrowse Принято с благодарностью

gfilatov2002: Просто к сведению. Выпустил сегодня RC для очередной сборки библиотеки, которая выйдет на следующей неделе... Полный список изменений см. ниже [pre2] * Fixed: The compilation of the MiniGUI core in the newer BCC versions (tested since 5.82 to 7.0). Problem was reported by Ivanil Marcelino <ivanil@linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Fixed: CallDll library source code: - renamed CallDll32() to HMG_CallDLL() for avoiding of the names conflict with the function in the HbMisc contrib library. Note: This is an INCOMPATIBLE change. Problem was reported by Pete Dionysopoulos <pete_westg@yahoo.gr>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Source\CallDll). * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - added handling of the variable :lNoDescend from TSColumn class; - fixed header aligning at the switching of the column order. Contributed by SergKis. * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.11.0dev (from 3.10.0). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2016-02-10 17:17): * Fixed: APPEND FROM ... DELIMITED and APPEND FROM ... SDF bugs; * Updated: HbNetIO contrib library; (see readme.txt in folder \samples\Basic\NETIO\Server); * Updated: most important differences between Harbour and xHarbour (see xhb-diff.txt in folder \harbour\doc) Contributed by Przemyslaw Czerpak <druzus/at/priv.onet.pl> (look at ReadMe.txt in folder \harbour) * Updated: HMGS-IDE v.1.3.0 Project Manager and Two-Way Visual Form Designer: - correction of 'out of array range' error in the internal function cTypeOfControl(). Contributed by Grigory Filatov <gfilatov@inbox.ru> * New: 'Test Print a Plain Text File' sample. Based upon a contribution by Bicahi Esgici <esgici@gmail.com>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\MiniPrint_3) * New: 'Transfer Grid data to HTML file' sample. Based upon a contribution of S.Rathinagiri <srgiri@dataone.in>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\Grid2HTML) * New: 'SQLCipher usage' sample is based on SQLCipher encryption for SQLite (https://www.zetetic.net/sqlcipher). It is mingw32-based lib only. Based upon a contribution of S.Rathinagiri <srgiri@dataone.in>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\sqlcipher) * Updated: 'Vista Command Link Button' sample: - expanded syntax: @ <row>,<col> CLBUTTON <name> OF <parent> ; [ WIDTH <w> ] [ HEIGHT <h> ] ; CAPTION <caption> NOTETEXT <notes> ; ACTION <action> [ <default: DEFAULT> ] Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Advanced\CommandLink) * Updated: 'HMGTALK Client' sample for using of the function CallDll32() from the Harbour hbmisc library. (see demo in folder \samples\Advanced\HMGTALK) [/pre2] Кстати, мои результаты тестирования скорости текущей версии Харбора см. ниже [pre2] 2016.02.10 21:11:45 Windows 10 10.0.0 Harbour 3.2.0dev (r1602101617) Borland C++ 5.5.1 (32-bit) x86 THREADS: 0 N_LOOPS: 1000000 [ T000: empty loop overhead ]...................................0.05 ==================================================================== [ T001: x := L_C ]..............................................0.00 [ T002: x := L_N ]..............................................0.00 [ T003: x := L_D ]..............................................0.00 [ T004: x := S_C ]..............................................0.02 [ T005: x := S_N ]..............................................0.02 [ T006: x := S_D ]..............................................0.00 [ T007: x := M->M_C ]...........................................0.03 [ T008: x := M->M_N ]...........................................0.02 [ T009: x := M->M_D ]...........................................0.02 [ T010: x := M->P_C ]...........................................0.02 [ T011: x := M->P_N ]...........................................0.02 [ T012: x := M->P_D ]...........................................0.02 [ T013: x := F_C ]..............................................0.00 [ T014: x := F_N ]..............................................0.00 [ T015: x := F_D ]..............................................0.00 [ T016: x := o:Args ]...........................................0.08 [ T017: x := o[2] ].............................................0.06 [ T018: round( i / 1000, 2 ) ]..................................0.11 [ T019: str( i / 1000 ) ].......................................0.38 [ T020: val( s ) ]..............................................0.13 [ T021: val( a [ i % 16 + 1 ] ) ]...............................0.23 [ T022: dtos( d - i % 10000 ) ].................................0.27 [ T023: eval( { || i % 16 } ) ].................................0.19 [ T024: eval( bc := { || i % 16 } ) ]...........................0.13 [ T025: eval( { |x| x % 16 }, i ) ].............................0.16 [ T026: eval( bc := { |x| x % 16 }, i ) ].......................0.13 [ T027: eval( { |x| f1( x ) }, i ) ]............................0.20 [ T028: eval( bc := { |x| f1( x ) }, i ) ]......................0.19 [ T029: eval( bc := &("{ |x| f1( x ) }"), i ) ].................0.17 [ T030: x := &( "f1(" + str(i) + ")" ) ]........................1.36 [ T031: bc := &( "{|x|f1(x)}" ), eval( bc, i ) ]................1.81 [ T032: x := valtype( x ) + valtype( i ) ].....................0.22 [ T033: x := strzero( i % 100, 2 ) $ a[ i % 16 + 1 ] ]..........0.42 [ T034: x := a[ i % 16 + 1 ] == s ].............................0.16 [ T035: x := a[ i % 16 + 1 ] = s ]..............................0.19 [ T036: x := a[ i % 16 + 1 ] >= s ].............................0.19 [ T037: x := a[ i % 16 + 1 ] <= s ].............................0.19 [ T038: x := a[ i % 16 + 1 ] < s ]..............................0.19 [ T039: x := a[ i % 16 + 1 ] > s ]..............................0.19 [ T040: ascan( a, i % 16 ) ]....................................0.14 [ T041: ascan( a, { |x| x == i % 16 } ) ].......................1.58 [ T042: iif( i%1000==0, a:={}, ) , aadd(a,{i,1,.T.,s,s2,a2 ]....0.48 [ T043: x := a ]................................................0.00 [ T044: x := {} ]...............................................0.05 [ T045: f0() ]..................................................0.02 [ T046: f1( i ) ]...............................................0.05 [ T047: f2( c[1...8] ) ]........................................0.03 [ T048: f2( c[1...40000] ) ]....................................0.03 [ T049: f2( @c[1...40000] ) ]...................................0.02 [ T050: f2( @c[1...40000] ), c2 := c ]..........................0.05 [ T051: f3( a, a2, s, i, s2, bc, i, n, x ) ]....................0.22 [ T052: f2( a ) ]...............................................0.03 [ T053: x := f4() ].............................................0.48 [ T054: x := f5() ].............................................0.11 [ T055: x := space(16) ]........................................0.08 [ T056: f_prv( c ) ]............................................0.17 ==================================================================== [ total application time: ]....................................13.59 [ total real time: ]...........................................13.64 [/pre2]

Alex_Cher: Уважаемый Григорий, C:\MiniGUI\SAMPLES\BASIC\ActiveX\Demo.prg жалуется на устаревшую версию браузера - click here возможно ли сделать обновление ..?

Haz: Alex_Cher пишет: возможно ли сделать обновление ..? Скорее всего обновление требуется антивирусу на компе. ActiveX тут не причем, к сожалению похоже на браузерный вирус PS. Хотя может и сам IE7 уже пора на пенсию , ему больше 10 лет )))

gfilatov2002: Alex_Cher пишет: жалуется на устаревшую версию браузера Просто надо обновить Internet Explorer, который используется компонентом ActiveX. Если установленная система позволяет, то - до версии 11 (иначе 9).

SergKis: gfilatov2002 еще правочка, выделенным цветом добавка [pre2] METHOD LButtonUp( nRowPix, nColPix, nFlags ) CLASS TSBrowse ... If nClickRow == 0 .or. nClickRow == -2 if nColPix > ::nLeft .and. ::nDragCol != nDestCol If ::lMoveCols ::MoveColumn( ::nDragCol, nDestCol ) Else ::Exchange( ::nDragCol, nDestCol ) EndIf elseif ::nDragCol = nDestCol If ::aColumns[ nDestCol ]:bHLClicked != Nil ::DrawHeaders() Eval( ::aColumns[ nDestCol ]:bHLClicked, nRowPix, nColPix, ::nAt, Self ) ::DrawHeaders() EndIf Endif EndIf ... METHOD RButtonDown( nRowPix, nColPix, nFlags ) CLASS TSBrowse ... If ::aColumns[ nCol ]:bHRClicked != Nil Eval( ::aColumns[ nCol ]:bHRClicked, uPar1, uPar2, ::nAt, Self ) EndIf ElseIf lSpecHd If ::aColumns[ nCol ]:bSRClicked != Nil Eval( ::aColumns[ nCol ]:bSRClicked, uPar1, uPar2, ::nAt, Self ) EndIf ElseIf lFooter If ::aColumns[ nCol ]:bFRClicked != Nil Eval( ::aColumns[ nCol ]:bFRClicked, uPar1, uPar2, ::nAt, Self ) EndIf EndIf ... [/pre2]

gfilatov2002: SergKis пишет: еще правочка Принимается с благодарностью

gfilatov2002: Сегодня выпущен очередной релиз библиотеки MiniguiEx. Сборка для компилятора BCC лежит на официальном сайте библиотеки по адресу: http://hmgextended.com/files/CONTRIB/hmg-16.02-setup.zip Также доступна сборка для компилятора MinGW32 по адресу: http://hmgextended.com/files/CONTRIB/hmg1602-mingw.exe и для компилятора MinGW64 по адресу: http://hmgextended.com/files/CONTRIB/minigui64-1602.exe и компактный архив для последней доступной версии компилятора xHarbour http://hmgextended.com/files/CONTRIB/xhmg1602_xhb10138.zip Благодарю за Ваше внимание и поддержку данного проекта

Andrey: Перешёл на новую версию 16.02 и сразу же вопрос. SergKis пишет: на мой взгляд, ошибка, т.е. центрованный текст в шапке прыгает влево gfilatov2002 пишет: Благодарю за разъяснение! Действительно, при переключении сортировки игнорируется текущее выравнивание колонки (так - у автора библиотеки). Поправил для новой сборки А как сделать по старому ? Чтобы текст шапки при переключении - прыгал влево ! Мне это больше нравится, т.к. значок стрелки вниз/вверх затирается текстом шапки. Вот картинка:

gfilatov2002: Andrey пишет: А как сделать по старому ? Попробуй библиотеку по ссылке http://hmgextended.com/files/MISC/tsbrowse-lib.zip

SergKis: Андрей пишет:А как сделать по старому ? Чтобы текст шапки при переключении - прыгал влево ! Мне это больше нравится, т.к. значок стрелки вниз/вверх затирается текстом шапки. Пощелкай на колонке FullPath и слово прыгнет влево, т.к. колонка широкая - выглядит такое мелькание ужасно, не проще подправить для узкой колонки сразу текст влево, не в центр, можно добавить к тексту слева пару пробелов.



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