Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть V) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №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
|
| постоянный участник
|
Пост N: 847
Зарегистрирован: 17.02.12
|
|
Отправлено: 02.02.16 20:31. Заголовок: gfilatov2002 еще вв..
gfilatov2002 еще ввел в TSColumn.prg DATA lNoDescend AS LOGICAL INIT .F. // No descending order flag ( dbf ) и в TsBrowse для работы с ордером METHOD SetOrder( nColumn, cPrefix, lDescend ) ... было 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 ... не всегда мне descend нужет на dbf
|
|
|
Haz
|
| |
Пост N: 768
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.02.16 10:36. Заголовок: Маленькое дополнение в TSBrowse
Григорий, добавил в метод SetBtnGet() поддержку символьного имени колонки. Если можно - включите это в сборку. 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 Теперь можно вместо oBrw:SetBtnGet( oBrw:nColumn("TEST"), "", { |oEdit, xVar| ....... } , 32 ) так oBrw:SetBtnGet( "TEST", "", { |oEdit, xVar| ....... } , 32 ) , что гораздо читабельнее
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 875
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.02.16 12:01. Заголовок: Haz пишет: включите..
Haz пишет: Не вопрос - уже сделал SergKis Для отключения сортировки колонок есть переменная lNoChangeOrd в классе TSBrowse
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 848
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.16 13:16. Заголовок: gfilatov2002 Как я ..
gfilatov2002 Как я понял, флаг lNoChangeOrd - отменяет переключение ордеров при .T. вообще, а при .F. SetOrder(...) работает с переключением lDescend := .F.\.T. и если на теге dbf ключ по возрастанию, то обратную сортировку не отключить (в тек. версии), у меня не получилось. А что с постом 846 предыдущего листа. Там, на мой взгляд, ошибка, т.е. центрованный текст в шапке прыгает влево при SetOrder(...) на колонку, а nAlign определяется выше по тексту
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 876
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.02.16 13:45. Заголовок: SergKis пишет: на м..
SergKis пишет: цитата: | на мой взгляд, ошибка, т.е. центрованный текст в шапке прыгает влево |
| Благодарю за разъяснение! Действительно, при переключении сортировки игнорируется текущее выравнивание колонки (так - у автора библиотеки). Поправил для новой сборки SergKis пишет: цитата: | обратную сортировку не отключить (в тек. версии) |
| Да, все верно! Но, если обратная сортировка колонки пользователем не нужна, то тогда просто можно отменить сортировку, ведь остается только прямая сортировка Или я что-то упустил...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 849
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.16 14:07. Заголовок: gfilatov2002 пишет:т..
gfilatov2002 пишет: цитата: | тогда просто можно отменить сортировку |
| 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 ... колонок со связанными тегами может быть от 2-х и больше, т.е. управление\переключение ими затруднено
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 850
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.16 14:33. Заголовок: PS. поставив oCol:cO..
PS. поставив oCol:cOrder := <тег наме> нескольким колонкам, далее по переключению все делает TsBrowse, без внешнего управления
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 877
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.02.16 15:05. Заголовок: SergKis пишет: пост..
SergKis пишет: цитата: | поставив oCol:cOrder := <тег наме> нескольким колонкам |
| Понял, добавлю переменную lNoDescend, как было предложено выше
|
|
|
Haz
|
| |
Пост N: 769
Зарегистрирован: 20.02.11
|
|
Отправлено: 11.02.16 12:21. Заголовок: Григорий , еще попра..
Григорий , еще поправочка в TSBrowse Описание проблемки: Установку фильтра на базу обычно делаю так : (oBrw:cAlias)->dbSetFilter() (oBrw:cAlias)->dbGoTop() oBrw:Reset() Если фильтр возвращает 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() ::Refresh( .T., .T. ) If ::nLen <1 .and. ::bChange != Nil Eval( ::bChange, Self, 0 ) EndIf Return Self
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 878
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.02.16 12:45. Заголовок: Haz пишет: еще попр..
Haz пишет: цитата: | еще поправочка в TSBrowse |
| Принято с благодарностью
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 879
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.02.16 12:49. Заголовок: Просто к сведению. В..
Просто к сведению. Выпустил сегодня RC для очередной сборки библиотеки, которая выйдет на следующей неделе... Полный список изменений см. ниже Скрытый текст
* 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)
| Кстати, мои результаты тестирования скорости текущей версии Харбора см. ниже Скрытый текст
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
|
|
|
|
|
Alex_Cher
|
| |
Пост N: 22
Зарегистрирован: 18.06.15
|
|
Отправлено: 12.02.16 13:39. Заголовок: Уважаемый Григорий, ..
Уважаемый Григорий, C:\MiniGUI\SAMPLES\BASIC\ActiveX\Demo.prg жалуется на устаревшую версию браузера - click here возможно ли сделать обновление ..?
|
|
|
Haz
|
| |
Пост N: 770
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.02.16 14:01. Заголовок: Alex_Cher пишет: во..
Alex_Cher пишет: цитата: | возможно ли сделать обновление ..? |
| Скорее всего обновление требуется антивирусу на компе. ActiveX тут не причем, к сожалению похоже на браузерный вирус PS. Хотя может и сам IE7 уже пора на пенсию , ему больше 10 лет )))
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 880
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.16 14:18. Заголовок: Alex_Cher пишет: жа..
Alex_Cher пишет: цитата: | жалуется на устаревшую версию браузера |
| Просто надо обновить Internet Explorer, который используется компонентом ActiveX. Если установленная система позволяет, то - до версии 11 (иначе 9).
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 855
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.02.16 22:31. Заголовок: gfilatov2002 еще пр..
gfilatov2002 еще правочка, выделенным цветом добавка 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 ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 881
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.02.16 22:37. Заголовок: SergKis пишет: еще ..
SergKis пишет: Принимается с благодарностью
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 882
Зарегистрирован: 11.02.10
|
|
Отправлено: 17.02.16 11:24. Заголовок: Сегодня выпущен очер..
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4715
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.02.16 20:30. Заголовок: Перешёл на новую вер..
Перешёл на новую версию 16.02 и сразу же вопрос. SergKis пишет: цитата: | на мой взгляд, ошибка, т.е. центрованный текст в шапке прыгает влево |
| gfilatov2002 пишет: цитата: | Благодарю за разъяснение! Действительно, при переключении сортировки игнорируется текущее выравнивание колонки (так - у автора библиотеки). Поправил для новой сборки |
| А как сделать по старому ?
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 883
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.02.16 21:18. Заголовок: Andrey пишет: А как..
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 857
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.02.16 21:29. Заголовок: Андрей пишет:А как с..
Андрей пишет: цитата: | А как сделать по старому ? Чтобы текст шапки при переключении - прыгал влево ! Мне это больше нравится, т.к. значок стрелки вниз/вверх затирается текстом шапки. |
| Пощелкай на колонке FullPath и слово прыгнет влево, т.к. колонка широкая - выглядит такое мелькание ужасно, не проще подправить для узкой колонки сразу текст влево, не в центр, можно добавить к тексту слева пару пробелов.
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|