On-line: Andrey, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
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;
- новые и обновленные старые примеры (как обычно ).




Спасибо: 5 
Профиль
Ответов - 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() ?
Замучился таскать её в проекты, частенько использую для тестовых проектов.
Григорий, добавь пожалуйста эту функцию в ядро.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1560
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.08.19 13:31. Заголовок: Andrey пишет: Вопро..


Andrey пишет:

 цитата:
Вопрос возник, а почему в ресурсах МиниГуи нет иконки самого МиниГуи - официальной ?


Спасибо за вопрос
Дело в том, что в разное время были разные иконки, а сейчас - такая, как на моей аватарке.
Поэтому проще просто поместить эту иконку в папку с примером и подключать ее из файла, а не из ресурсов

Andrey пишет:

 цитата:
второй вопрос, почему нет в ядре МиниГуи функции _ShowContextMenu() ?


Потому, что эта функция не доработана до конца (в частности, режим центрирования).


Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 6390
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.08.19 15:13. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Потому, что эта функция не доработана до конца (в частности, режим центрирования).


Доработайте пожалуйста и включите, нужна очень.
Вроде нормально работает в приложениях, нормально центрируется.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1561
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.08.19 20:14. Заголовок: Andrey пишет: включ..


Andrey пишет:

 цитата:
включите, нужна очень


Добавил эту функцию в новую сборку 19.08

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 6392
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.08.19 15:51. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Добавил эту функцию в новую сборку 19.08


Спасибо !

Выслал примеры по Tsbrowse с карточкой + блокировка записей на почту.

Вопрос возник по Tab.
Показываю окно с Tab карточкой юзеру.
На медленных компах видно как этот Tab дергается, т.е. на Tab вывожу объекты Label и GetBox.
Там их много, порядка 150 объектов. Вот и дергается Tab.
Можно как то это "дерганье" убрать ?

Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
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.)
...

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1562
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.08.19 20:12. Заголовок: SergKis пишет: Для ..


SergKis пишет:

 цитата:
Для работы корректировки


Принято с благодарностью
Проверил на Вашем примере - работает

Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 2742
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.08.19 23:58. Заголовок: gfilatov2002 Добави..


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

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1563
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.08.19 09:51. Заголовок: SergKis пишет: пров..


SergKis пишет:

 цитата:
проверку работы метода :GetCellinfo(...)


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

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1564
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.08.19 10:12. Заголовок: P.S. Понял, что надо..


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

Спасибо: 0 
Профиль
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]
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1565
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.08.19 11:20. Заголовок: SergKis пишет: У ме..


SergKis пишет:

 цитата:
У меня они такие

METHOD GetCellInfo( nRowPos, nCell, lColSpecHd ) CLASS TSBrowse


Аналогично
Благодарю за подтверждение

Спасибо: 0 
Профиль
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 } )

...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1566
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.08.19 14:39. Заголовок: SergKis пишет: Прав..


SergKis пишет:

 цитата:
Правка (тогда :lNoHScroll := .F.\.T. работает правильно)


Благодарю за исправление

Спасибо: 0 
Профиль
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
...


Спасибо: 0 
Профиль
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)) })
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1567
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.08.19 20:37. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение


Сергей,

Добавить эти изменения можно без проблем, но только использовать их - в целях отладки.
Или я что-то упустил

Спасибо: 0 
Профиль
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.
Может еще где пригодится

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1568
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.08.19 21:20. Заголовок: SergKis пишет: на :..


SergKis пишет:

 цитата:
на :aDrawCols сделать прорисовку :DrawSuper() для режима :ladjColumn := .T.


Понял, уже добавляю...
Благодарю за разъяснение

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 577
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет