Автор | Сообщение |
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
[только новые]
|
|
Andrey
|
| постоянный участник
|
Пост N: 6389
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.08.19 12:28. Заголовок: Всем привет ! Вопрос..
Всем привет ! Вопрос возник, а почему в ресурсах МиниГуи нет иконки самого МиниГуи - официальной ? Примеры тестовые делать можно было бы с официальной иконкой, а то и не знаешь какой вариант использовать. И второй вопрос, почему нет в ядре МиниГуи функции _ShowContextMenu() ? Замучился таскать её в проекты, частенько использую для тестовых проектов. Григорий, добавь пожалуйста эту функцию в ядро.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1560
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.08.19 13:31. Заголовок: Andrey пишет: Вопро..
Andrey пишет: цитата: | Вопрос возник, а почему в ресурсах МиниГуи нет иконки самого МиниГуи - официальной ? |
| Спасибо за вопрос Дело в том, что в разное время были разные иконки, а сейчас - такая, как на моей аватарке. Поэтому проще просто поместить эту иконку в папку с примером и подключать ее из файла, а не из ресурсов Andrey пишет: цитата: | второй вопрос, почему нет в ядре МиниГуи функции _ShowContextMenu() ? |
| Потому, что эта функция не доработана до конца (в частности, режим центрирования).
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6390
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.08.19 15:13. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Потому, что эта функция не доработана до конца (в частности, режим центрирования). |
| Доработайте пожалуйста и включите, нужна очень. Вроде нормально работает в приложениях, нормально центрируется.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1561
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.08.19 20:14. Заголовок: Andrey пишет: включ..
Andrey пишет: Добавил эту функцию в новую сборку 19.08
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 6392
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.08.19 15:51. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Добавил эту функцию в новую сборку 19.08 |
| Спасибо ! Выслал примеры по Tsbrowse с карточкой + блокировка записей на почту. Вопрос возник по Tab. Показываю окно с Tab карточкой юзеру. На медленных компах видно как этот Tab дергается, т.е. на Tab вывожу объекты Label и GetBox. Там их много, порядка 150 объектов. Вот и дергается Tab. Можно как то это "дерганье" убрать ?
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2740
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.08.19 14:00. Заголовок: gfilatov2002 Предло..
gfilatov2002 Предложение по растяжке предпоследней колонки показа, если последняя не помещается в размер тсб, при горизонтальном скроллинге колонок. CLASS TSBrowse FROM TControl ... DATA lAdjColumn AS LOGICAL INIT .F. // column expands to flush table window right ... METHOD GetDeltaLen( nCol, nStartCol, nMaxWidth, aColSizes ) CLASS TSBrowse Local nDeltaLen := 0 If ::lAdjColumn .and. nCol < Len( ::aColumns ) If ( nStartCol + aColSizes[ nCol ] + aColSizes[ nCol + 1 ] ) > nMaxWidth nDeltaLen := nMaxWidth - ( nStartCol + aColSizes[ nCol ] ) EndIf EndIf RETURN nDeltaLen ... METHOD DrawHeaders( lFooters ) CLASS TSBrowse ... Local nDeltaLen ... For nI := nBegin To nLastCol If nStartCol >= nMaxWidth Exit EndIf nJ := If( nI < ::nColPos, nJ + 1, nI ) oColumn := If( nJ > Len( ::aColumns ), ::oPhant, ::aColumns[ nJ ] ) nDeltaLen := ::GetDeltaLen( nJ, nStartCol, nMaxWidth, aColSizes ) ... TSDrawCell( hWnd, ; // 1 hDC, ; // 2 0, ; // 3 nStartCol, ; // 4 aColSizes[ nJ ] + nDeltaLen, ; // 5 ... IF ::lDrawSpecHd ... TSDrawCell( hWnd, ; // 1 hDC, ; // 2 0, ; // 3 nStartCol, ; // 4 aColSizes[nJ] + nDeltaLen, ; // 5 ... If ::lFooting .and. ::lDrawFooters ... TSDrawCell( hWnd, ; // 1 hDC, ; // 2 ::nRowCount(), ; // 3 nStartCol, ; // 4 aColSizes[nJ] + nDeltaLen, ; // 5 ... EndIf nStartCol += aColSizes[nJ] + nDeltaLen Next Return Self ... METHOD DrawLine( xRow ) CLASS TSBrowse ... Local nDeltaLen ... For nI := nBegin To nLastCol If nStartCol >= nMaxWidth Exit EndIf nJ := If( nI < ::nColPos, nJ + 1, nI ) lSelected := If( nJ == nLastCol, .F., lSelected ) nLineStyle := ::nLineStyle oColumn := If( nJ > Len( ::aColumns ), ::oPhant, ::aColumns[ nJ ] ) nDeltaLen := ::GetDeltaLen( nJ, nStartCol, nMaxWidth, aColSizes ) ... TSDrawCell( hWnd, ; // 1 hDC, ; // 2 xRow, ; // 3 nStartCol , ; // 4 aColSizes[ nJ ] + nDeltaLen, ; // 5 ... nStartCol += aColSizes[ nJ ] + nDeltaLen Next EndIf Return Self ... METHOD DrawSelect( xRow ) CLASS TSBrowse ... Local nDeltaLen ... For nI := nBegin To nLastCol If nStartCol >= nMaxWidth Exit EndIf nJ := If( nI < ::nColPos, nJ + 1, nI ) oColumn := If( nJ > Len( ::aColumns ), ::oPhant, ::aColumns[ nJ ] ) nLineStyle := ::nLineStyle nDeltaLen := ::GetDeltaLen( nJ, nStartCol, nMaxWidth, aColSizes ) ... TSDrawCell( hWnd, ; // 1 hDC, ; // 2 nRowPos, ; // 3 nStartCol, ; // 4 aColSizes[ nJ ] + nDeltaLen, ; // 5 ... !(::lCellBrw .and. nJ != ::nCell) ) // 32 Invert color nStartCol += aColSizes[ nJ ] + nDeltaLen Next EndIf ... SuperHeader не поддерживает, надо править расчет. Пример проверки тут https://TransFiles.ru/34r31
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2741
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.08.19 16:37. Заголовок: PS Для работы коррек..
PS Для работы корректировки надо CLASS TSColumn ... DATA nEditWidth AS NUMERIC // DATA nEditMove AS NUMERIC // post editing cursor movement ... METHOD DrawSelect( xRow ) CLASS TSBrowse ... EndIf oColumn:nEditWidth := 0 If nDeltaLen > 0 oColumn:nEditWidth := aColSizes[ nJ ] + nDeltaLen EndIf TSDrawCell( hWnd, ; // 1 ... METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, ; nClrBack ) CLASS TSBrowse ... EndIf If oCol:nEditWidth > 0 nWidth := oCol:nEditWidth If ! ::lNoVScroll nWidth -= GetVScrollBarWidth() EndIf EndIf If oCol:cResName != Nil .or. oCol:lBtnGet ... В примере ON KEY ESCAPE ACTION iif( oBrw:IsEdit, oBrw:PostMsg(WM_KEYDOWN, VK_ESCAPE), _wPost(99) ) END WINDOW ... FUNCTION Brw2Fld( nY, nX, nW, nH, cBrw, aColor ) ... :LoadFields( .T.) ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1562
Зарегистрирован: 11.02.10
|
|
Отправлено: 18.08.19 20:12. Заголовок: SergKis пишет: Для ..
SergKis пишет: Принято с благодарностью Проверил на Вашем примере - работает
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2742
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.08.19 23:58. Заголовок: gfilatov2002 Добави..
gfilatov2002 Добавил в пример проверку работы метода :GetCellinfo(...). На кл. F3 в Footer колонки вкл. GetBox для ввода Пример https://TransFiles.ru/958i8
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1563
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.08.19 09:51. Заголовок: SergKis пишет: пров..
SergKis пишет: цитата: | проверку работы метода :GetCellinfo(...) |
| По-видимому, были еще внесены изменения в код, поскольку у меня этот метод так красиво не отрабатывает, как в Вашем откомпилированном примере. Что-то я потерял в этих модификациях
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1564
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.08.19 10:12. Заголовок: P.S. Понял, что надо..
P.S. Понял, что надо изменить метод :GetCellinfo(...) также, как и метод Edit(). Сейчас Ваш пример у меня работает нормально Благодарю за помощь
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2743
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.08.19 10:29. Заголовок: gfilatov2002 пишет П..
gfilatov2002 пишет цитата: | По-видимому, были еще внесены изменения в код[quote] |
|
` Отвлекли на другое и забыл об изменениях внесенных в :GetCellInfo, извините. У меня они такие METHOD GetCellInfo( nRowPos, nCell, lColSpecHd ) CLASS TSBrowse ... endif If oCol:nEditWidth > 0 nWidth := oCol:nEditWidth If ! ::lNoVScroll nWidth -= GetVScrollBarWidth() EndIf EndIf nRow += ::aEditCellAdjust[1] nCol += ::aEditCellAdjust[2] nWidth += ::aEditCellAdjust[3] + 2 nHeight += ::aEditCellAdjust[4] ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1565
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.08.19 11:20. Заголовок: SergKis пишет: У ме..
SergKis пишет: цитата: | У меня они такие METHOD GetCellInfo( nRowPos, nCell, lColSpecHd ) CLASS TSBrowse |
| Аналогично Благодарю за подтверждение
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2744
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.08.19 13:29. Заголовок: gfilatov2002 Правка..
gfilatov2002 Правка (тогда :lNoHScroll := .F.\.T. работает правильно) METHOD SetNoHoles( nDelta, lSet ) CLASS TSBrowse ... nHole := _GetClientRect( ::hWnd )[ 4 ] - ; ::nHeightHead - ::nHeightSuper - ; ::nHeightFoot - ::nHeightSpecHd //- ; // If( ::lNoHScroll, 0, GetHScrollBarHeight() ) ... и METHOD GetCellInfo( nRowPos, nCell, lColSpecHd ) CLASS TSBrowse ... Local lHead := .F. Local lFoot := .F. If HB_ISLOGICAL( nRowPos ) If nRowPos ; lHead := .T. Else ; lFoot := .T. EndIf nRowPos := NIL lColSpecHd := .F. EndIf ... endif If lHead nRow := ::nHeightSuper + If( oCol:l3DLook, 2, 0 ) + 1 nHeight := ::nHeightHead ElseIf lFoot nRow := _GetClientRect( ::hWnd )[4] - ::nHeightFoot + 1 nHeight := ::nHeightFoot EndIf ix := GetControlIndex ( cBrw, cForm ) if _HMG_aControlContainerRow [ix] == -1 ... тогда в примере сделать DEFINE TOOLBAR ToolBar_3 CAPTION "" BUTTONSIZE 42,32 FLAT BUTTON 99 CAPTION 'Exit' PICTURE 'exit' ACTION _PushKey(VK_ESCAPE) END TOOLBAR ... oBrw:UserKeys(VK_F3, {|ob| _wPost(3, ob, ob) }) oBrw:UserKeys(VK_F4, {|ob| _wPost(4, ob, ob) }) (This.Object):Event( 3, {|ot,oi,ob,y,x,w,h,cn| cn := ot:Name, ; oi := ob:GetCellinfo(.T., ob:nCell), ; // Header y := oi:nRow, ; x := oi:nCol, ; w := oi:nWidth, ; h := ob:nHeightFoot, ; This.MyFoot.Row := y, ; This.MyFoot.Col := x, ; This.MyFoot.Width := w, ; This.MyFoot.Height := h, ; This.MyFoot.Show, DoEvents(), ; This.MyFoot.SetFocus } ) (This.Object):Event( 4, {|ot,oi,ob,y,x,w,h,cn| cn := ot:Name, ; oi := ob:GetCellinfo(.F., ob:nCell), ; // Footer y := oi:nRow, ; x := oi:nCol, ; w := oi:nWidth, ; h := ob:nHeightFoot, ; This.MyFoot.Row := y, ; This.MyFoot.Col := x, ; This.MyFoot.Width := w, ; This.MyFoot.Height := h, ; This.MyFoot.Show, DoEvents(), ; This.MyFoot.SetFocus } ) ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1566
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.08.19 14:39. Заголовок: SergKis пишет: Прав..
SergKis пишет: цитата: | Правка (тогда :lNoHScroll := .F.\.T. работает правильно) |
| Благодарю за исправление
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2745
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.08.19 17:49. Заголовок: gfilatov2002 Предло..
gfilatov2002 Предложение HB_FUNC( TSDRAWCELL ) ... int iTxtW = 0; BOOL bDraw = FALSE; memset( &bm, 0, sizeof( BITMAP ) ); ... if( lCursor ) cDrawCursor( hWnd, &rct, lCursor, clrFore ); } bDraw = TRUE; } DeleteObject( hGrayPen ); DeleteObject( hWhitePen ); hb_retl( bDraw ); ... CLASS TSBrowse FROM TControl ... DATA aDrawCols AS ARRAY INIT {} // list of columns in display ... METHOD DrawSelect( xRow ) CLASS TSBrowse ... Local nDeltaLen, lDraw := .F. Default xRow := nRowPos ::nPaintRow := xRow ::aDrawCols := {} If Empty( ::aColumns ) ... If nDeltaLen > 0 oColumn:nEditWidth := aColSizes[ nJ ] + nDeltaLen EndIf lDraw := TSDrawCell( hWnd, ; // 1 ... nStartCol += aColSizes[ nJ ] + nDeltaLen If lDraw AAdd( ::aDrawCols, nJ ) EndIf Next ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2746
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.08.19 17:52. Заголовок: PS В примере получим..
PS В примере получим список колонок в отображении oBrw:UserKeys(VK_F5, {|ob| _wPost(5, ob, ob) }) ... (This.Object):Event( 5, {|ot,oi,ob| _LogFile(.T., hb_valtoexp(ob:aDrawCols)) }) ...
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1567
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.08.19 20:37. Заголовок: SergKis пишет: Пред..
SergKis пишет: Сергей, Добавить эти изменения можно без проблем, но только использовать их - в целях отладки. Или я что-то упустил
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 2747
Зарегистрирован: 17.02.12
|
|
Отправлено: 19.08.19 20:59. Заголовок: gfilatov2002 пишет Д..
gfilatov2002 пишет цитата: | Добавить эти изменения можно без проблем, но только использовать их - в целях отладки |
| Сейчас трудно понять список колонок, которые проходят в методах прорисовки :Draw...(), т.к. определяется реально в функции TSDrawCell(...) по nStartCol и размером тсб GetClientRect( hWnd, &rct ), что затрудняет переделать :DrawSuper к примеру, т.к. там пляшет от ::aColSizes и aColSizes, понять мне не удалось, есть значения не совпадающие ни oCol:nWidth, oCol:nEditWidth и нет ясности в списке колонок. Для начала на :aDrawCols сделать прорисовку :DrawSuper() для режима :ladjColumn := .T. Может еще где пригодится
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1568
Зарегистрирован: 11.02.10
|
|
Отправлено: 19.08.19 21:20. Заголовок: SergKis пишет: на :..
SergKis пишет: цитата: | на :aDrawCols сделать прорисовку :DrawSuper() для режима :ladjColumn := .T. |
| Понял, уже добавляю... Благодарю за разъяснение
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|