Автор | Сообщение |
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
[только новые]
|
|
kkg
|
| |
Пост N: 19
Зарегистрирован: 29.11.19
|
|
Отправлено: 09.02.20 11:00. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Обновил сборку 20.01 (Update 3) |
| а можно в стандартный комплект поставки bcc101 добавить библиотечку SQLMIX (hbsqldd.lib) ? Спасибо.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3036
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.02.20 12:49. Заголовок: gfilatov2002 Надо п..
gfilatov2002 Надо поправить 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 ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1649
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.02.20 19:27. Заголовок: SergKis пишет: Надо..
SergKis пишет: При добавлении этого кода в заголовок таблицы попадет только одна строка наибольшей длины из много-строчного заголовка. Остальные строки этого много-строчного заголовка будут удалены. В чем смысл этой поправки
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3040
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.02.20 19:49. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет цитата: | При добавлении этого кода в заголовок таблицы попадет только одна строка наибольшей длины из много-строчного заголовка. Остальные строки этого много-строчного заголовка будут удалены. В чем смысл этой поправки |
| Эта поправка для правильного расчета ширины колонки, берется самое длинное слово для участия в расчете, иначе ширина колонки получается по всем словам с учетом CRLF. Текст в header потом выводится правильный, полностью все с переносом и ширина max от выделенного слова и значения в колонке. Так работает в моей версии. После такой правки колонка после LoadFields рассчитана хорошо и показывает аналогично.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3041
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.02.20 20:25. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет цитата: | При добавлении этого кода в заголовок таблицы попадет только одна строка наибольшей длины из много-строчного заголовка. |
| Прошу прощения, упустил, что у меня стоит перед созданием колонки 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, ; ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3042
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.02.20 20:32. Заголовок: PS Правда у меня все..
PS Правда у меня всегда включен расчет nSize, т.е. cPicture := "@K "+cPicture EndIf // If nSize == Nil cData := ( cAlias )->( FieldGet( nE ) ) ... nSize += If( ! Empty( cOrder ), 14, 0 ) //V90 // EndIf но это связано связано с переносом :LoadFields(...) под команды файла ch, изложенное во флайме сегодня.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1650
Зарегистрирован: 11.02.10
|
|
Отправлено: 09.02.20 20:43. Заголовок: SergKis пишет: прощ..
SergKis пишет: Да, после такой переделки обработка заголовка отработала нормально Благодарю за помощь
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6583
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.02.20 10:01. Заголовок: SergKis пишет: Эта ..
SergKis пишет: цитата: | Эта поправка для правильного расчета ширины колонки, берется самое длинное слово для участия в расчете, иначе ширина колонки получается по всем словам с учетом CRLF. Текст в header потом выводится правильный, полностью все с переносом и ширина max от выделенного слова и значения в колонке. Так работает в моей версии. После такой правки колонка после LoadFields рассчитана хорошо и показывает аналогично. |
| Классно ! Это когда будет включено в МиниГуи ? А то у меня своя функция криво работает...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3044
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.02.20 12:54. Заголовок: gfilatov2002 Поправ..
gfilatov2002 Поправил у себя 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) ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1651
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.02.20 13:51. Заголовок: SergKis пишет: Попр..
SergKis пишет: Добавил такую проверку также
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3051
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.02.20 12:21. Заголовок: gfilatov2002 Предла..
gfilatov2002 Предлагаю добавить проверку 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, ; Если высота ширина заданы, то есть шанс при переносе на др. комп, с др. монитором попадать на размеры окна > экрана, что произошло с примером CBru.exe на др. pc.
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3052
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.02.20 12:53. Заголовок: PS У меня, еще, така..
PS У меня, еще, такая штука присутствует 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 ; ... разместит окно в правом нижнем углу но может это и баловство ?
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1654
Зарегистрирован: 11.02.10
|
|
Отправлено: 11.02.20 13:29. Заголовок: SergKis пишет: доба..
SergKis пишет: Благодарю за предложение. Пока сделал эту проверку таким образом: цитата: | IF ! ISNUMBER( w ) .AND. ! ISNUMBER( h ) ... ELSE w := Min( w, GetDesktopWidth() ) h := Min( h, GetDesktopHeight() - GetTaskBarHeight() ) ENDIF mVar := '_' + FormName ... |
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3056
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.02.20 08:35. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет цитата: | Пока сделал эту проверку таким образом: |
| В большинстве случаев задаю ширину, высоту окон в процентном отношении к клиентской обл. Descktop, т.е. w := GetClientWidth(0) * 0.4 h := GetClientHeight(0)*0.6 оказалось, что удобно располагать окно по координатам, также в процентах, т.е. запись удобна 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 как параметры, на мой взгляд, удобно динамически, при вызовах, задавать позиции и размеры окна. Это актуально для небольших, в размерах, справочниках. Располагая сразу, при вызове, удобно для клиента, часто, не надо делать запоминание координат и размеров для одного и того же окна справочника.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 3057
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.02.20 09:55. Заголовок: gfilatov2002 Не был..
gfilatov2002 Не было учтено в ch для tbrowse :lAdjColumn := .T. Сделал у себя так 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.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1655
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.20 10:54. Заголовок: SergKis пишет: Не б..
SergKis пишет: цитата: | Не было учтено в ch для tbrowse |
| Благодарю за поправку
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1656
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.20 11:39. Заголовок: Всем кому это интересно
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1658
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.02.20 11:41. Заголовок: Всем кому это интересно
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1659
Зарегистрирован: 11.02.10
|
|
Отправлено: 25.02.20 11:14. Заголовок: Снова обновил сборку..
Снова обновил сборку 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
|
| постоянный участник
|
Пост N: 3073
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.02.20 12:32. Заголовок: gfilatov2002 пишет С..
gfilatov2002 пишет цитата: | Снова обновил сборку 20.01 (Update 6) с учетом последних наработок |
| Андрей говорил, дать правку для TBrowse, а я не дал. Для одинаковой работы с колонкой в :bDecode и :bPrevEdit 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 } ...
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|