On-line:гостей 1. Всего: 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 [только новые]


SergKis



Пост N:2648
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:16.07.19 22:24.Заголовок:Упс, промахнулся по ..


Упс, промахнулся по клавише.
PSP пишет
 цитата:
hash-массив не поможет в этом случае?



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



Пост N:2649
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:17.07.19 07:26.Заголовок:Andrey пишет Правда ..


Andrey пишет
 цитата:
Правда у меня на форме Form_Main включён таймер на каждую секунду (для тестирования).
Может он влияет на псевдо-функции ThisWindow.Name, _HMG_ThisFormName ?


Предлагаю такую схему для TIMER на Form_Main
 
Выполнение основного тела блока кода перенести на событие приложения, т.е.
FUNCTION Main(...)
...
SetsEnv()

WITH OBJECT oDlu2Pixel()
:Event( 1, {|| AEval(_ThisInfo(), {|xv,nv| _LogFile(.T., nv, cValToChar(xv)) }), ;
SetProperty('Form_Main', 'Timer_1', 'Enabled', .T.) })
END WITH
...
DEFINE WINDOW Form_Main AT nY, nX WIDTH nW HEIGHT nH ;
...
DEFINE TIMER Timer_1 INTERVAL 2000 ACTION ( This.Enabled := .F., oDlu2Pixel():Post(1) )

END WINDOW
...

Работа блока кода Timer_1 будет оч. короткой, среда This восстановлена после него, какая была.
В установленном событии oDlu2Pixel():Event(1) This среда не важна, должна быть.

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



Пост N:2650
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:17.07.19 07:40.Заголовок:PS Точнее так WI..


PS
Точнее так
 
WITH OBJECT oDlu2Pixel()
:Event( 1, {|| SetProperty('Form_Main', 'Timer_1', 'Enabled', .F.) ;
AEval(_ThisInfo(), {|xv,nv| _LogFile(.T., nv, cValToChar(xv)) }), ;
SetProperty('Form_Main', 'Timer_1', 'Enabled', .T.) })
END WITH
...
DEFINE WINDOW Form_Main AT nY, nX WIDTH nW HEIGHT nH ;
...
DEFINE TIMER Timer_1 INTERVAL 2000 ACTION oDlu2Pixel():Post(1) )


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



Пост N:2655
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:19.07.19 10:18.Заголовок:gfilatov2002 #xcom..


gfilatov2002
 
#xcommand DEFINE TBROWSE <name> OBJ <obrw> ;
...
[ ON INIT <bInit> ] ;
...
=>;
<obrw> :=_DefineTBrowse (<"name"> , ;
...
[ <.lAutoCol.> ], [ \{<aColSel>\} ], ;
<bInit> );;
// так лучше, по мне, чем <{bInit}>
with object <obrw>
...

Это видно на примере https://TransFiles.ru/uw4af

В моем варианте (исправленном ch) работают блоки кода
 
*-----------------------------------------------------------------------------*
STAT FUNC Brw_Age( nY, nX, nW, nH )
*-----------------------------------------------------------------------------*
LOCAL cBrw := This.E0.Cargo
LOCAL aFont := { GetFontHandle('FontBold'), GetFontHandle('FontBold') }
LOCAL aClr := {}
LOCAL aDatos := AgeSelect(.T.) // Init value
LOCAL oBrw
LOCAL bInit := {|ob| Brw_Init(ob) } , ;
bEnd := {|ob| Brw_End (ob) }

...


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



Пост N:2658
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:19.07.19 13:15.Заголовок:gfilatov2002 Так все..


gfilatov2002
Так все решается
 
#xcommand DEFINE TBROWSE <name> ;
...
#xcommand DEFINE TBROWSE <name> OBJ <obrw> ;
...
[ <.lAutoCol.> ], [ \{<aColSel>\} ], ;
iif( Valtype( <bInit> ) == 'B', <bInit>, <{bInit}> ) );;

with object <obrw>
...
и
#command END TBROWSE ;
[ ON END <bInit> ] ;
=>;
_EndTBrowse ( iif( Valtype( <bInit> ) == 'B', <bInit>, <{bInit}> ) );;
end with


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




Пост N:1523
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:19.07.19 13:53.Заголовок:SergKis пишет: В мо..


SergKis пишет:

 цитата:
В моем варианте (исправленном ch) работают блоки кода


Это решается и без изменений в заголовке tsbrowse.ch
Попробуйте передавать эти блоки кода таким образом

 цитата:
DEFINE TBROWSE &cBrw OBJ oBrw AT nY, nX WIDTH nW HEIGHT nH CELL ;
COLORS aColor ON INIT Eval( bInit )

...
END TBROWSE ON END Eval( bEnd )



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



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


gfilatov2002 пишет
 цитата:
Попробуйте передавать эти блоки кода таким образом


Вопрос стоит передаваемых параметров в блок кода.
В таком виде Eval(bInit), Eval(bEnd) параметры ( ob переменная ) не передаются {|ob| Brw_...(ob) }

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



Пост N:2660
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:19.07.19 14:48.Заголовок:PS Можно и без парам..


PS
Можно и без параметров отработать, для блоков кода создается среда This тек. TsBrowse
 
*-----------------------------------------------------------------------------*
STAT FUNC Brw_Age( nY, nX, nW, nH )
*-----------------------------------------------------------------------------*
...
LOCAL bInit := {|| Brw_Age_Init() }
LOCAL bEnd := {|| Brw_Age_End () }

*-----------------------------------------------------------------------------*
STATIC FUNC Brw_Age_Init()
*-----------------------------------------------------------------------------*

WITH OBJECT (This.Object):Tsb
...
*-----------------------------------------------------------------------------*
STATIC FUNC Brw_Age_End()
*-----------------------------------------------------------------------------*

WITH OBJECT (This.Object):Tsb
...
и
DEFINE TBROWSE &cBrw OBJ oBrw AT nY, nX WIDTH nW HEIGHT nH CELL ;
COLORS aColor ON INIT Eval( bInit )
...
END TBROWSE ON END Eval( bEnd )


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




Пост N:1524
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:19.07.19 17:42.Заголовок:SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно и без параметров отработать


Да, так работает

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



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


gfilatov2002 пишет
 цитата:
Да, так работает


Вариант поинтересней, более "правильный"
 
...
DEFINE WINDOW &cWnd AT 0,0 WIDTH 980 HEIGHT 650 ;
...
WITH OBJECT This.Object
:StatusBar:Say(MiniGUIVersion(), 3)
:Event( 1, {|ow,ky,ap| AgeReport(ow, ky, ap) } )
:Event( 91, {|oc | Brw_Age_Init(oc:Tsb) } )
:Event( 92, {|oc | Brw_Age_End (oc:Tsb) } )

:Event( 99, {|ow | ow:Release() } )
END WITH
...
*-----------------------------------------------------------------------------*
STATIC FUNC Brw_Age_Init( oBrw )
*-----------------------------------------------------------------------------*
DEFAULT oBrw := (This.Object):Tsb

WITH OBJECT oBrw
...
*-----------------------------------------------------------------------------*
STATIC FUNC Brw_Age_End( oBrw )
*-----------------------------------------------------------------------------*
DEFAULT oBrw := (This.Object):Tsb

WITH OBJECT oBrw
...
DEFINE TBROWSE &cBrw OBJ oBrw AT nY, nX WIDTH nW HEIGHT nH CELL ;
COLORS aColor ON INIT _wPost( 91, This.Index )
DO EVENTS
...
END TBROWSE ON END _wPost( 92, This.Index )
DO EVENTS

bInit и bEnd можно убрать везде

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



Пост N:2662
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:20.07.19 08:48.Заголовок:PS Расширить настрой..


PS
Расширить настройку TsBrowse можно так
 
WITH OBJECT This.Object
:StatusBar:Say(MiniGUIVersion(), 3)
:Event( 1, {|ow,ky,ap| AgeReport(ow, ky, ap) } )
:Event( 91, {|oc | Brw_Age_Init(oc:Tsb) } )
:Event( 92, {|oc | Brw_Age_End (oc:Tsb) } )
:Event( 93, {|oc | Brw_Age_Body(oc:Tsb) } )

:Event( 99, {|ow | ow:Release() } )
END WITH
...
*-----------------------------------------------------------------------------*
STATIC FUNC Brw_Age_Body( oBrw )
*-----------------------------------------------------------------------------*

WITH OBJECT oBrw

// эти строки перенесены из функции Brw_Age_Init(...) для примера
:nHeightCell += 5
:nHeightHead := :nHeightCell + 2
:nHeightFoot := :nHeightCell + 2

END WITH

RETURN Nil
...
DEFINE TBROWSE &cBrw OBJ oBrw AT nY, nX WIDTH nW HEIGHT nH CELL ;
COLORS aColor ON INIT _wPost( 91, This.Index )
DO EVENTS

:SetArrayTo(aArray, aFont, aHead, aSize, aFoot, aPict, aAlign, aName)

AEval(:aColumns, {|oc| oc:lEmptyValToChar := .T., oc:lFixLite := .T. })

_wSend( 93, GetControlIndex( :cControlName, :cParentWnd ) )

If lAdj
:AdjColumns()
EndIf

:ResetVScroll( .T. )
:oHScroll:SetRange(0,0)

END TBROWSE ON END _wPost( 92, This.Index )
DO EVENTS


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



Пост N:2663
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:20.07.19 10:45.Заголовок:gfilatov2002 Не рабо..


gfilatov2002
Не работает This.ToolBar_1.Caption
Правка
 
*-----------------------------------------------------------------------------*
FUNCTION _GetCaption ( ControlName , ParentForm )
*-----------------------------------------------------------------------------*
LOCAL cRetVal As String
LOCAL i

IF ( i := GetControlIndex ( ControlName , ParentForm ) ) > 0

IF _HMG_aControlType [ i ] == 'TOOLBAR' .OR. _HMG_aControlType [ i ] == 'TOOLBUTTON' .OR. ;
_HMG_aControlType [ i ] == 'MENU' .OR. _HMG_aControlType [ i ] == 'RADIOGROUP'
...
RETURN cRetVal

Пример https://TransFiles.ru/8cp1d

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



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


gfilatov2002
Может сделать в Tsb, чтобы не задумываться где какой элемент в :aSuperHead, так
 
METHOD cTextSupHdGet( nCol, aSuperHead, cText ) CLASS TSBrowse

LOCAL xDef := '', xVal
Default nCol := 1, aSuperHead := ::aSuperHead

If nCol > 0 .and. nCol <= Len( aSuperHead )
xVal := ::GetValProp( aSuperHead[ nCol, 3 ], xDef, nCol )
If HB_ISCHAR(cText)
::aSuperHead[ nCol, 3 ] := cText
EndIf

EndIf

If xVal == Nil; xVal := xDef
EndIf

RETURN xVal

Используем вместо
:aSuperHead[1][3] := This.ToolBar_1.Caption + ' ' + cCapt
так
:cTextSupHdGet( 1, , This.ToolBar_1.Caption + ' ' + cCapt )

Аналогично можно сделать в методах
METHOD hFontSupHdGet( nCol, aSuperHead, uFont ) CLASS TSBrowse
METHOD nForeSupHdGet( nCol, aSuperHead, nClrText ) CLASS TSBrowse
METHOD nBackSupHdGet( nCol, aSuperHead, nClrPane ) CLASS TSBrowse
METHOD nAlignSupHdGet( nCol, lHAlign, aSuperHead, nHAlign ) CLASS TSBrowse
или аналогичные методы с названием Set вместо Get

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




Пост N:1525
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:20.07.19 20:58.Заголовок:SergKis пишет: Не р..


SergKis пишет:

 цитата:
Не работает This.ToolBar_1.Caption
Правка


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

SergKis пишет:

 цитата:
аналогичные методы с названием Set вместо Get


Выбрал этот вариант
Благодарю за подсказку

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



Пост N:2665
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:21.07.19 13:34.Заголовок:gfilatov2002 Добави..


gfilatov2002
Добавил в пример (выше) сохранение позиции курсора при повторном нажатии на одну и ту же кнопку (с перемещением курсора на др. страницы тсб). :GotoRec(...) не работает с массивом, может кому интересно будет
Тут Скрытый текст


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



Пост N:2666
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:21.07.19 13:41.Заголовок:PS Строку ..


PS
Строку
 
:nCell := nCol
// :Refresh()

If nPos > 1

убрать можно, оставил скорее по "привычке"

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



Пост N:2677
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:23.07.19 19:53.Заголовок:gfilatov2002 Можно ..


gfilatov2002
Можно чуть поправить HMG_Alert(...)
 
DEFINE WINDOW &cForm WIDTH 0 HEIGHT 0 TITLE cTitle MODAL NOSIZE BACKCOLOR aBackColor ;
ON INTERACTIVECLOSE ( lPressButton .OR. lClosable ) ;
ON RELEASE iif( ! lPressButton .AND. lClosable, _HMG_ModalDialogReturn := 0, NIL )

FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable )

END WINDOW

// ACTIVATE WINDOW &cForm ON INIT FillDlg( cMsg, aOptions, nLineas, cIcoFile, nIcoSize, aBtnColors, bInit, lClosable )
ACTIVATE WINDOW &cForm

Разницы нет, а достраивать доп. контролами удобнее в такой комбинации строк.

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




Пост N:1527
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:23.07.19 20:24.Заголовок:SergKis пишет: чуть..


SergKis пишет:

 цитата:
чуть поправить HMG_Alert(...)


Сделал, конечно.
Благодарю за предложение

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



Пост N:2678
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:24.07.19 13:07.Заголовок:gfilatov2002 Не наш..


gfilatov2002
Не нашел функций в lib для использования в блоках кода для работы с RGB.
Приходится все время таскать ToRGB( aColor ), n2RGB( nColor ).
Может сделать что то такое
 
*-----------------------------------------------------------------------------*
FUNCTION HMG_RGB2n( p1, p2, p3 )
*-----------------------------------------------------------------------------*

If HB_ISARRAY ( p1 ); RETURN RGB( p1[1], p1[2], p1[3] )
ElseIf HB_ISNUMERIC( p2 ); RETURN RGB( p1 , p2 , p3 )
EndIf

RETURN p1

*-----------------------------------------------------------------------------*
FUNCTION HMG_n2RGB( nColor )
*-----------------------------------------------------------------------------*
RETURN { GetRed( nColor ), GetGreen( nColor ), GetBlue( nColor ) }


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




Пост N:1528
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:24.07.19 13:42.Заголовок:SergKis пишет: ToRG..


SergKis пишет:

 цитата:
ToRGB( aColor ), n2RGB( nColor )


Псевдо-функция nRGB2Arr( nColor ) уже определена (и активно используется) в библиотеке и примерах.

 цитата:
SetProperty( cFormName, "BackColor", nRGB2Arr( GetSysColor( COLOR_WINDOW ) ) )


А предложенная функция HMG_RGB2n() - это просто обертка для псевдо-функции RGB().

Если что-то неправильно понял - аргументируйте...


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