On-line: tnsr2, гостей 0. Всего: 1 [подробнее..]
АвторСообщение
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 [только новые]


gfilatov2002
moderator




Пост N: 1973
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.12.21 11:28. Заголовок: SergKis пишет: Сдел..


SergKis пишет:

 цитата:
Сделал др. вариант SBrowse, привязал размеры к размеру фонта


Да, этот вариант понравился своим лаконичным примером
Принято. Благодарю за помощь

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




Пост N: 1974
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.12.21 21:38. Заголовок: SergKis пишет: надо ..


SergKis пишет:

 цитата:
надо добавить MODAL окно


Да, согласен, в противном случае карточка 'Record View' прячется под основное окно
Остановился на таком варианте (с использованием переменной lRec):
Скрытый текст

Благодарю за помощь

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




Пост N: 3991
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.12.21 21:52. Заголовок: gfilatov2002 пишет О..


gfilatov2002 пишет
 цитата:
Остановился на таком варианте


Для MODAL окна надо задействовать _hmg_InplaceParentHandle , иначе родителем modal будет MAIN окно, что не есть хорошо. Надо поправить еще
 
LOCAL nGh := oApp:GapsHeight

IF HB_ISARRAY( bSetUp )
bAfter := bSetUp[2]
bSetUp := bSetUp[1]
ENDIF

IF HB_ISLOGICAL( bSetUp )
lCellBrw := bSetUp
bSetUp := NIL
ENDIF

DEFAULT uAlias := Alias(), ;
cTitle := iif( ValType( uAlias ) == "C", uAlias, "SBrowse" ), ;
bSetUp := {|| .F. }, ;
aCols := {}, ;
nWidth := GetSysMetrics( 0 ) * .75, ;
nHeight := GetSysMetrics( 1 ) / 2, ;
lSql := .F.

IF HB_ISARRAY( bSetUp )
bAfter := bSetUp[2]
bSetUp := bSetUp[1]
ENDIF




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




Пост N: 1975
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.12.21 22:19. Заголовок: SergKis пишет: Для ..


SergKis пишет:

 цитата:
Для MODAL окна надо задействовать _hmg_InplaceParentHandle


Добавил присвоение этой переменной перед объявлением модального окна таким образом

 цитата:
_HMG_InplaceParentHandle := GetActiveWindow()



SergKis пишет:

 цитата:
Надо поправить еще


Сделал, конечно.

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




Пост N: 3992
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.12.21 22:44. Заголовок: gfilatov2002 Еще по..


gfilatov2002
Еще поправить в SBrowse()
 
:bRClicked := {|| SBrowse_Record( oBrw ) }
:lRecLockArea := .T.
IF lEdit
AEval( :aColumns, {| o | o:lEdit := ! o:cFieldTyp $ "+=^" } )
ENDIF

IF lRec


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




Пост N: 1976
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.12.21 23:13. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще поправить в SBrowse()


Ok

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




Пост N: 3994
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.12.21 23:54. Заголовок: gfilatov2002 Такая ..


gfilatov2002
Такая правка, решила проблему цвета в header, footer колонки "SELECTOR"
 
METHOD DrawHeaders( lFooters, lDrawCell ) CLASS TSBrowse
...
IF ::lFooting .AND. ::lDrawFooters
...
If !( nJ == 1 .AND. ::lSelector ) // JP
nClrBack := iif( oColumn:nClrFootBack != NIL, oColumn:nClrFootBack, nClrFootBack )
ELSEIF ::nClrSelectorHdBack != NIL
nClrBack := ::nClrSelectorHdBack

ELSE
nClrBack := ATail( ::aColumns ):nClrFootBack
ENDIF
nClrBack := ::GetValProp( nClrBack, nClrBack, nJ )
...
Еще добавка, для определения, есть ли реально колонка в тсб
METHOD nColumn( cName, lPos ) INLINE _nColumn( Self, cName, !Empty( lPos ) )

FUNCTION _nColumn( oBrw, cName, lPos )
LOCAL nPos := AScan( oBrw:aColumns, {| oCol | Upper( oCol:cName ) == Upper( cName ) } )
RETURN iif( Empty( lPos ), Max( nPos, 1 ), nPos )


т.е.
IF oBrw:nColumn("ORDKEYNO", .T.) > 0
...
ENDIF

тогда поправить _TBrowse()
...
DEFAULT bEnd := {|ob,op|
Local aCol, nI, nK
// SELECTOR и ORDKEYNO не меняем width
IF op:uSelector != NIL .and. op:lAdjust == NIL .and. ob:lNoHScroll
nK := Max( ob:nColumn("SELECTOR", .T.), ob:nColumn("ORDKEYNO", .T.) )
IF nK > 0
aCol := {}
FOR nI := nK TO Len( ob:aColumns )
IF ob:aColumns[ nI ]:lVisible
AAdd( aCol, nI )
ENDIF
NEXT
ENDIF
ob:AdjColumns( aCol )
ENDIF

// нет горизонтального HScroll и есть SELECTOR
IF ob:nLen > ob:nRowCount() // нужен VScroll
ob:ResetVScroll( .T. )
ENDIF
ob:SetNoHoles()
ob:SetFocus()
Return Nil
}

Тогда задаем
oTsb:aNumber := { 1, 70 }
oTsb:uSelector := 20

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




Пост N: 3995
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.12.21 12:08. Заголовок: gfilatov2002 пишет О..


gfilatov2002 пишет
 цитата:
Остановился на таком варианте (с использованием переменной lRec)


Может надо добавить (с обработкой _hmg_InplaceParentHandle)
 
FUNCTION SBrowse( uAlias, cTitle, bSetUp, aCols, nWidth, nHeight, lSql, lModal ) // idea from xBrowse
...
DEFAULT lModal := .F.
...
IF lRec .or. lModal
IF lRec
nWidth *= .67
ENDIF

DEFINE WINDOW &cFormName AT 0, 0 WIDTH nWidth HEIGHT nHeight TITLE cTitle ;
MODAL ;
BACKCOLOR RGB( 191, 219, 255 )
ELSE
...


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




Пост N: 1977
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.12.21 12:33. Заголовок: SergKis пишет: Така..


SergKis пишет:

 цитата:
Такая правка, решила проблему


SergKis пишет:

 цитата:
Еще добавка


SergKis пишет:

 цитата:
надо добавить (с обработкой _hmg_InplaceParentHandle)


Большое спасибо за предложения!
Проверю и отпишусь

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




Пост N: 3996
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.12.21 13:45. Заголовок: gfilatov2002 Правка..


gfilatov2002
Правка _TBrowse()
 
...
DEFAULT oParam:bSpecHdEnum := {|ob,op,cChar| // нумерация SpecHd колонок, можно исп. в своем коде вызов
Local oCol, cCnt, nCnt := 0 // renumbering SpecHeader
IF ob:lDrawSpecHd
DEFAULT cChar := op:cSpecHdChar
DEFAULT cChar := "."

FOR EACH oCol IN ob:aColumns
IF oCol:cName == "SELECTOR" ; LOOP
ENDIF
cCnt := cChar

IF oCol:cName != "ORDKEYNO" .and. oCol:lVisible
cCnt := hb_ntos( ++nCnt )
ENDIF
oCol:cSpcHeading := cCnt
NEXT
ENDIF
Return Nil
}


DEFAULT oParam:bAdjColumns := {|ob| // "растягивание" колонок в пределах окна тсб
Local aCol, nI, nK
// SELECTOR and ORDKEYNO не меняем width
nK := Max( ob:nColumn("SELECTOR", .T.), ob:nColumn("ORDKEYNO", .T.) )
IF nK > 0
aCol := {}
FOR nI := nK TO Len( ob:aColumns )
IF ob:aColumns[ nI ]:lVisible
AAdd( aCol, nI )
ENDIF
NEXT
ENDIF
ob:AdjColumns( aCol )
Return Nil
}


DEFAULT bEnd := {|ob,op|
// нет горизонтального HScroll и есть SELECTOR
IF op:uSelector != NIL .and. op:lAdjust == NIL .and. ob:lNoHScroll
IF HB_ISBLOCK( op:bAdjColumns )
EVal( op:bAdjColumns, ob, op ) // :AdjColumns(...)
ENDIF

ENDIF
IF ob:nLen > ob:nRowCount() // нужен VScroll
ob:ResetVScroll( .T. )
ENDIF
ob:SetNoHoles()
ob:SetFocus()
Return Nil
}
...
IF ( :GetAllColsWidth() - 1 ) > ( _GetClientRect( :hWnd )[3] )
:lNoHScroll := .F.
:lMoreFields := ( :nColCount() > 30 )
ELSEIF oParam:uSelector == NIL .and. oParam:lAdjust == NIL
IF HB_ISBLOCK( oParam:bAdjColumns )
EVal( oParam:bAdjColumns, oBrw, oParam ) // :AdjColumns(...)
ENDIF

ENDIF
...
IF HB_ISBLOCK( bEnd ) ; EVal( bEnd, oBrw, oParam )
ENDIF

DO EVENTS

RETURN oBrw


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




Пост N: 1978
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.12.21 18:55. Заголовок: SergKis пишет: Прав..


SergKis пишет:

 цитата:
Правка _TBrowse()


Все изменения приняты
Благодарю за помощь

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




Пост N: 3997
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.12.21 09:31. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение по передаче внешних параметров для обработки в блоке кода ф-ии SBrowse
 
FUNCTION SBrowse( uAlias, cTitle, bSetUp, aCols, nWidth, nHeight, lSql ) // idea from xBrowse
...
LOCAL uParam, bRecord

IF HB_ISARRAY( cTitle )
uParam := cTitle[2]
cTitle := cTitle[1]
ENDIF

IF HB_ISARRAY( bSetUp )
bRecord := iif( Len(bSetUp) > 2, bSetUp[3], NIL )

bAfter := bSetUp[2]
bSetUp := bSetUp[1]
ENDIF
...
тут DEFINE WINDOW .... для окон
...
This.Cargo := uParam

nY := nGh
nX := nGw
...
:lUpdate := .T.
:bRClicked := {|| _SetThisFormInfo( oBrw:cParentWnd ), SBrowse_Record( oBrw, , bRecord ), _SetThisFormInfo() }

...
FUNCTION SBrowse_Record( oBrw, cTitle, bSetUp, aHead, nWidth, nHeight, lNoCrLf )
...
SBrowse( aArr, {"Record View", oBrw}, bSetUp, { "Key", "Value" }, nWidth, nHeight )

RETURN NIL



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




Пост N: 1979
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.12.21 11:15. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение по передаче внешних параметров


Принято

Так выглядит сейчас функция SBrowse_Record() - для проверки:
FUNCTION SBrowse_Record( oBrw, cTitle, bSetUp, aHead, nWidth, nHeight, lNoCrLf ) 

LOCAL oCol, aArr := {}, cHdr
DEFAULT cTitle := { "Record View", oBrw }, bSetUp := .T., aHead := { "Key", "Value" }, lNoCrLf := .F.

FOR EACH oCol IN oBrw:aColumns
IF oCol:cName == "SELECTOR" ; LOOP
ENDIF
cHdr := oCol:cHeading
IF lNoCrLf .and. CRLF $ cHdr
cHdr := StrTran( cHdr, CRLF, " " )
ENDIF
AAdd( aArr, { cHdr, oBrw:GetValue( oCol ) } )
NEXT

SBrowse( aArr, cTitle, bSetUp, aHead, nWidth, nHeight )

RETURN NIL


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




Пост N: 3998
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.12.21 11:28. Заголовок: gfilatov2002 пишет Т..


gfilatov2002 пишет
 цитата:
Так выглядит


В этом варианте, если задать cTitle := "My test record", то oBrw не попадет в ф-ю, лучше
DEFAULT cTitle := "Record View", ...
SBrowse( aArr, {cTitle, oBrw}, bSetUp, aHead, nWidth, nHeight )

PS
Можно продублировать на oBrw параметр
:lUpdate := .T.
:Cargo := uParam

:bRClicked := {|| _SetThisFormInfo( oBrw:cParentWnd ), SBrowse_Record( oBrw, , bRecord ), _SetThisFormInfo() }

Добавить параметр lModal. Для проверки вариант
 
FUNCTION SBrowse_Record( oBrw, cTitle, bSetUp, aHead, nWidth, nHeight, lNoCrLf, lModal )

LOCAL oCol, aArr := {}, cHdr
DEFAULT cTitle := "Record View", bSetUp := .T., aHead := { "Key", "Value" }, lNoCrLf := .F.

FOR EACH oCol IN oBrw:aColumns
IF oCol:cName == "SELECTOR" ; LOOP
ENDIF
cHdr := oCol:cHeading
IF lNoCrLf .and. CRLF $ cHdr
cHdr := StrTran( cHdr, CRLF, " " )
ENDIF
AAdd( aArr, { cHdr, oBrw:GetValue( oCol ) } )
NEXT

SBrowse( aArr, {cTitle, oBrw}, bSetUp, aHead, nWidth, nHeight, , lModal )

RETURN NIL


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




Пост N: 1980
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.12.21 11:48. Заголовок: SergKis пишет: DEFA..


SergKis пишет:

 цитата:
DEFAULT cTitle := "Record View", ...
SBrowse( aArr, {cTitle, oBrw}, bSetUp, aHead, nWidth, nHeight )


Понял, спасибо

SergKis пишет:

 цитата:
продублировать на oBrw параметр


Ok

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




Пост N: 3999
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.12.21 11:50. Заголовок: gfilatov2002 Одновр..


gfilatov2002
Одновременно ответили, поправил, пред. пост, посмотрите. lModal для отдельного запуска с др. aHead

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




Пост N: 1981
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.12.21 11:56. Заголовок: SergKis пишет: lMo..


SergKis пишет:

 цитата:
lModal для отдельного запуска


Принято

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




Пост N: 4000
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.12.21 12:54. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение выделить создание колонки # (номер по порядку) в отд. ф-ю, для исп. в др. тсб, т.е.
Назвать, может быть, ф-ю как то иначе ? Скрытый текст

Использовать в др. тсб
oCol := _TBrowse_ColNumber( oBrw, 50 )
oBrw:InsColumn( 1, oCol )

PS
Можно метод такой сделать в классе и делать вызов oBrw:InsColNumber( nWidth, nNumber )

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




Пост N: 1982
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.12.21 15:02. Заголовок: SergKis пишет: мет..


SergKis пишет:

 цитата:
метод такой сделать в классе и делать вызов oBrw:InsColNumber( nWidth, nNumber )


Да, идея с новым методом понравилась. Тогда можно спрятать вызов oBrw:InsColumn( nNumber, oCol ) внутрь этого метода...

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




Пост N: 4001
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.12.21 15:14. Заголовок: gfilatov2002 пишет Д..


gfilatov2002 пишет
 цитата:
Да, идея с новым методом понравилась.


Сделаю

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