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

gfilatov2002: SergKis пишет: Поправить немного надо Благодарю за исправление Кстати, подготовил 3-ю бету для новой сборки со следующим списком изменений: [pre2] * 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) [/pre2]

Haz: Haz пишет: { Ключ := <:nAt> только не :nAt а RecNo() при работе с ADS ( при использовании SQL ) :nAt содержит непонятно что

SergKis: Haz пишет Согласен Возникает вариант не задан oCol:cName, берем номер колонки и возникают риски перестановки колонки в списке. Если после перестановки сработает Refresh, то все должно быть хорошо, если нет то плохо


Haz: SergKis пишет: не задан oCol:cName Можно уйти на отдельные хеши в колонках и проблем не будет

SergKis: Haz пишет только не :nAt Сейчас это основа. Для :lIsArr и :lIsDbf работает нормально вроде (смотрел при отладке :aRowPosAtRec) Может надо и для ADS SQL поправить, по тексту мест много с проверками :lIsArr, :lIsDbf ?

SergKis: Haz пишет Можно уйти на отдельные хеши в колонках Или присвоить колонкам имена внутренние типа _Dummy_Col_<номер колонки>

Haz: SergKis пишет: Или присвоить колонкам имена внутренние типа _Dummy_Col_<номер колонки> или генерить уникальный ID колонки при создании , тогда вопрос отпадет совсем

Haz: SergKis пишет: Сейчас это основа. Для :lIsArr и :lIsDbf работает нормально вроде ту все нормально для DBF идет Recno() [pre2] ELSEIF ::lIsDbf ::aRowPosAtRec[ xRow ] := ( ::cAlias )->( RecNo() ) ELSEIF ::lIsArr ::aRowPosAtRec[ xRow ] := ::nAt ENDIF [/pre2]

SergKis: gfilatov2002 Поправьте немного еще [pre2] 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 ... [/pre2]

SergKis: Haz пишет ту все нормально для DBF идет Recno() Т.е. при ADS SQL :lIsDbf == .T. ? Тогда :nAt, по идее, везде должна быть нормальной, т.к. определяется в :nLogicPos() в ней только для ADO возврат[pre2] If ::cAlias == "ADO_" Return Eval( ::bKeyNo ) EndIf Return ::nAt [/pre2]

Haz: 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: Haz пишет :nAt для массива и dbf работает нормально, исп. без анализа в своих блоках кода и ф-ях Может тут, что то править надо [pre2] 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 [/pre2]

gfilatov2002: SergKis пишет: Поправьте немного еще OK

Haz: SergKis пишет: Может тут, что то править надо Сергей , бесполезно Уже не раз смотрел и правил. Просто если в SQL запросе присутствует ORDER BY ( т.е. сортировка ) логика в ADS примерно такая 1) Выполняется основной запрос и ADSGetRelKeyPos будет правильным для несортированной таблицы. 2) Потом выполняется ORDER BY из запроса и вместо ADSGetRelKeyPos на выходе получаем компот. В исходниках ADSRDD нет ничего , что позволило бы получить правильную логическую позицию, единственный вариант - это создание временной таблицы в памяти сервера [pre2] DOSQL(, "SELECT ... INTO #T1 FROM ... ORDER BY ...") а потом DOSQL("T2", "SELECT * FROM #T1" ) ... и после всего этого T2->(dbCloseArea()) DOSQL(, "DROP TABLE #T1") [/pre2] Предлагаю даже не заморачиваться с этим, запросы без ORDER BY идут в логике обычного DBF, если нужна сортировка , то делаю индекс в таблице и он подхватывается в результат прямого запроса

SergKis: Haz пишет Предлагаю даже не заморачиваться с этим OK ! Спасибо за разъяснения

SergKis: gfilatov2002 С учетом разъяснений Игоря, поправьте[pre2] 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 ... [/pre2]

Andrey: SergKis пишет: Скорости хватает, не спорткар, но и не трактор Вообще то МиниГуи ТСБ будет получше чем у других. Вот для примера стандартный C# грид - https://cloud.mail.ru/public/2wYs/pJMfZSrtD Кол-во столбцов и строк можно самому настраивать в настройке этой проги.

Haz: SergKis пишет: Или присвоить колонкам имена внутренние типа _Dummy_Col_<номер колонки> Может действительно в TSCOLUMN добавить DATA nID INIT 0 , а в METHOD TSColumn:New() в описание переменных static nLastID := 0 и сразу далее ::nId := ++nLastId Тогда ключ для любой колонки всегда будет уникальным , как бы ее не перемещали ???

SergKis: Haz пишет Тогда ключ для любой колонки всегда будет уникальным , как бы ее не перемещали ??? Для внутреннего использования даже оч. нормально (может и еще где сгодится "славянский шкаф")

gfilatov2002: SergKis пишет: С учетом разъяснений Игоря, поправьте Поправил, конечно



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