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


SergKis
постоянный участник




Пост N: 2679
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.07.19 14:49. Заголовок: gfilatov2002 пишет а..


gfilatov2002 пишет
 цитата:
аргументируйте...


 
LOCAL aClr := {}

AAdd( aClr, { CLR_FOCUSB, { |a,b,c| iif( c:nCell == b, ; // CLR_FOCUSB
{ HMG_RGB2n( 66, 255, 236), HMG_RGB2n(209, 227, 248) }, ;
{ HMG_RGB2n(220, 220, 220), HMG_RGB2n(220, 220, 220) } ) } } )
AAdd( aClr, { CLR_HEADF , {|| HMG_RGB2n( YELLOW ) } } ) // 3 , текста шапки таблицы
AAdd( aClr, { CLR_HEADB , {|| { HMG_RGB2n(40, 122, 237), ;
HMG_RGB2n(48, 29, 26) } } } ) // 4 , фона шапка таблицы

oBrw := Brw2Arr(cBrw, nY, nX, nW, nH, aDatos, aClr, aFont)


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




Пост N: 1529
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.07.19 15:03. Заголовок: SergKis пишет: HMG_..


SergKis пишет:

 цитата:
HMG_RGB2n( YELLOW )


Кстати, еще есть такая псевдо-функция
ArrayRGB_TO_COLORREF(aRGB)

SergKis пишет:

 цитата:
HMG_RGB2n(40, 122, 237)


Проще
RGB(40, 122, 237)


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




Пост N: 2680
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.07.19 15:09. Заголовок: gfilatov2002 пишет R..


gfilatov2002 пишет
 цитата:
RGB(40, 122, 237)


Использование псевдо функции в блоке кода приведет к сообщению
Error: Unresolved external '_HB_FUN_RGB' referenced ...


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




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


gfilatov2002 пишет
 цитата:
Проще
RGB(40, 122, 237)


Мои названия RGB2n(...) и n2RGB(...) добавил HMG_... для общей схемы.
Может и не надо добавлять.

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




Пост N: 1530
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.07.19 15:17. Заголовок: SergKis пишет: Испо..


SergKis пишет:

 цитата:
Использование псевдо функции в блоке кода приведет к сообщению


Нет, такая ошибка не возникла в следующем коде:
   AAdd( aClr, { 6, { |a,b,c| iif( c:nCell == b,                ;     // CLR_FOCUSB 
{ RGB( 66, 255, 236), RGB(209, 227, 248) }, ;
{ RGB(220, 220, 220), RGB(220, 220, 220) } ) } } )

AAdd( aClr, { CLR_HEADF , {|| ArrayRGB_TO_COLORREF( YELLOW ) } } ) // 3 , текста шапки таблицы
AAdd( aClr, { CLR_HEADB , {|| { RGB(40, 122, 237), ;
RGB(48, 29, 26) } } } ) // 4 , фона шапка таблицы

oBrw := Brw2Arr(cBrw, nY, nX, nW, nH, aDatos, aClr, aFont)
Пример отработал нормально с этими кодо-блоками

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




Пост N: 2682
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.07.19 15:29. Заголовок: gfilatov2002 пишет П..


gfilatov2002 пишет
 цитата:
Пример отработал нормально с этими кодо-блоками


Да. Отработал
Мой косяк, переносил текст и перенес RGB( { 40, 122, 237 } ), RGB( YELLOW ) с лишними скобками {}
Но ArrayRGB_TO_COLORREF( YELLOW ) не вспомнишь как пишется.
Останусь на своих RGB2n(...), n2RGB(...)
Спасибо.

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




Пост N: 6359
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.07.19 17:35. Заголовок: SergKis пишет: Но A..


SergKis пишет:

 цитата:
Но ArrayRGB_TO_COLORREF( YELLOW ) не вспомнишь как пишется.
Останусь на своих RGB2n(...), n2RGB(...)


Да это точно такую функцию и не вспомнишь.... да и эту тоже nRGB2Arr()
Я тоже замучился из проекта в проект таскать эти ToRgb()...
Сергей правильно предложил HMG_RGB2n() и HMG_n2RGB() .
Можно и сократить до MG_RGB2n() и MG_n2RGB()
Лишь бы были и не таскать из проекта в проект.

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




Пост N: 2683
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.07.19 19:39. Заголовок: gfilatov2002 пишет а..


gfilatov2002 пишет
 цитата:
аргументируйте...


Небольшой аргумент в пользу функций (не псевдо) - это хранение цветов в файлах ini, xml или использование hb_macroBlock(...) для создания блоков кода.

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




Пост N: 1531
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.07.19 20:43. Заголовок: Andrey пишет: Серге..


Andrey пишет:

 цитата:
Сергей правильно предложил HMG_RGB2n() и HMG_n2RGB()


С учетом обсуждения (и поддержки) добавил эти макросы в заголовок i_pseudofunc.ch
Теперь код ниже

 цитата:
    LOCAL aClr   := {}  

AAdd( aClr, { CLR_FOCUSB, { |a,b,c| iif( c:nCell == b, ; // CLR_FOCUSB
{ HMG_RGB2n( 66, 255, 236), HMG_RGB2n(209, 227, 248) }, ;
{ HMG_RGB2n(220, 220, 220), HMG_RGB2n(220, 220, 220) } ) } } )
AAdd( aClr, { CLR_HEADF , {|| HMG_RGB2n( YELLOW ) } } ) // 3 , текста шапки таблицы
AAdd( aClr, { CLR_HEADB , {|| { HMG_RGB2n(40, 122, 237), ;
HMG_RGB2n(48, 29, 26) } } } ) // 4 , фона шапка таблицы

oBrw := Brw2Arr(cBrw, nY, nX, nW, nH, aDatos, aClr, aFont)


отработал без проблем

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




Пост N: 2684
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.19 08:21. Заголовок: gfilatov2002 Можно ..


gfilatov2002
Можно изменить в HMG_Alert() строки
 
STATIC FUNCTION FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bBlock, lClosable )
...
This.Closable := lClosable

This.&( aBut[ Max( 1, Min( nLenaOp, _HMG_ModalDialogReturn ) ) ] ).SetFocus()

This.Center()

IF lClosable
ON KEY ESCAPE OF &cForm ACTION ( _HMG_ModalDialogReturn := 0, lPressButton := .T., ThisWindow.Release() )
ENDIF

IF HB_ISBLOCK( bBlock )
Do_WindowEventProcedure( bBlock, This.Index, 'WINDOW_ACTIVATE' )
ENDIF

IF _IsControlDefined( "oTimer", cForm )
This.oTimer.Enabled := .T.
ENDIF
...


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




Пост N: 1532
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 25.07.19 10:06. Заголовок: SergKis пишет: изме..


SergKis пишет:

 цитата:
изменить в HMG_Alert() строки


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

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




Пост N: 2685
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.19 13:59. Заголовок: gfilatov2002 Предла..


gfilatov2002
Предлагаю добавить метод в TsColumn (при работе с dbf заполняются :nFieldTyp, :nFieldLen на колонки)
 
METHOD ToWidth( uLen, nKfc ) CLASS TSColumn
LOCAL nWidth, nLen, cTyp, cChr := 'B'

Default nKfc := 1

If ! empty( ::cPicture ) .and. HB_ISCHAR( ::cPicture )
If empty( uLen )
cChr := ::cPicture
If Left(cChr, 2) == '@K'
cChr := AllTrim(Substr(cChr, 3))
EndIf
nLen := Len( cChr )
Else
If '9' $ ::cPicture; cChr := '9'
ElseIf 'X' $ ::cPicture; cChr := 'X'
EndIf
nLen := uLen
cChr := Replicate(cChr, nLen)
EndIf
Else
cTyp := ::cFieldTyp
nLen := iif( empty(uLen), ::nFieldLen, uLen )

If cTyp $ 'CML'; cChr := 'B'
ElseIf cTyp == 'ND'; cChr := '9'
EndIf

nLen := iif( empty(nLen), 7, nLen )
cChr := Replicate(cChr, nLen)
EndIf

nWidth := GetTextWidth( 0, cChr, ::hFont )
nWidth := Int( nWidth * nKfc )

RETURN nWidth

Применять так к примеру
with object oBrw
For i := 1 To Len( :aColumns )
oc := :aColumns[ i ]
cp := oc:cName
xv := :GetValue(cp)
cn := '_' + cp
s := iif( oc:nFieldLen > 40, 40, Nil )
nl := oc:ToWidth( s )
@ y, x LABEL &cn ;
VALUE oc:cHeading ;
WIDTH l HEIGHT h ;
VCENTERALIGN
@ y, x+l+20 GETBOX &cp ;
VALUE xv ;
WIDTH nl HEIGHT h ;
PICTURE :cPictureGet(, i)
y += This.&(cn).Height + 20
Next
end with


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




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


SergKis пишет:

 цитата:
добавить метод в TsColumn


Принято с благодарностью

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




Пост N: 6360
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.07.19 15:06. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предлагаю добавить метод в TsColumn (при работе с dbf заполняются :nFieldTyp, :nFieldLen на колонки)



А как код будет выглядеть ?

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




Пост N: 2686
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.19 15:57. Заголовок: Andrey пишет А как к..


Andrey пишет
 цитата:
А как код будет выглядеть ?


SergKis пишет
 цитата:

Применять так к примеру
with object oBrw
For i := 1 To Len( :aColumns )
oc := :aColumns[ i ]
cp := oc:cName
xv := :GetValue(cp)
cn := '_' + cp
s := iif( oc:nFieldLen > 40, 40, Nil )
nl := oc:ToWidth( s )

@ y, x LABEL &cn ;
VALUE oc:cHeading ;
WIDTH l HEIGHT h ;
VCENTERALIGN
@ y, x+l+20 GETBOX &cp ;
VALUE xv ;
WIDTH nl HEIGHT h ;
PICTURE :cPictureGet(, i)
y += This.&(cn).Height + 20
Next
end with



или
:LoadFields(.F.)
nKfc := 0.8 // коэффициент для коррекции nWidth полученной при расчете, если надо такая поправка
AEval( :aColumns, {|oc| oc:nWidth := oc:ToWidth(iif( oc:nFieldLen > 40, 40, Nil ), nKfc) } )

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




Пост N: 2694
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.07.19 14:57. Заголовок: gfilatov2002 Предла..


gfilatov2002
Предлагаю такой HMG_Alert(), добавил параметр cFont, для исп. вместо DlgFont. Тогда можно применять Alert...() ф-ии с DlgFont. Скрытый текст

Т.е. в примере можно сделать
 
FUNCTION Main()
...
SET DIALOGBOX CENTER OF PARENT
SET CENTERWINDOW RELATIVE PARENT
...
DEFINE FONT FontBold FONTNAME _HMG_DefaultFontName SIZE _HMG_DefaultFontSize BOLD
DEFINE FONT AgeCard FONTNAME "Verdana" SIZE 12 BOLD
DEFINE FONT DlgFont FONTNAME "Tahoma" SIZE 12
...
STATIC FUNC AgeCard( oWnd, oBrw, oCnl )
...
LOCAL cFont := 'AgeCard'

If ! empty( oBrw:GetValue('AGE') ) .or. ! empty( oBrw:GetValue('FIRST') )
HMG_Alert( cMsg, aButt, cTitl, , cBmp, , aClr, bInit, .T., cFont )
EndIf
...
STATIC FUNC Age_CardSave( oBrw, lSave )
...
If empty( lSave ) .and. ThisWindow.Cargo
// lMsg := MsgYesNo('Save card - '+cValToChar(This.AGE.Value )+CRLF+ ;
lMsg := AlertYesNo('Save card - '+cValToChar(This.AGE.Value )+CRLF+ ;
cValToChar(This.FIRST.Value)+CRLF+ ;
cValToChar(This.LAST.Value ), ;
'NR. '+hb_ntos(oBrw:nAt)+ ' RECNO ' + cValToChar(nRec))
EndIf
...


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




Пост N: 1539
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.07.19 16:04. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предлагаю такой HMG_Alert(), добавил параметр cFont


Принято

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




Пост N: 2695
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.07.19 10:51. Заголовок: gfilatov2002 Можете..


gfilatov2002
Можете пояснить зачем удаляется фонт из списка, если в контролах он не создается (не увидел) ?
 
*-----------------------------------------------------------------------------*
FUNCTION _EraseControl ( i, p )
*-----------------------------------------------------------------------------*
LOCAL hWnd
LOCAL mVar
LOCAL t, x

x := _HMG_aControlFontHandle

IF ISNUMERIC ( x ) .AND. !Empty ( x ) .AND. !( x == GetFontHandle ( "DlgFont" ) )
DeleteObject ( x )
ENDIF
...

такая штука удаляет фонт, если он не DlgFont, созданный по DEFINE FONT ... и использованный в контроле.

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




Пост N: 1540
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 30.07.19 11:12. Заголовок: SergKis пишет: така..


SergKis пишет:

 цитата:
такая штука удаляет фонт, если он не DlgFont, созданный по DEFINE FONT ... и использованный в контроле


Да, все верно.
В момент удаления мы ведь не знаем название шрифта, а только указатель (handle) на него.

Сейчас этот фрагмент кода выглядит так

 цитата:
 
FUNCTION _EraseControl ( i , p )
...
IF ISNUMERIC ( x ) .AND. !Empty ( x ) .AND. ;
!( x == GetFontHandle ( "DlgFont" ) ) .AND. !( x == GetFontHandle ( _HMG_ActiveDialogFontName ) )
DeleteObject ( x )
ENDIF



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




Пост N: 2696
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.07.19 11:20. Заголовок: gfilatov2002 пишет В..


gfilatov2002 пишет
 цитата:
В момент удаления мы ведь не знаем название шрифта, а только указатель (handle) на него.


Зачем удалять фонт, созданный (сохранен в базе _HMG_aControlType == 'FONT') по DEFINE FONT ... ?
Его удаляем по RELEASE FONT, а в контролах, если не найден в базе фонтов, используем _HMG_DefaultFontName, или фонт установленный на окно. Или я что то упускаю ?

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