Автор | Сообщение |
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: 1482
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.04.19 12:03. Заголовок: SergKis пишет: Пред..
SergKis пишет: цитата: | Предлагаю добавить в CLASS TControl ... DATA lMsg AS LOGICAL INIT .T. ... METHOD SetMsg( cText, lDefault ) CLASS TControl ... If ! ::lMsg .or. ::nStatusItem < 1 return Nil EndIf ... тогда можно отключать "порчу" 1го itemа StatusBar, проделываемого TsBrowse |
| Благодарю за предложение Но что мешает уже сейчас присвоить с тем же результатом
| |
|
SergKis
|
| постоянный участник
|
Пост N: 2317
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.04.19 12:40. Заголовок: gfilatov2002 пишет Н..
gfilatov2002 пишет цитата: | Но что мешает уже сейчас присвоить |
| Как говорится, УПС. Вполне можно. В своей версии увидел DATA lMsg INIT .F. (всегда отключено, не исп. внутренний механизм тсб), вот и дернулся.
| |
|
Haz
|
| |
Пост N: 1450
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.04.19 14:56. Заголовок: Григорий , проверьт..
Григорий , проверьте точно ли исправления прошли в новой версии. После обновления опять словил глюк , глянул исходники - они не изменились Haz пишет:
цитата: | Григорий, уберите пожалуйста проверку на номер записи. С индексами и фильтром при наличии проверки не работает метод ( конкретно под ADS , остальное не проверял ) METHOD GotoRec( nRec, nRowPos ) CLASS TSBrowse LOCAL cAlias LOCAL nSkip LOCAL n LOCAL nRecSave LOCAL lRet := .F. LOCAL lReCount := .F. IF ::lIsDbf lRet := .T. cAlias := ::cAlias ::nLastPos := ( cAlias )->( RecNo() ) вот эта строка портит позицию если удалить все нормально nRec := Min( ( cAlias )->( LastRec() ), nRec ) |
| нужно удалить ( закоментить ) строки , у себя убрал. Глюк исчез If Empty( ( cAlias )->( dbFilter() ) ) nRec := Min( ( cAlias )->( LastRec() ), nRec ) EndIf
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1484
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.04.19 15:21. Заголовок: Haz пишет: удалить ..
Haz пишет: цитата: | удалить ( закоментить ) строки , у себя убрал. Глюк исчез If Empty( ( cAlias )->( dbFilter() ) ) nRec := Min( ( cAlias )->( LastRec() ), nRec ) EndIf |
| Убрал эти строки из метода GotoRec() Благодарю за проверку
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1485
Зарегистрирован: 11.02.10
|
|
Отправлено: 05.04.19 15:34. Заголовок: Andrey пишет: можно..
Andrey пишет: цитата: | можно эти функции добавить в базовые ? |
| Нет, это локальные одно-строчные функции, которые можно легко заменить с помощью препроцессорных команд #xtranslate цитата: | #xtranslate GetIni( cSection, cEntry, cDefault, cFile ) =>; GetPrivateProfileString(cSection, cEntry, cDefault, cFile ) *--------------------------------------------------------* #xtranslate WriteIni( cSection, cEntry, cValue, cFile ) =>; WritePrivateProfileString( cSection, cEntry, cValue, cFile ) *--------------------------------------------------------* #xtranslate IsINISection(cIniFile, cName) =>; ( aScan( _GetSectionNames(cIniFile), {|x| UPPER(x) == UPPER(cName)} ) > 0 ) *--------------------------------------------------------* #xtranslate IsVarINISection(cIniFile, cSecName, cName) =>; ( aScan( _GetSection(cSecName, cIniFile), {|x| UPPER(x[1]) == UPPER(cName)} ) > 0 ) |
|
| |
|
Haz
|
| |
Пост N: 1460
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.04.19 17:53. Заголовок: Предложение в TsBrowse
Часто требуется узнать какой хороший человек отредактировал данные в таблице. У себя задаче решил через ::bPrevEdit и ::bPostEdit в колонках Но поскольку бровсов уже более 50 и это не предел , поднадоело в каждом это прописывать. Предлагаю включить в библиотеку базовый механизм 1 в данных бровса определить DATA xOldEditValue DATA xNewEditValue DATA bEditLog 2 в METHOD Edit CLASS TSbrowse добавить Default nCell := ::nCell, ; ::lPostEdit := .F., ; ::lNoPaint := .F. ::xOldEditValue := ::xNewEditValue := Eval(::aColumns[ nCell ]:bData ) 3 в конце METHOD PostEdit CLASS TSbrowse добавить ::xNewEditValue := Eval(::aColumns[ ::nCell ]:bData) if hb_isBlock( ::bEditLog ) Eval( ::bEditLog, ::xOldEditValue, ::xNewEditValue, Self ) end Return Nil тогда в своей программе при определении бровса достаточно указать oBrw:bEditLog := { |a,b,c| WriteEditLog( a, b, c:cAlias ) } и прописать саму функцию в которой в базу или текстовик вести протокол кто когда что и тд Func WriteEditLog ( xOld, xNew, cAlias ) ... ... return nil Как идейка
| |
|
SergKis
|
| постоянный участник
|
Пост N: 2395
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.04.19 18:22. Заголовок: Haz пишет Как идейка..
Haz пишет На первый взгляд, ОК! только ::xOldEditValue := ::xNewEditValue := ::bDataEval( ::aColumns[ nCell ], , nCell ) и ::xNewEditValue := ::bDataEval( ::aColumns[ nCell ], , nCell )
| |
|
SergKis
|
| постоянный участник
|
Пост N: 2396
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.04.19 18:26. Заголовок: PS if hb_isBlock..
PS if hb_isBlock( ::bEditLog ) .and. ::xOldEditValue != ::xNewEditValue Eval( ::bEditLog, ::xOldEditValue, ::xNewEditValue, Self ) end
| |
|
SergKis
|
| постоянный участник
|
Пост N: 2397
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.04.19 18:30. Заголовок: PPS Возможно, эти пе..
PPS Возможно, эти переменные надо не CLASS TsBrowse, а в CLASS TsColumn Тогда все колонки тек. линии будут иметь старые, новые значения
| |
|
Haz
|
| |
Пост N: 1461
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.04.19 18:31. Заголовок: SergKis пишет: На п..
SergKis пишет: Спасибо за правки
| |
|
Haz
|
| |
Пост N: 1462
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.04.19 18:34. Заголовок: SergKis пишет: PPS ..
SergKis пишет: цитата: | PPS Возможно, эти переменные надо не CLASS TsBrowse, а в CLASS TsColumn Тогда все колонки тек. линии будут иметь старые, новые значения |
| Нет смысла , редактируется всегда только одна из колонок в один момент времени
| |
|
|
Haz
|
| |
Пост N: 1463
Зарегистрирован: 20.02.11
|
|
Отправлено: 18.04.19 18:36. Заголовок: Haz пишет: Нет смыс..
Haz пишет: цитата: | Нет смысла , редактируется всегда только одна из колонок в один момент времени |
| хотя , если в TsColumn , то это позволит undo по строке сделать
| |
|
SergKis
|
| постоянный участник
|
Пост N: 2398
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.04.19 18:41. Заголовок: И в TsColumn должно ..
И в TsColumn должно быть достаточным только старое значение, а новое в bPostEdit должно быть определено. Именно для Undo и есть смысл в колонке иметь старое значение
| |
|
Haz
|
| |
Пост N: 1466
Зарегистрирован: 20.02.11
|
|
Отправлено: 19.04.19 11:55. Заголовок: В общем пока получил..
В общем пока получилось так CLASS TSColumn ... DATA xOldEditValue CLASS TSBrowse ... DATA bEditLog METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, ; nClrBack ) CLASS TSBrowse Local nRow, nHeight, cType, uValue, nI, aGet, oCol, cMsg, aRct, bChange, lSpinner, bUp, bDown, ; bMin, bMax, nStartX, nWidth, lCombo, lMulti, nCol, lLogicDrop, lPicker, nTxtHeight, hFont, ix Local cWnd := ::cControlName Local nK, aKey, oGet Default nCell := ::nCell, ; ::lPostEdit := .F., ; ::lNoPaint := .F. ::aColumns[ nCell ]:xOldEditValue := ::bDataEval( ::aColumns[ nCell ], , nCell ) METHOD PostEdit( uTemp, nCol, bValid ) CLASS TSBrowse Local aMoveCell, bRecLock, bAddRec, cAlias, uRet, ; nLastKey := ::oWnd:nLastKey, ; lAppend := ::lAppendMode, xNewEditValue ... // в самом конце xNewEditValue := ::bDataEval( ::aColumns[ ::nCell ], , ::nCell ) if hb_isBlock( ::bEditLog ) .and. ::aColumns[ ::nCell ]:xOldEditValue != xNewEditValue Eval( ::bEditLog, ::aColumns[ ::nCell ]:xOldEditValue, xNewEditValue, Self ) end Return Nil После объявления в своей программе oBrw:bEditLog := { |a,b,c| WriteEditLog( a, b, c ) } все передается корректно
| |
|
SergKis
|
| постоянный участник
|
Пост N: 2441
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.04.19 20:35. Заголовок: gfilatov2002 Управл..
gfilatov2002 Управление линиями в колонке METHOD DrawLine( xRow ) CLASS TSBrowse ... oColumn := If( nJ > Len( ::aColumns ), ::oPhant, ::aColumns[ nJ ] ) nLineStyle := ::nLineStyle If HB_ISNUMERIC(oColumn:nLineStyle) nLineStyle := oColumn:nLineStyle EndIf cPicture := ::cPictureGet( oColumn, nJ ) ... METHOD DrawSelect( xRow ) CLASS TSBrowse ... oColumn := If( nJ > Len( ::aColumns ), ::oPhant, ::aColumns[ nJ ] ) nLineStyle := ::nLineStyle If HB_ISNUMERIC(oColumn:nLineStyle) nLineStyle := oColumn:nLineStyle EndIf hFont := ::hFontGet( oColumn, nJ ) ... CLASS TSColumn ... DATA nLineStyle ... Пример // LINES_NONE LINES_ALL LINES_VERT LINES_HORZ LINES_3D LINES_DOTTED oCol:nLineStyle := LINES_HORZ или oCol:nLineStyle := LINES_NONE
| |
|
SergKis
|
| постоянный участник
|
Пост N: 2442
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.04.19 21:09. Заголовок: gfilatov2002 Для He..
gfilatov2002 Для Header, Footer тоже самое можно сделать CLASS TSColumn ... DATA nLineStyle DATA nHLineStyle DATA nSLineStyle // SpecHd DATA nFLineStyle ... METHOD DrawHeaders( lFooters ) CLASS TSBrowse ... nClrLine := ::nClrLine Local nLineStyle := 1 Default lFooters := .F. ... Else l3DText := nClr3dL := nClr3dS := Nil EndIf nLineStyle := 1 If HB_ISNUMERIC(oColumn:nHLineStyle) nLineStyle := oColumn:nHLineStyle EndIf TSDrawCell( hWnd, ; // 1 hDC, ; // 2 0, ; // 3 nStartCol, ; // 4 aColSizes[ nJ ], ; // 5 cHeading, ; // 6 nAlign, ; // 7 nClrFore, ; // 8 nClrBack, ; // 9 hFont, ; // 10 hBitMap, ; // 11 nHeightHead, ; // 12 l3DLook, ; // 13 nLineStyle, ; // 14 nLineStyle nClrLine, ; // 15 1, ; // 16 1=Header 2=Footer 3=Super 4=Special ... IF ::lDrawSpecHd ... Else l3DText := nClr3dL := nClr3dS := Nil EndIf nLineStyle := 1 If HB_ISNUMERIC(oColumn:nSLineStyle) nLineStyle := oColumn:nSLineStyle EndIf TSDrawCell( hWnd, ; // 1 hDC, ; // 2 0, ; // 3 nStartCol, ; // 4 aColSizes[nJ], ; // 5 cHeading, ; // 6 nAlign, ; // 7 nClrFore, ; // 8 nClrBackS, ; // 9 hFont, ; // 10 hBitMap, ; // 11 0, ; // 12 nHeightFoot l3DLook, ; // 13 nLineStyle, ; // 14 nLineStyle nClrLine, ; // 15 4, ; // 16 1=Header 2=Footer 3=Super 4=Special ... If ::lFooting .and. ::lDrawFooters ... Else l3DText := nClr3dL := nClr3dS := Nil EndIf nLineStyle := 1 If HB_ISNUMERIC(oColumn:nFLineStyle) nLineStyle := oColumn:nFLineStyle EndIf TSDrawCell( hWnd, ; // 1 hDC, ; // 2 ::nRowCount(), ; // 3 nStartCol, ; // 4 aColSizes[nJ], ; // 5 cFooting, ; // 6 nAlign, ; // 7 nClrFore, ; // 8 nClrBack, ; // 9 hFont, ; // 10 hBitMap, ; // 11 nHeightFoot, ; // 12 l3DLook, ; // 13 nLineStyle, ; // 14 nLineStyle nClrLine, ; // 15 2, ; // 16 1=Header 2=Footer 3=Super ...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 2443
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.04.19 08:55. Заголовок: gfilatov2002 Предла..
gfilatov2002 Предлагаю добавить для блокировки перехода на др. строку вверх\вниз при :PostEdit (oCol:EditMove работает) CLASS TSBrowse FROM TControl ... DATA lPostEdit // to detect postediting DATA lPostEditGo AS LOGICAL INIT .T. // to detect postediting VK_UP,VK_RIGHT,VK_LEFT,VK_DOWN ... METHOD PostEdit( uTemp, nCol, bValid ) CLASS TSBrowse ... ( cAlias )->( DbSkip( 0 ) ) // refresh relations just in case that a relation field changes ::SetFocus() If nLastKey == VK_UP .and. ::lPostEditGo ::GoUp() ElseIf nLastkey == VK_RIGHT .and. ::lPostEditGo ::GoRight() ElseIf nLastkey == VK_LEFT .and. ::lPostEditGo ::GoLeft() ElseIf nLastkey == VK_DOWN .and. ::lPostEditGo ::GoDown() ::Refresh( .F. ) ElseIf ::aColumns[ nCol ]:nEditMove >= 1 .and. ::aColumns[ nCol ]:nEditMove <= 5 // excel-like behavior post-edit movement Eval( aMoveCell[ ::aColumns[ nCol ]:nEditMove ] ) ::DrawSelect() If ! ::lAppendMode ::Refresh( .F. ) EndIf ElseIf ::aColumns[ nCol ]:nEditMove == 0 .and. ! ::lAutoEdit ::DrawSelect() EndIf ::oWnd:nLastKey := Nil ... Else If lAppend .and. ::lIsArr ... ::SetFocus() If nLastKey == VK_UP .and. ::lPostEditGo ::GoUp() ElseIf nLastkey == VK_RIGHT .and. ::lPostEditGo ::GoRight() ElseIf nLastkey == VK_LEFT .and. ::lPostEditGo ::GoLeft() ElseIf nLastkey == VK_DOWN .and. ::lPostEditGo ::GoDown() ::Refresh( .F. ) ElseIf ::aColumns[ nCol ]:nEditMove >= 1 .and. ::aColumns[ nCol ]:nEditMove <= 5 // excel-like behaviour post-edit movement Eval( aMoveCell[ ::aColumns[ nCol ]:nEditMove ] ) ElseIf ::aColumns[ nCol ]:nEditMove == 0 ::DrawSelect() EndIf ::oWnd:nLastKey := Nil ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1494
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.04.19 10:43. Заголовок: SergKis Добавил эти..
SergKis Добавил эти изменения, хотя и считаю их необязательными Благодарю за помощь
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1495
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.04.19 11:03. Заголовок: Просто к сведению З..
Просто к сведению Завершена подготовка следующей сборки 19.04, которая выйдет на этой неделе Список изменений для новой сборки можно увидеть на сайте библиотеки (файл ChangelogHMG.docx).
| |
|
SergKis
|
| постоянный участник
|
Пост N: 2447
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.04.19 11:41. Заголовок: gfilatov2002 пишет Д..
gfilatov2002 пишет цитата: | Добавил эти изменения, хотя и считаю их необязательными |
| Согласен, что это мелочь. Но линиями давно хотел заняться, т.к. надо часто показывать колонки, как одну графу, суперхидер над ней занят. Приходилось показывать через выражение, а модифицировать на окне как отдельные поля\getbox. Второе изменение, по мне, более четко отрабатывает установленный на колонки :nEditMove алгоритм, не перескакивая на др. запись, отличную от строки с :Edit
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|