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

Andrey: Всем привет ! Вопрос возник, а почему в ресурсах МиниГуи нет иконки самого МиниГуи - официальной ? Примеры тестовые делать можно было бы с официальной иконкой, а то и не знаешь какой вариант использовать. И второй вопрос, почему нет в ядре МиниГуи функции _ShowContextMenu() ? Замучился таскать её в проекты, частенько использую для тестовых проектов. Григорий, добавь пожалуйста эту функцию в ядро.

gfilatov2002: Andrey пишет: Вопрос возник, а почему в ресурсах МиниГуи нет иконки самого МиниГуи - официальной ? Спасибо за вопрос Дело в том, что в разное время были разные иконки, а сейчас - такая, как на моей аватарке. Поэтому проще просто поместить эту иконку в папку с примером и подключать ее из файла, а не из ресурсов Andrey пишет: второй вопрос, почему нет в ядре МиниГуи функции _ShowContextMenu() ? Потому, что эта функция не доработана до конца (в частности, режим центрирования).

Andrey: gfilatov2002 пишет: Потому, что эта функция не доработана до конца (в частности, режим центрирования). Доработайте пожалуйста и включите, нужна очень. Вроде нормально работает в приложениях, нормально центрируется.


gfilatov2002: Andrey пишет: включите, нужна очень Добавил эту функцию в новую сборку 19.08

Andrey: gfilatov2002 пишет: Добавил эту функцию в новую сборку 19.08 Спасибо ! Выслал примеры по Tsbrowse с карточкой + блокировка записей на почту. Вопрос возник по Tab. Показываю окно с Tab карточкой юзеру. На медленных компах видно как этот Tab дергается, т.е. на Tab вывожу объекты Label и GetBox. Там их много, порядка 150 объектов. Вот и дергается Tab. Можно как то это "дерганье" убрать ?

SergKis: gfilatov2002 Предложение по растяжке предпоследней колонки показа, если последняя не помещается в размер тсб, при горизонтальном скроллинге колонок.[pre2] 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 ... [/pre2] SuperHeader не поддерживает, надо править расчет. Пример проверки тут https://TransFiles.ru/34r31

SergKis: PS Для работы корректировки надо[pre2] 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 ... [/pre2] В примере 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: SergKis пишет: Для работы корректировки Принято с благодарностью Проверил на Вашем примере - работает

SergKis: gfilatov2002 Добавил в пример проверку работы метода :GetCellinfo(...). На кл. F3 в Footer колонки вкл. GetBox для ввода Пример https://TransFiles.ru/958i8

gfilatov2002: SergKis пишет: проверку работы метода :GetCellinfo(...) По-видимому, были еще внесены изменения в код, поскольку у меня этот метод так красиво не отрабатывает, как в Вашем откомпилированном примере. Что-то я потерял в этих модификациях

gfilatov2002: P.S. Понял, что надо изменить метод :GetCellinfo(...) также, как и метод Edit(). Сейчас Ваш пример у меня работает нормально Благодарю за помощь

SergKis: gfilatov2002 пишет По-видимому, были еще внесены изменения в код Отвлекли на другое и забыл об изменениях внесенных в :GetCellInfo, извините. У меня они такие[pre2] 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] ... [/pre2]

gfilatov2002: SergKis пишет: У меня они такие METHOD GetCellInfo( nRowPos, nCell, lColSpecHd ) CLASS TSBrowse Аналогично Благодарю за подтверждение

SergKis: gfilatov2002 Правка (тогда :lNoHScroll := .F.\.T. работает правильно)[pre2] 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 } ) ... [/pre2]

gfilatov2002: SergKis пишет: Правка (тогда :lNoHScroll := .F.\.T. работает правильно) Благодарю за исправление

SergKis: gfilatov2002 Предложение [pre2] 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 ... [/pre2]

SergKis: PS В примере получим список колонок в отображении[pre2] oBrw:UserKeys(VK_F5, {|ob| _wPost(5, ob, ob) }) ... (This.Object):Event( 5, {|ot,oi,ob| _LogFile(.T., hb_valtoexp(ob:aDrawCols)) }) ... [/pre2]

gfilatov2002: SergKis пишет: Предложение Сергей, Добавить эти изменения можно без проблем, но только использовать их - в целях отладки. Или я что-то упустил

SergKis: gfilatov2002 пишет Добавить эти изменения можно без проблем, но только использовать их - в целях отладки Сейчас трудно понять список колонок, которые проходят в методах прорисовки :Draw...(), т.к. определяется реально в функции TSDrawCell(...) по nStartCol и размером тсб GetClientRect( hWnd, &rct ), что затрудняет переделать :DrawSuper к примеру, т.к. там пляшет от ::aColSizes и aColSizes, понять мне не удалось, есть значения не совпадающие ни oCol:nWidth, oCol:nEditWidth и нет ясности в списке колонок. Для начала на :aDrawCols сделать прорисовку :DrawSuper() для режима :ladjColumn := .T. Может еще где пригодится

gfilatov2002: SergKis пишет: на :aDrawCols сделать прорисовку :DrawSuper() для режима :ladjColumn := .T. Понял, уже добавляю... Благодарю за разъяснение



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