Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №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
[только новые]
|
|
gfilatov2002
|
| moderator
|
Пост N: 1797
Зарегистрирован: 11.02.10
|
|
Отправлено: 07.10.20 12:55. Заголовок: SergKis пишет: Попр..
SergKis пишет: Благодарю за исправление Кстати, подготовил 3-ю бету для новой сборки со следующим списком изменений: Скрытый текст
* New: Added the new functions for Windows GDI objects memory release. It will activate the GDI objects recording and call CheckRes() to generate the checkres.txt log file on the application quit. The above logfile will report the following unreleased objects: - BITMAP handles; - BRUSH handles; - CURSOR handles; - FONT handles; - ICON handles; - IMAGELIST handles; - REGION handles. Note: This feature will work after setting of debugging mode via the Harbour command Set( _SET_DEBUG, .T. ) or AltD( 1 ). Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\Grid_5) * Fixed: Detected resource leakage of GDI objects at the release of the Main form with usage of the new MiniGUI Resources control system. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Fixed: TREE: There is a blurring of the picture in some cases. Bug was reported by Eladio Bravo <eladibravo/at/gmail.com>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\DirTree_2) * Updated: Revised a hot mouse tracking in the ButtonEx control. Problem was reported by Gilbert Vaillancourt. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see menulist_2.prg in folder \samples\Advanced\MenuList) * Updated: Synchronized Extended HMG for compatibility with Official HMG: - New: COMBOBOXEX supports the optional clause NOTRANSPARENT; - New: IMAGE CHECKBUTTON supports the optional clause NOTRANSPARENT; - New: TAB control supports the optional clause NOTRANSPARENT; - New: TREE control supports the optional clause NOTRANSPARENT. Based upon a contribution of Claudio Soto <srvet/at/adinet.com.uy>. Adapted for Minigui Extended by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - added the new variable :lFastDraw in the TSBrowse class; - correction of a filling of :aRowPosAtRec auxiliary array in the methods GoUp() and GoDown(). Suggested and contributed by Sergej Kiselev. - updated class TCursor has been used for creating of the STOP cursor in the method MouseMove(). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.34.0dev (from 3.33.0). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'How to add a skin for a Grid control' sample: - fixed a resource leakage with usage of the Minigui Resources control system. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\Grid_5) * Updated: 'TBrowse in the MDI environment' sample: - added a memo field editing in the Card edit mode. Contributed by Sergej Kiselev (see in folder \samples\Advanced\Tsb_DemoMDI)
|
|
|
|
Haz
|
| |
Пост N: 1634
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.10.20 12:57. Заголовок: Haz пишет: { Ключ :..
Haz пишет: только не :nAt а RecNo() при работе с ADS ( при использовании SQL ) :nAt содержит непонятно что
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3423
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.10.20 13:00. Заголовок: Haz пишет Согласен В..
Haz пишет Возникает вариант не задан oCol:cName, берем номер колонки и возникают риски перестановки колонки в списке. Если после перестановки сработает Refresh, то все должно быть хорошо, если нет то плохо
|
|
|
Haz
|
| |
Пост N: 1635
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.10.20 13:08. Заголовок: SergKis пишет: не з..
SergKis пишет: Можно уйти на отдельные хеши в колонках и проблем не будет
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3424
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.10.20 13:13. Заголовок: Haz пишет только не ..
Haz пишет Сейчас это основа. Для :lIsArr и :lIsDbf работает нормально вроде (смотрел при отладке :aRowPosAtRec) Может надо и для ADS SQL поправить, по тексту мест много с проверками :lIsArr, :lIsDbf ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3425
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.10.20 13:18. Заголовок: Haz пишет Можно уйти..
Haz пишет цитата: | Можно уйти на отдельные хеши в колонках |
| Или присвоить колонкам имена внутренние типа _Dummy_Col_<номер колонки>
|
|
|
Haz
|
| |
Пост N: 1636
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.10.20 13:25. Заголовок: SergKis пишет: Или ..
SergKis пишет: цитата: | Или присвоить колонкам имена внутренние типа _Dummy_Col_<номер колонки> |
|
или генерить уникальный ID колонки при создании , тогда вопрос отпадет совсем
|
|
|
Haz
|
| |
Пост N: 1637
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.10.20 13:27. Заголовок: SergKis пишет: Сейч..
SergKis пишет: цитата: | Сейчас это основа. Для :lIsArr и :lIsDbf работает нормально вроде |
| ту все нормально для DBF идет Recno() ELSEIF ::lIsDbf ::aRowPosAtRec[ xRow ] := ( ::cAlias )->( RecNo() ) ELSEIF ::lIsArr ::aRowPosAtRec[ xRow ] := ::nAt ENDIF
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3426
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.10.20 13:48. Заголовок: gfilatov2002 Поправ..
gfilatov2002 Поправьте немного еще METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse ... If ::bOnDrawLine != Nil IF !Empty( Eval( ::bOnDrawLine, Self, xRow ) ) RETURN Self ENDIF EndIf ... METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse ... If ::bOnDrawLine != Nil IF !Empty( Eval( ::bOnDrawLine, Self, xRow ) ) RETURN Self ENDIF EndIf If ! ::lDrawLine nBegin := 1 nLastCol := ::nColCount() EndIf ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3427
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.10.20 13:56. Заголовок: Haz пишет ту все нор..
Haz пишет цитата: | ту все нормально для DBF идет Recno() |
| Т.е. при ADS SQL :lIsDbf == .T. ? Тогда :nAt, по идее, везде должна быть нормальной, т.к. определяется в :nLogicPos() в ней только для ADO возврат If ::cAlias == "ADO_" Return Eval( ::bKeyNo ) EndIf Return ::nAt
|
|
|
Haz
|
| |
Пост N: 1638
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.10.20 14:19. Заголовок: SergKis пишет: Тогд..
SergKis пишет: цитата: | Тогда :nAt, по идее, везде должна быть нормальной, т.к. определяется в :nLogicPos() в ней только для ADO возврат |
| :nAt только для массива же ? При ADS SQL :lIsDbf будет == .T. и Recno() как уникальный номер записи возмется с таблицы по которой построили запрос ( тоже все нормально ) Принцип работы ADS SQL простой -> DoSql( cAlias, cSql ) и получим рабочую новую область согласно запросу, фактически как USE cBase NEW ALIAS (cAlias) а вот LogicPos вернет что угодно только не позицию в логическом порядке записей. Из-за этого при запросе slect ... from ... order by ... вертикальный скроллбар прыгает хаотично. и это косяк именно ADS в исходниках подцепиться не к чему, если только создать виртуальное поле - нумератор и скроллбар настроить на него.
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3428
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.10.20 14:30. Заголовок: Haz пишет :nAt для ..
Haz пишет [quote]` :nAt для массива и dbf работает нормально, исп. без анализа в своих блоках кода и ф-ях Может тут, что то править надо Скрытый текст
METHOD SetDbf( cAlias ) CLASS TSBrowse Local cAdsKeyNo, cAdsKeyCount, nTags, nEle Default ::cAlias := cAlias Default ::cAlias := Alias() If Empty( ::cAlias ) Return Nil EndIf cAlias := ::cAlias ::cDriver := ( ::cAlias )->( RddName() ) Default ::bGoTop := {|| ( cAlias )->( DbGoTop() ) }, ; ::bGoBottom := {|| ( cAlias )->( DbGoBottom() ) }, ; ::bSkip := {| n | iif( n == Nil, n := 1, Nil ), ::DbSkipper( n ) }, ; ::bBof := {|| ( cAlias )->( Bof() ) }, ; ::bEof := {|| ( cAlias )->( Eof() ) } If "ADS" $ ::cDriver cAdsKeyNo := "{| n, oBrw | iif( n == Nil, Round( " + cAlias + "->( ADSGetRelKeyPos() ) * oBrw:nLen, 0 ), " + ; cAlias + "->( ADSSetRelKeyPos( n / oBrw:nLen ) ) ) }" cAdsKeyCount := "{|cTag| " + cAlias + "->( ADSKeyCount(cTag,, 1 ) ) }" Default ::bKeyNo := &cAdsKeyNo , ; ::bKeyCount := &cAdsKeyCount, ; ::bLogicLen := &cAdsKeyCount, ; ::bTagOrder := {|uTag| ( cAlias )->( OrdSetFocus( uTag ) ) }, ; ::bGoToPos := {|n| Eval( ::bKeyNo, n, Self ) } Else Default ::bKeyNo := {| n | ( cAlias )->( iif( n == Nil, iif( IndexOrd() > 0, OrdKeyNo(), RecNo() ), ; iif( IndexOrd() > 0, OrdKeyGoto( n ), DbGoTo( n ) ) ) ) }, ; ::bKeyCount := {|| ( cAlias )->( iif( IndexOrd() > 0, OrdKeyCount(), LastRec() ) ) }, ; ::bLogicLen := {|| ( cAlias )->( iif( IndexOrd() == 0, LastRec(), OrdKeyCount() ) ) }, ; ::bTagOrder := {|uTag| ( cAlias )->( OrdSetFocus( uTag ) ) }, ; ::bGoToPos := {|n| Eval( ::bKeyNo, n ) } EndIf nTags := ( cAlias )->( OrdCount() ) ::aTags := {} For nEle := 1 To nTags AAdd( ::aTags, { ( cAlias )->( OrdName( nEle ) ), ( cAlias )->( OrdKey( nEle ) ) } ) Next if "SQL" $ ::cDriver Eval( ::bGoToPos, 100 ) ::bGoBottom := {|| CursorWait(), ( cAlias )->( DbGoBottom() ), CursorArrow() } ::bRecLock := {|| .t. } endif ::nLen := Eval( ::bLogicLen ) ::ResetVScroll( .T. ) Return Self
|
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1798
Зарегистрирован: 11.02.10
|
|
Отправлено: 07.10.20 14:42. Заголовок: SergKis пишет: Попр..
SergKis пишет: OK
|
|
|
Haz
|
| |
Пост N: 1639
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.10.20 14:57. Заголовок: SergKis пишет: Може..
SergKis пишет: цитата: | Может тут, что то править надо |
| Сергей , бесполезно Уже не раз смотрел и правил. Просто если в SQL запросе присутствует ORDER BY ( т.е. сортировка ) логика в ADS примерно такая 1) Выполняется основной запрос и ADSGetRelKeyPos будет правильным для несортированной таблицы. 2) Потом выполняется ORDER BY из запроса и вместо ADSGetRelKeyPos на выходе получаем компот. В исходниках ADSRDD нет ничего , что позволило бы получить правильную логическую позицию, единственный вариант - это создание временной таблицы в памяти сервера DOSQL(, "SELECT ... INTO #T1 FROM ... ORDER BY ...") а потом DOSQL("T2", "SELECT * FROM #T1" ) ... и после всего этого T2->(dbCloseArea()) DOSQL(, "DROP TABLE #T1") Предлагаю даже не заморачиваться с этим, запросы без ORDER BY идут в логике обычного DBF, если нужна сортировка , то делаю индекс в таблице и он подхватывается в результат прямого запроса
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3429
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.10.20 15:02. Заголовок: Haz пишет Предлагаю ..
Haz пишет цитата: | Предлагаю даже не заморачиваться с этим |
| OK ! Спасибо за разъяснения
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3430
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.10.20 15:11. Заголовок: gfilatov2002 С учет..
gfilatov2002 С учетом разъяснений Игоря, поправьте METHOD GoDown() CLASS TSBrowse ... If lTranspar ::Paint() Else ::nRowPos := nLines ::TSBrwScroll( 1 ) ::Skip( -1 ) ::DrawLine( ::nRowPos - 1 ) // added 10.07.2015 ::Skip( 1 ) IF ::lRowPosAtRec .and. Len( ::aRowPosAtRec ) > 0 hb_ADel( ::aRowPosAtRec, 1, .T. ) AAdd( ::aRowPosAtRec, iif( ::lIsDbf, (::cAlias)->(RecNo()), ::nAt ) ) ENDIF EndIf ... METHOD GoUp() CLASS TSBrowse ... If ! lTranspar ::lRePaint := .F. ::TSBrwScroll( -1 ) ::Skip( 1 ) ::DrawLine( 2 ) ::Skip( -1 ) IF ::lRowPosAtRec .and. Len( ::aRowPosAtRec ) > 0 ASize( ::aRowPosAtRec, Len( ::aRowPosAtRec ) - 1 ) hb_AIns( ::aRowPosAtRec, 1, iif( ::lIsDbf, (::cAlias)->(RecNo()), ::nAt ), .T. ) ENDIF Else ::Paint() EndIf ...
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6832
Зарегистрирован: 12.09.06
|
|
Отправлено: 07.10.20 15:11. Заголовок: SergKis пишет: Скор..
SergKis пишет: цитата: | Скорости хватает, не спорткар, но и не трактор |
| Вообще то МиниГуи ТСБ будет получше чем у других. Вот для примера стандартный C# грид - https://cloud.mail.ru/public/2wYs/pJMfZSrtD Кол-во столбцов и строк можно самому настраивать в настройке этой проги.
|
|
|
Haz
|
| |
Пост N: 1640
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.10.20 15:22. Заголовок: SergKis пишет: Или ..
SergKis пишет: цитата: | Или присвоить колонкам имена внутренние типа _Dummy_Col_<номер колонки> |
| Может действительно в TSCOLUMN добавить DATA nID INIT 0 , а в METHOD TSColumn:New() в описание переменных static nLastID := 0 и сразу далее ::nId := ++nLastId Тогда ключ для любой колонки всегда будет уникальным , как бы ее не перемещали ???
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3431
Зарегистрирован: 17.02.12
|
|
Отправлено: 07.10.20 15:26. Заголовок: Haz пишет Тогда ключ..
Haz пишет цитата: | Тогда ключ для любой колонки всегда будет уникальным , как бы ее не перемещали ??? |
| Для внутреннего использования даже оч. нормально (может и еще где сгодится "славянский шкаф")
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1799
Зарегистрирован: 11.02.10
|
|
Отправлено: 07.10.20 15:31. Заголовок: SergKis пишет: С уч..
SergKis пишет: цитата: | С учетом разъяснений Игоря, поправьте |
| Поправил, конечно
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|