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

SergKis: SergKis пишет Можно не перебирать, а выполнить :DrawLine( , .F. ) Игорь, хорошо, что спросил. Начал еще раз проверять, параметр ввел, а исправить перенос из :DrawSelect() на эту переменную забыл gfilatov2002 Правочка небольшая с выше сказанным на мой текст [pre2] METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse ... Default xRow := iif( ::lDrawHeaders, Max( 1, nRowPos ), nRowPos ), lDrawCell := ::lDrawLine ... If ::bOnDrawLine != Nil Eval( ::bOnDrawLine, Self ) EndIf IF ! lDrawCell nBegin := 1 nLastCol := ::nColCount() ENDIF For nI := nBegin To nLastCol If nStartCol >= nMaxWidth .and. lDrawCell Exit EndIf ... IF nAlign != DT_CENTER .and. ::nCellMarginLR != NIL uData := ::CellMarginLeftRight( nJ, uData, oColumn, nAlign, lMultiLine, 0 ) ENDIF IF lDrawCell oColumn:oCell := NIL TSDrawCell( hWnd, ; // 1 ... [/pre2]

gfilatov2002: gfilatov2002 пишет: включу эти изменения в новую сборку Выполнил все предложенные изменения кода, пересобрал пример demo5 - экспорт по клавише F8 работает аналогично готовому экзешнику

SergKis: gfilatov2002 Если брали целиком мой файл h_tsbrowse.prg в нем надо убрать строки (была проба и не убрал)[pre2] FUNCTION _DefineTBrowse( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ; ... oBrw:InsColumn( nColNumber, oCol ) IF oBrw:lDrawFooters oBrw:aColumns[ nColNumber ]:cFooting := "" ENDIF oBrw:nCell := nColNumber + 1 oBrw:nFreeze := nColNumber oBrw:lLockFreeze := .T. ... [/pre2]


gfilatov2002: SergKis пишет: надо убрать строки Убрал, конечно

Andrey: Haz пишет: 3. Как уже писал ранее ,при помощи Андрею в его TSB_экспортах - считаю такие экспорты (средствами бровса) красивыми, но бесперспективными с точки зрения временных затрат Бровс умеет работать только с текущей записью , зачем мне тормозной перебор если я могу взять весь массив данных сразу и делать с ним что хочу (aEval, dbEval, SQLExecute() и пр) . В целом , для демонстрашки экспорта доработка хорошая, практически не знаю зачем Если бы такие красивые отчеты нужны были каждый день, то согласен, делал бы НЕ через ОЛЮ. А так раз в месяц, а то и три нужен красивый отчёт начальству. Не буду я тратить время на это, пускай 20 минут ждут, хотя у меня быстрей проходит. Есть готовая фишка в МиниГуи - красивый экспорт, пускай работает.

gfilatov2002: Подготовил 2-ю бету для новой сборки 20.05. Что нового [pre2] * New: Added a new command for managing of the 'This' property at runtime: SET WINDOW THIS TO [<w>] where <w> may be a Form Name or a Form Index. Sample code: DEFINE WINDOW Form_1 ... @ 10,10 BROWSE Browse_1 ... END WINDOW ... Set Window This To "Form_1" // set a new 'This' property This.Browse_1.ColumnsAutoFit() This.Center() This.Activate() Set Window This To // restore a previous 'This' property Suggested and contributed by Sergej Kiselev. * Enhanced: Added support of the PICTURE option to format the columns in the Browse control. Contributed by Jan Szczepanik <jan-szczepanik/at/wp.pl> (see demo in folder \samples\Basic\BROWSE_PICTURE) * Enhanced: The SplitButton control may be placed now in the TAB container. Requested by Ivanil Marcelino <ivanil/at/linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: PropGrid library v.2.0 (see source in folder \source\PropGrid): - Fixed: Bug in a Masked Float (double) item handling. Reported by Ivanil Marcelino <ivanil/at/linkbr.com.br>. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo3.prg in folder \samples\Advanced\PropGrid) * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - a minor correction in the method :AddColumn(); - added ENUMERATOR correction for numbering of the visible columns only. Usage: nCnt := 1 FOR EACH oCol IN oBrw:aColumns oCol:cSpcHeading := NIL IF oCol:lVisible oCol:cSpcHeading := hb_ntos( nCnt++ ) ENDIF NEXT - added the new variable :lDrawLine in the TSBrowse class and the new variable :oCell in the TSColumn class; - enhanced auxiliary class TSBcell for a quick export of a data; - added the new variable :nCellMarginLR and the new method CellMarginLeftRight() in the TSBrowse class. Contributed by Sergej Kiselev (see demo5.prg in folder \samples\Advanced\Tsb_Array_2) * Updated: HbSQLite3 library: - update for using SQLITE3 latest version 3.32.0dev. Contributed by Grigory Filatov <gfilatov@inbox.ru>. * Updated: '7-Zip interaction' sample by Vladimir Chumachenko: - the russian comments were replaced with an english translation. Contributed by Anand K Gupta (see in folder \samples\Advanced\7-Zip) [/pre2]Если заметили неточности в этом описании - пишите, исправлю...

Andrey: А нельзя в новой версии сделать правильное отображение символьных полей при задании центровки DT_CENTER ? Не работает центровка сейчас ! Чтобы заработало, нужно шаманство делать, благо без бубна...

SergKis: Andrey пишет А нельзя в новой версии сделать правильное отображение символьных полей при задании центровки DT_CENTER ? Не работает центровка сейчас ! Центровка работает, но мешает центровать, как ты хочешь правые пробелы. Если их убирать ( trim() или alltrim ? ), то "сломается" отображение старого алгоритма, т.е. значение "1 " в колонке 120 шириной отобразится по другому. Так же сломаться может отображение строк с CRLF. Сейчас решаю задавая oCol:bDecode := {|cval| Alltrim(cval) }

Andrey: SergKis пишет: Сейчас решаю задавая oCol:bDecode := {|cval| Alltrim(cval) } Это я понял. Спасибо ! Не работает цвет в суперхидере. Делаю цвет в таблице:[pre2] :Setcolor( { 3}, { CLR_WHITE } ) // 3 , текста шапки таблицы :SetColor( { 4}, { { || { CLR_BLACK, CLR_GRAY } } } ) // 4 , фона шапка таблицы :SetColor( {16}, { { || { CLR_BLACK, CLR_GRAY } } } ) // 16, фона спецхидер :SetColor( {17}, { { || CLR_YELLOW } } ) // 17, текста спецхидер[/pre2] Вот результат:

SergKis: Andrey Как он может работать, если цвета ставишь на него, раньше, чем создаешь SuperHeader [pre2] mySetTsb( oBrw ) // настройки таблицы myColorTsb( oBrw ) // цвета на таблицу myColorTsbElect( oBrw ) // цвета избранные mySumTsb ( oBrw ) // суммирование колонок таблицы myDbfDelColTsb( oBrw ) // убрать колонки из отображения mySupHdTsb( oBrw, aSupHd ) // SuperHeader myEnumTsb( oBrw ) // ENUMERATOR по порядку mySet2Tsb( oBrw ) // настройки таблицы [/pre2]

Andrey: SergKis пишет: Как он может работать, если цвета ставишь на него, раньше, чем создаешь SuperHeader Ну вот так и бывает...

Haz: Andrey пишет: Не буду я тратить время на это Каждому своё. Я лучше один раз потрачу тк мне неприемлемо когда отчёта нужно ожидать больше нескольких секунд. Что касается "пусть будет", то я и не говорил что эти доработки нужно убрать. Я говорил только о том, что для серьёзных объёмов есть другой инструмент, который в отличии от кривого Ole экспорта работает всегда и позволяет любые цвета и шрифт.

SergKis: gfilatov2002 Предложение по hmg_alert(), AlertInfo() и др. - hmg_alert() значение nIcoSize сделать равным 0, тогда на окне нет DRAW ICO ... - в AlertInfo(), AlertExclamation(), AlertStop() добавить параметр lNoPlay, для отключения звук. сигнала Alert.prg [pre2] ... *-----------------------------------------------------------------------------* FUNCTION AlertExclamation ( Message, Title, Icon, nSize, aColors, lTopMost, bInit, lNoPlay ) *-----------------------------------------------------------------------------* LOCAL nWaitSec IF ISNUMERIC( Title ) nWaitSec := Title ENDIF IF Empty( lNoPlay ) ; PlayExclamation() ENDIF RETURN _Alert( Message, nWaitSec, hb_defaultValue( Title, _HMG_MESSAGE [10] ), , , Icon, nSize, aColors, lTopMost, bInit ) *-----------------------------------------------------------------------------* FUNCTION AlertInfo ( Message, Title, Icon, nSize, aColors, lTopMost, bInit, lNoPlay ) *-----------------------------------------------------------------------------* LOCAL nWaitSec IF ISNUMERIC( Title ) nWaitSec := Title ENDIF IF Empty( lNoPlay ) ; PlayAsterisk() ENDIF RETURN _Alert( Message, nWaitSec, hb_defaultValue( Title, _HMG_MESSAGE [11] ), ICON_INFORMATION, , Icon, nSize, aColors, lTopMost, bInit ) *-----------------------------------------------------------------------------* FUNCTION AlertStop ( Message, Title, Icon, nSize, aColors, lTopMost, bInit, lNoPlay ) *-----------------------------------------------------------------------------* LOCAL nWaitSec IF ISNUMERIC( Title ) nWaitSec := Title ENDIF IF Empty( lNoPlay ) ; PlayHand() ENDIF RETURN _Alert( Message, nWaitSec, hb_defaultValue( Title, _HMG_MESSAGE [12] ), ICON_STOP, , Icon, nSize, aColors, lTopMost, bInit ) ... [/pre2] По поводу - added the new variable :lDrawLine in the TSBrowse class Добавил "быстрого" доступа к элементам тсб, SuperHeader, Header, SpecHd, DrawLine и Footer. В TsColumn.prg добавил переменные [pre2] DATA oCellHead // TSBcell object Header DATA oCellEnum // TSBcell object Enumerator DATA oCellFoot // TSBcell object Footer DATA oCell // TSBcell object [/pre2] В h_tbrowse.prg правил METHOD DrawSuper( lDrawCell ) CLASS TSBrowse METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse METHOD DrawLine( xRow, lDrawCell ) CLASS TSBrowse METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse CLASS TSBcell Исходники и пример по использованию тут https://TransFiles.ru/vpnu8 в demo7 работают клавиши F8 - общий способ доступа для массива и dbf, использован "родной" вариант AlertInfo() F9 - только доступ для dbf, использован вариант AlertInfo() с nIcoSize := 0 и lNoPlay := .T.

gfilatov2002: SergKis пишет: Предложение по hmg_alert(), AlertInfo() и др. ... Добавил "быстрого" доступа к элементам тсб, SuperHeader, Header, SpecHd, DrawLine и Footer. Все правки приняты - хорошая работа. Благодарю за помощь

SergKis: gfilatov2002 Еще такая правка[pre2] CLASS TSBrowse FROM TControl ... ACCESS IsEdit INLINE ! Empty( ::aColumns[ ::nCell ]:oEdit ) // SergKis addition ACCESS Tsb INLINE ::oWnd ... FUNCTION GetProperty ( Arg1 , Arg2 , Arg3 , Arg4 , Arg5 , Arg6 , Arg7 ) ... #ifdef _OBJECT_ CASE Arg3 == "OBJECT" IF _HMG_lOOPEnabled RetVal := _ControlObj ( Arg2 , Arg1 ) IF HB_ISOBJECT( RetVal ) .and. _HMG_aControlType[ RetVal:Index ] == "TBROWSE" RetVal := _HMG_aControlIds[ RetVal:Index ] ENDIF ELSEIF ( ix := GetControlIndex ( Arg2 , Arg1 ) ) > 0 IF _HMG_aControlType[ ix ] == "TBROWSE" RetVal := _HMG_aControlIds[ ix ] ENDIF ENDIF #endif ... Синим цветом, наверно, надо убрать Это даст возможность получать объект TSBROWSE, как SET OOP ON, так и SET OOP OFF ? (This.oBrw.Object):ClassName // SET OOP OFF ? (This.oBrw.Object):Tsb:ClassName // SET OOP ON\OFF [/pre2]

gfilatov2002: SergKis пишет: наверно, надо убрать Предлагаю не убирать, но - передвинуть SergKis пишет: CASE Arg3 == "OBJECT" IF _HMG_lOOPEnabled #ifdef _OBJECT_ RetVal := _ControlObj ( Arg2 , Arg1 ) IF HB_ISOBJECT( RetVal ) .and. _HMG_aControlType[ RetVal:Index ] == "TBROWSE" RetVal := _HMG_aControlIds[ RetVal:Index ] ENDIF #endif ELSEIF ( ix := GetControlIndex ( Arg2 , Arg1 ) ) > 0 IF _HMG_aControlType[ ix ] == "TBROWSE" RetVal := _HMG_aControlIds[ ix ] ENDIF ENDIF

SergKis: gfilatov2002 Добавить в i_this.ch[pre2] ... #xtranslate This . <c> . <p:Names> => HMG_GetFormControls ( _HMG_THISFORMNAME , <(c)> ) #xtranslate This . <c> . <p:ClientWidth> => _GetClientRect ( GetControlHandle ( <(c)> , _HMG_THISFORMNAME ) ) \[3] [/pre2] Использовать aAll := This.All.Names ? "All controls name =", aAll ?v aAll ? aTsb := This.TBrowse.Names ? "TBrowse =", aTsb ?v aTsb ? aBtn := This.Button.Names ? "Button =", aBtn ?v aBtn ? aBtn := This.ButtonEx.Names ? "ButtonEx =", aBtn ?v aBtn ? В функциях примера demo7 можно заменить переменную ao на ac[pre2] AlertInfo( hb_memoread(_SetGetLogFile()), "INFO", , 0, , , ; {||ac,cn| // {|ao,cn| an := This.EditBox.Names // ao := (This.Object):GetObj4Type("EDITBOX") If HB_ISARRAY(an) .and. Len(an) == 1 // If HB_ISARRAY(ao) .and. Len(ao) == 1 cn := an[1] // ao[1]:Name This.Width := test.ClientWidth * 0.95 This.(cn).Row := 10 This.(cn).Col := 10 This.(cn).Width := This.ClientWidth - 10 * 2 This.(cn).Height := This.(cn).Height + 10 * 2 + 10 This.Center EndIf Return Nil } , .T. ) // .T. - lNoPlay [/pre2]

SergKis: PS Добавить еще[pre2] #xtranslate ThisWindow . <p:Names,Controls> => HMG_GetFormControls ( _HMG_THISFORMNAME , "ALL" ) ... #xtranslate This . <p:Names,Controls> => HMG_GetFormControls ( _HMG_THISFORMNAME , "ALL" ) ... [/pre2]

SergKis: gfilatov2002 Правка [pre2] METHOD AddColumn( oColumn ) CLASS TSBrowse ... If ATail( ::aColSizes ) == NIL .and. Len( ::aColSizes ) > 0 ::aColSizes[ Len( ::aColSizes ) ] := oColumn:nWidth ENDIF If ::aPostList != Nil // from ComboWBlock function ... [/pre2]

gfilatov2002: SergKis пишет: Правка OK



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