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

kkg: gfilatov2002 пишет: Обновил сборку 20.01 (Update 3) а можно в стандартный комплект поставки bcc101 добавить библиотечку SQLMIX (hbsqldd.lib) ? Спасибо.

SergKis: gfilatov2002 Надо поправить [pre2] METHOD LoadFields( lEditable, aColSel, cAlsSel, aNameSel, aHeadSel ) CLASS TSBrowse ... Local cTmp ... If ValType(::aHeaders) == "A" .and. ! empty(::aHeaders) .and. n <= Len( ::aHeaders ) cHeading := ::aHeaders[ n ] IF CRLF $ cHeading cData := "" FOR EACH cTmp IN hb_ATokens(cHeading, CRLF) IF Len(cTmp) > Len(cData) cData := cTmp EndIf NEXT cHeading := cData cData := NIL ENDIF Else cHeading := ::Proper( ( cAlias )->( Field( nE ) ) ) EndIf ... [/pre2]

gfilatov2002: SergKis пишет: Надо поправить При добавлении этого кода в заголовок таблицы попадет только одна строка наибольшей длины из много-строчного заголовка. Остальные строки этого много-строчного заголовка будут удалены. В чем смысл этой поправки


SergKis: gfilatov2002 пишет При добавлении этого кода в заголовок таблицы попадет только одна строка наибольшей длины из много-строчного заголовка. Остальные строки этого много-строчного заголовка будут удалены. В чем смысл этой поправки Эта поправка для правильного расчета ширины колонки, берется самое длинное слово для участия в расчете, иначе ширина колонки получается по всем словам с учетом CRLF. Текст в header потом выводится правильный, полностью все с переносом и ширина max от выделенного слова и значения в колонке. Так работает в моей версии. После такой правки колонка после LoadFields рассчитана хорошо и показывает аналогично.

SergKis: gfilatov2002 пишет При добавлении этого кода в заголовок таблицы попадет только одна строка наибольшей длины из много-строчного заголовка. Прошу прощения, упустил, что у меня стоит перед созданием колонки [pre2] If ValType(::aHeaders) == "A" .and. ! empty(::aHeaders) .and. n <= Len( ::aHeaders ) // .08. cHeading := ::aHeaders[ n ] EndIf If HB_ISARRAY( aHeadSel ) .and. Len( aHeadSel ) > 0 .and. n <= Len( aHeadSel ) .and. aHeadSel[ n ] != Nil cHeading := aHeadSel[ n ] EndIf т.е. восстанавливаются данные cHeading + я упустил из вида вариант If HB_ISARRAY( aHeadSel ) .and. Len( aHeadSel ) > 0 .and. n <= Len( aHeadSel ) .and. aHeadSel[ n ] != Nil cHeading := aHeadSel[ n ] EndIf при выделении слова из заголовка. Наверно проще переделать так Local cTmp, cHead ... If ValType(::aHeaders) == "A" .and. ! empty(::aHeaders) .and. n <= Len( ::aHeaders ) // .08. cHeading := ::aHeaders[ n ] cHead := cHeading Else cHeading := ::Proper( ( cAlias )->( Field( nE ) ) ) EndIf If HB_ISARRAY( aHeadSel ) .and. Len( aHeadSel ) > 0 .and. n <= Len( aHeadSel ) .and. aHeadSel[ n ] != Nil cHeading := aHeadSel[ n ] cHead := cHeading EndIf IF CRLF $ cHeading cData := "" FOR EACH cTmp IN hb_ATokens(cHeading, CRLF) IF Len(cTmp) > Len(cData) cData := cTmp EndIf NEXT cHeading := cData cData := NIL ENDIF ... If HB_ISCHAR(cHead) cHeading := cHead EndIf cBlock := 'FieldWBlock("' + aStru[ nE, 1 ] + '",Select("' + cAlias + '"))' ::AddColumn( TSColumn():New( cHeading, FieldWBlock( aStru[ nE, 1 ], Select( cAlias ) ),cPicture, ; ... [/pre2]

SergKis: PS Правда у меня всегда включен расчет nSize, т.е. [pre2] cPicture := "@K "+cPicture EndIf // If nSize == Nil cData := ( cAlias )->( FieldGet( nE ) ) ... nSize += If( ! Empty( cOrder ), 14, 0 ) //V90 // EndIf [/pre2] но это связано связано с переносом :LoadFields(...) под команды файла ch, изложенное во флайме сегодня.

gfilatov2002: SergKis пишет: проще переделать так Да, после такой переделки обработка заголовка отработала нормально Благодарю за помощь

Andrey: SergKis пишет: Эта поправка для правильного расчета ширины колонки, берется самое длинное слово для участия в расчете, иначе ширина колонки получается по всем словам с учетом CRLF. Текст в header потом выводится правильный, полностью все с переносом и ширина max от выделенного слова и значения в колонке. Так работает в моей версии. После такой правки колонка после LoadFields рассчитана хорошо и показывает аналогично. Классно ! Это когда будет включено в МиниГуи ? А то у меня своя функция криво работает...

SergKis: gfilatov2002 Поправил у себя [pre2] METHOD AdjColumns( aColumns, nDelta ) CLASS TSBrowse // BK 2018.03.20 ... LOCAL nBrwLen := GetWindowWidth( ::hWnd ) - iif( ::lNoVScroll, 0, GetVScrollBarWidth() ) - ; iif( HB_ISNUMERIC(nDelta), nDelta, 1 ) IF HB_ISLOGICAL(aColumns) IF ! aColumns ; RETURN NIL ENDIF aColumns := NIL ENDIF If empty(aColumns) ... [/pre2]

gfilatov2002: SergKis пишет: Поправил у себя Добавил такую проверку также

SergKis: gfilatov2002 Предлагаю добавить проверку [pre2] IF w > GetDesktopWidth() ; w := GetDesktopWidth() ENDIF IF h > ( GetDesktopHeight() - GetTaskBarHeight() ) ; h := GetDesktopHeight() - GetTaskBarHeight() ENDIF перед строкой с mVar := '_' + FormName в функции FUNCTION _DefineWindow ( FormName, Caption, x, y, w, h, nominimize, nomaximize, ; FUNCTION _DefineModalWindow ( FormName, Caption, x, y, w, h, Parent, nosize, nosysmenu, nocaption, aMin, aMax, ; [/pre2] Если высота ширина заданы, то есть шанс при переносе на др. комп, с др. монитором попадать на размеры окна > экрана, что произошло с примером CBru.exe на др. pc.

SergKis: PS У меня, еще, такая штука присутствует [pre2] IF y > 0 .and. y < 1 ; y := int( GetClientHeight(0) * y ) ENDIF IF x > 0 .and. x < 1 ; x := int( GetClientWidth (0) * x ) ENDIF IF w > 0 .and. w < 1 ; w := int( GetClientWidth (0) * w ) ENDIF IF h > 0 .and. h < 1 ; h := int( GetClientHeight(0) * h ) ENDIF IF w > GetClientWidth (0) ; w := GetClientWidth (0) ENDIF IF h > GetClientHeight(0) ; h := GetClientHeight(0) ENDIF ... для управления положением окна с отключенным CENTER WINDOW ... , т.е. DEFINE WINDOW Form_0 ; At 0.5,0.5 ; WIDTH 0.5 ; HEIGHT 0.5 ; ... разместит окно в правом нижнем углу [/pre2] но может это и баловство ?

gfilatov2002: SergKis пишет: добавить проверку Благодарю за предложение. Пока сделал эту проверку таким образом: IF ! ISNUMBER( w ) .AND. ! ISNUMBER( h ) ... ELSE w := Min( w, GetDesktopWidth() ) h := Min( h, GetDesktopHeight() - GetTaskBarHeight() ) ENDIF mVar := '_' + FormName ...

SergKis: gfilatov2002 пишет Пока сделал эту проверку таким образом: В большинстве случаев задаю ширину, высоту окон в процентном отношении к клиентской обл. Descktop, т.е. w := GetClientWidth(0) * 0.4 h := GetClientHeight(0)*0.6 оказалось, что удобно располагать окно по координатам, также в процентах, т.е. запись удобна [pre2] DEFINE WINDOW Form_0 ; At 0.4,0.6 ; WIDTH 0.4 ; HEIGHT 0.6 ; для расположения в правом нижнем углу экрана DEFINE WINDOW Form_0 ; At 0,0.6 ; WIDTH 0.4 ; HEIGHT 0.6 ; для расположения в правом верхнем углу экрана DEFINE WINDOW Form_0 ; At 0.4,0 ; WIDTH 0.4 ; HEIGHT 0.5 ; в левом нижнем и т.д. т.е. оформив y,x,w,h как параметры, на мой взгляд, удобно динамически, при вызовах, задавать позиции и размеры окна. Это актуально для небольших, в размерах, справочниках. Располагая сразу, при вызове, удобно для клиента, часто, не надо делать запоминание координат и размеров для одного и того же окна справочника. [/pre2]

SergKis: gfilatov2002 Не было учтено в ch для tbrowse :lAdjColumn := .T. Сделал у себя так [pre2] Function _DefineTBrowse ( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight,; ... oBrw:nHeightCell += 4 IF ! ( Adjust == NIL .and. lAdjust == NIL ) IF HB_ISLOGICAL(lAdjust) .and. lAdjust Adjust := lAdjust ENDIF IF Adjust != NIL oBrw:AdjColumns(Adjust) ENDIF ENDIF ... METHOD AdjColumns( aColumns, nDelta ) CLASS TSBrowse // BK 2018.03.20 ... IF HB_ISLOGICAL(aColumns) IF ! aColumns ::lAdjColumn := .T. RETURN NIL ENDIF aColumns := NIL ENDIF ... тогда в примере CBru.prg ... DEFINE TBROWSE oBrw AT nY, nX ALIAS cAlias WIDTH nW HEIGHT nH GRID ; ... FOOTERS .T. ; LOADFIELDS FIXED ... не будет работать :AdjColumns() ... FOOTERS .T. ; LOADFIELDS FIXED ; COLADJUST .T. // или {...} будет работать :AdjColumns(.T.) // :AdjColumns({...}) FOOTERS .T. ; LOADFIELDS FIXED ; COLADJUST .F. будет работать :AdjColumns(.F.), т.е. установка :lAdjColumn := .T. [/pre2]

gfilatov2002: SergKis пишет: Не было учтено в ch для tbrowse Благодарю за поправку

gfilatov2002: Обновил сборку 20.01 (Update 4) с учетом последних предложений Сергея Киселева Базовый дистрибутив для BCC 5.8.2 находится по адресу http://hmgextended.com/files/CONTRIB/hmg-20.01-setup.exe Обновил также архив для бесплатного Embarcadero C++ 10.1 Berlin compiler по адресу http://hmgextended.com/files/CONTRIB/hmg2001_bcc101.exe Благодарю за ваше внимание

gfilatov2002: Обновил сборку 20.01 (Update 5) с учетом последних наработок Базовый дистрибутив для BCC 5.8.2 находится по адресу http://hmgextended.com/files/CONTRIB/hmg-20.01-setup.exe Обновил также архив для бесплатного Embarcadero C++ 10.1 Berlin compiler по адресу http://hmgextended.com/files/CONTRIB/hmg2001_bcc101.exe Выпуск дальнейших обновлений (и сборок) не планируется по понятным причинам...

gfilatov2002: Снова обновил сборку 20.01 (Update 6) с учетом последних наработок Базовый дистрибутив для BCC 5.8.2 находится по адресу http://hmgextended.com/files/CONTRIB/hmg-20.01-setup.exe Обновил также архив для бесплатного Embarcadero C++ 10.1 Berlin compiler по адресу http://hmgextended.com/files/CONTRIB/hmg2001_bcc101.exe Добавлен новый/старый редактор форм GuiDes Андрею должно понравится такое изменение: * Fixed: Removed ButtonEx`s flickering at a MOUSEHOVER event. Contributed by Milomir Zecevic <zeka/at/bnbos.rs> (see menulist_2.prg in folder \samples\Advanced\MenuList)

SergKis: gfilatov2002 пишет Снова обновил сборку 20.01 (Update 6) с учетом последних наработок Андрей говорил, дать правку для TBrowse, а я не дал. Для одинаковой работы с колонкой в :bDecode и :bPrevEdit[pre2] METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, ; ... If oCol:bPrevEdit != Nil If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) // append mode for arrays ElseIf nKey != VK_RETURN // GF 15-10-2015 uVar := Eval( oCol:bPrevEdit, uValue, Self, nCell, oCol ) If ValType( uVar ) == "L" .and. ! uVar nKey := VK_RETURN EndIf EndIf EndIf ... METHOD KeyDown( nKey, nFlags ) CLASS TSBrowse ... ::oWnd:nLastKey := nKey If ::aColumns[ nCol ]:bPrevEdit != Nil If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) // append mode for arrays Else // GF 16-05-2008 uVal := ::bDataEval( ::aColumns[ nCol ] ) uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self, nCol, ::aColumns[ nCol ] ) If ValType( uVal ) == "L" .and. ! uVal Return 0 EndIf EndIf EndIf... ... что бы не делать доп. переменных, а использовать :cargo колонки, например (от Андрея): a2Dim4 := Get2DimCol4() // получить массив для колонки 4 меняем oCol := oBrw:GetColumn("Name_4") oCol:Cargo := Get2DimCol4() // получить массив для колонки 4 oCol:bDecode := {|val,ob,nc,oc| nc:=ob, Select2Array(val, oc:Cargo) } oCol:nAlign := DT_CENTER oCol:cPicture := REPL("x",25) oCol:lEdit := .T. oCol:bPrevEdit := {|val,ob,nc,oc| SelectWho(ob, oc:Cargo), WriteColum4(ob), ob:Setfocus(), FALSE } ... [/pre2]



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