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: 1691
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.01.18 11:39. Заголовок: gfilatov2002 пишет П..


gfilatov2002 пишет
 цитата:
Принимается


Не отключенным оказалось WM_MOUSEWHEEL, можно делать
 
METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TSBrowse
...
ElseIf nMsg == WM_MOUSEWHEEL
If ::hWnd != 0 .and. ! ::lDontChange .and. :lEnabled
nDelta := Bin2I( I2Bin( HiWord( nWParam ) ) ) / 120
::MouseWheel( nMsg, nDelta, LoWord( nLParam ), HiWord( nLParam ) )
EndIf
Return 0
...
посмотрев, думаю лучше будет
METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TSBrowse
Local nDelta, ix

Default ::lNoPaint := .F., ; //V90
::lDontChange := .F. //V90

If ! ::lEnabled
Return 0
EndIf

If hb_IsBlock( ::bEvents )
...

но может упускаю что то ?



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



Пост N: 1692
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.01.18 14:13. Заголовок: SergKis пишет но мож..


SergKis пишет
 цитата:
но может упускаю что то ?


В таком виде работу метода :Enabled. Поковырял, получилось так
 
METHOD DrawLine( xRow ) CLASS TSBrowse
...
// IF !::lEnabled
// RETURN SELF
// endif

...
METHOD DrawSelect( xRow, lFoot ) CLASS TSBrowse
...
// IF !::lEnabled
// RETURN SELF
// endif

...
METHOD Enabled( lEnab ) CLASS TSBrowse
...
IF ValType( lEnab ) == "L"
...
ENDIF
::Refresh()

ENDIF

RETURN 0
...
METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TSBrowse
...
// If ! ::lEnabled
// Return 0
// EndIf

...
ElseIf nMsg == WM_VSCROLL
If ::lDontchange
Return Nil
EndIf
if nLParam == 0 .and. ::Enabled
Return ::VScroll( Loword( nWParam ), HiWord( nWParam ) )
endif
Elseif nMsg == WM_HSCROLL
If ! ::lEnabled
Return 0
ElseIf ::lDontchange
//V90
Return Nil //V90
EndIf //V90

Return ::HScroll( Loword( nWParam ), HiWord( nWParam ) )
...
ElseIf nMsg == WM_LBUTTONDBLCLK .and. _GetKeyState( VK_SHIFT )
If ! ::lEnabled
Return 0
ElseIf ::lCanSelect .and. !::lEditable

::Selection()
Endif
ElseIf nMsg == WM_MOUSEWHEEL
If ::hWnd != 0 .and. ::lEnabled .and. ! ::lDontChange
nDelta := Bin2I( I2Bin( HiWord( nWParam ) ) ) / 120
...
METHOD KeyUp( nKey, nFlags ) CLASS TSBrowse

If ! ::lEnabled
Return 0
EndIf

...
METHOD Selection() CLASS TSBrowse
...


Заработал метод :Enabled(.F.\.T.) с раскраской (над цветами, возможно, еще надо поработать)



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




Пост N: 1228
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.01.18 16:54. Заголовок: SergKis пишет: Зара..


SergKis пишет:

 цитата:
Заработал метод :Enabled(.F.\.T.) с раскраской


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

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



Пост N: 1696
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.01.18 13:16. Заголовок: gfilatov2002 Еще пр..


gfilatov2002
Еще правки:
 
METHOD Enabled( lEnab ) CLASS TSBrowse
...
::lEnabled := .F.
::SetColor( { 2 }, { CLR_HGRAY } )
::SetColor( { 3, 4 }, { CLR_GRAY, CLR_HGRAY } )
::SetColor( { 9, 10 }, { CLR_GRAY, CLR_HGRAY } )
::SetColor( { 16, 17 }, { CLR_GRAY, CLR_HGRAY } )
::SetColor( { 18, 19 }, { CLR_GRAY, CLR_HGRAY } )

ELSE
...


CLASS TWndData
...
VAR oName AS OBJECT
VAR oHand AS OBJECT
VAR lAction INIT .T.


EXPORTED:
...
ASSIGN Cargo( xVal ) INLINE _WindowCargo( Self, xVal )

ACCESS Action INLINE ::lAction
ASSIGN Action( lAction ) INLINE ::lAction := ! empty(lAction)

ACCESS StatusBar INLINE ::oStatusBar
...

METHOD UserKeys( Key, Block, p2, p3 ) INLINE iif( HB_ISBLOCK( Block ), ::oUserKeys:Set( Key, Block ), ;
iif( ::lAction, ::oUserKeys:Do ( Key, Block, p2, p3 ), Nil ) )

METHOD Event ( Key, Block, p2, p3 ) INLINE iif( HB_ISBLOCK( Block ), ::oEvent:Set( Key, Block ), ;
iif( ::lAction, ::oEvent:Do ( Key, Block, p2, p3 ), Nil ) )

METHOD PostMsg( nKey, nHandle ) INLINE iif( ::lAction, ;
PostMessage(::nHandle, ::WM_nMsgW, nKey, hb_defaultValue(nHandle, 0)), Nil )
METHOD SendMsg( nKey, nHandle ) INLINE iif( ::lAction, ;
SendMessage(::nHandle, ::WM_nMsgW, nKey, hb_defaultValue(nHandle, 0)), Nil )

METHOD Release() INLINE iif( ::IsWindow, iif( ::lAction, PostMessage(::nHandle, WM_CLOSE, 0, 0), Nil ), Nil )
...

как это работает в готовом реал. примере (на своей lib) http://my-files.ru/dkcnbc
жмем F9 ToServ и блокируется работа всех кнопок и дверь выхода с окна с раскраской
Похожий пример потом можно сгородить

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



Пост N: 1697
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.01.18 13:30. Заголовок: PS Виноват, надо в a..


PS
Виноват, надо в article.ini
PathUmz=C:\UCHET\MATERIAL\SPR
указать, создать и переписать из DATA U02.dbf
Прога под конкретного клиента, по изменению Артикула в базе.


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



Пост N: 1698
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.01.18 14:11. Заголовок: PS по текстам так вы..


PS
по текстам так выглядит Скрытый текст


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



Пост N: 1699
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.01.18 01:03. Заголовок: gfilatov2002 Что то..


gfilatov2002
Что то в TsBrowse не оказалось Cargo, может стоит добавить, для удобства ?
oBrw:Cargo := 123
nVal := oBrw:Cargo



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




Пост N: 1229
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.01.18 12:21. Заголовок: SergKis пишет: може..


SergKis пишет:

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


Добавил, конечно, как и все Ваши предыдущие предложения.
Благодарю за Ваше внимание

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




Пост N: 5687
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.01.18 10:13. Заголовок: Присоединяюсь к доба..


Присоединяюсь к добавлениям ... Если конечно это не сложно и не помешает логике.
   ? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Row") 
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Col")
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Width")
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Height")

Добавить
  ? oBrw:nRowWnd 
? oBrw:nColWnd
? oBrw:nWidthWnd
? oBrw:nHeightWnd



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



Пост N: 1700
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.01.18 10:40. Заголовок: Andrey This.Row Thi..


Andrey
This.Row
This.Col
This.Width
This.Height
ThisWindow.Row
ThisWindow.Col
ThisWindow.Width
ThisWindow.Height
Form_1.Row
Form_1.Col
Form_1.Width
Form_1.Height
GetWindowRow(oBrw:hWndParent)
GetWindowCol(oBrw:hWndParent)
GetWindowWidth(oBrw:hWndParent)
GetWindowHeight(oBrw:hWndParent)
SET OOP ON
oWnd := Do_Obj(oBrw:hWndParent)
oWnd:Row
oWnd:Col
oWnd:Width
oWnd:Height
oTsb := Do_Obj(oBrw:hWnd)
oTsb:Window:Row
oTsb:Window:Col
oTsb:Window:Width
oTsb:Window:Height
маловато будет ?


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



Пост N: 1701
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.01.18 12:01. Заголовок: PS в дополнение созд..


PS
в дополнение
создать среду _HMG_This... для блока кода (при работе с тсб, к примеру)
1. для окна
xRet := Do_WindowEventProcedure ( bBlock, GetFormIndex('Form_1'), p1, p2, p3, p4 )
2. для контрола
xRet := Do_ControlEventProcedure ( bBlock, GetControlIndex('Имя_контрола', 'Form_1'), p1, p2, p3, p4 )
среда _HMG_This... для блока кода создается, потом восстанавливается предыдущая

в продолжение SET OOP ON (без среды This)
FUNC My( obj, par1, par2, par3 )
...
RETURN { par1,par2,par3, obj:IsWindow }
1.
aRet := Do_Obj(oBrw:hWndParent, {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC')
или
aRet := Do_Obj(GetFormHandle('Form_1'), {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC')
получим
? aRet[4] // .T.
2.
aRet := Do_Obj(oBrw:hWnd, {|ob,p1,p2,p3| My(ob,p1,p2,p3) }, 'AAA', 'BBB', 'CCC')
или
aRet := Do_Obj(GetControlHandle('Имя_контрола', 'Form_1'), {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC')
получим
? aRet[4] // .F.
в первом случае блок получит объект окна
во втором объект Tsb\ контрола



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




Пост N: 5688
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.01.18 12:16. Заголовок: SergKis пишет: мало..


SergKis пишет:

 цитата:
маловато будет ?


В самый раз !

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


Пост N: 754
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 10.01.18 17:56. Заголовок: Примеры кода ... a..


Примеры кода

 цитата:

...
aRet := Do_Obj(GetControlHandle('Имя_контрола', 'Form_1'),
или
aRet := Do_Obj(GetControlHandle('Имя_контрола', 'Form_1'), {|ow,p1,p2,p3| My(ow,p1,p2,p3) }, 'AAA', 'BBB', 'CCC')
...


и др.
Это , конечно, круто, но совсем не наглядно. На мой взгляд, все сложности и хитрости должны быть за "бортом" прикладных программ - где-то в исходниках
библиотеки, dLL и т.п.
Мне больше по душе :
This.Row
This.Col
This.Width
This.Height
This.Value
This.Name
..
А все остальные действия должны быть типа 2+3 и т.п

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



Пост N: 1702
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.01.18 19:37. Заголовок: Это , конечно, крут..




 цитата:
Это , конечно, круто, но совсем не наглядно...
Мне больше по душе


Где среда This создается - удобно, где ее нет, this уже не работает, в той же тсб.
Есть ф-ии для добывания объктов
o := _WindowObj(FormName\FormHandle)
o := _ControlObj(ControlHandle[\ControlName, FormName])
вместо них использую получить любой объект по handle
o := Do_Obj(Handle[, block,....])
в основном, исп. без блока, но при наличии массива Handle
AEval(aHandle, {|nh| Do_Obj(nh, {|obj| MyFun(obj) }) })
даже очень ничего, т.е.
AEval(_HMG_aFormHandles, {|nh,nn| Do_Obj(nh, {|obj| MyFun(obj, nn) }) })
обработаем все окна, причем в MyFun(oWnd) работать с объектом окна, т.е.
oWnd:Type
oWnd:Name
oWnd:Index
oWnd:Row
oWnd:Col
oWnd:Width
oWnd:Height
oWnd:ClientWidth
oWnd:ClientHeight
oWnd:Value
...
crazy пример, перебор всех контролов всех окон
AEval(_HMG_aControlHandles, {|nh,nn| Do_Obj(nh, {|obj| MyFun(obj, nn) }) })
MyFun(oCtl) будет работать с обектами контролов
oCtl:Type
oCtl:Name
oCtl:Index
oCtl:Row
oCtl:Col
oCtl:Width
oCtl:Height
oCtl:ClientWidth
oCtl:ClientHeight
oCtl:Value
...
не все контролы вкл. в SET OOP ON, где то будет Nil возврат.



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




Пост N: 5689
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.01.18 22:22. Заголовок: Andrey пишет: Присо..


Andrey пишет:

 цитата:
Присоединяюсь к добавлениям ... Если конечно это не сложно и не помешает логике.
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Row")
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Col")
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Width")
? GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Height")
Добавить
? oBrw:nRowWnd
? oBrw:nColWnd
? oBrw:nWidthWnd
? oBrw:nHeightWnd



SergKis пишет:

 цитата:
Где среда This создается - удобно, где ее нет, this уже не работает, в той же тсб.
Есть ф-ии для добывания объктов



Так я и хочу короткого написания функций
oBrw:nRowWnd вместо GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Row") .
Может и неправильно написал, надо наверное так:
   ? oBrw:nRowBrw   
? oBrw:nColBrw
? oBrw:nWidthBrw
? oBrw:nHeightBrw


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



Пост N: 1703
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.01.18 22:36. Заголовок: Andrey пишет Так я и..


Andrey пишет
 цитата:
Так я и хочу короткого написания функций


Есть (METHOD New смотри) координаты, я понимаю
oBrw:nTop
oBrw:nLeft
oBrw:nBottom
oBrw:Right


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




Пост N: 5690
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.01.18 22:49. Заголовок: SergKis пишет: Есть..


SergKis пишет:

 цитата:
Есть (METHOD New смотри) координаты, я понимаю


Пропустил ! Спасибо !
То что нужно.

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



Пост N: 1704
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.01.18 22:50. Заголовок: PS создавай this сре..


PS
создавай this среду в своей функции, запускай через блок кода для тсб
xRet := Do_ControlEventProcedure ( bBlock, GetControlIndex(oBrw:cControlName, oBrw:cParentWnd), p1, p2, p3, p4 )


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




Пост N: 5691
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.01.18 22:55. Заголовок: SergKis пишет: созд..


SergKis пишет:

 цитата:
создавай this среду в своей функции, запускай через блок кода для тсб
xRet := Do_ControlEventProcedure ( bBlock, GetControlIndex(oBrw:cControlName, oBrw:cParentWnd), p1, p2, p3, p4 )


Не всё сразу. Надо с более простым решением разобраться.

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


Пост N: 755
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 12.01.18 14:09. Заголовок: SergKis пример, пе..


SergKis


 цитата:
пример, перебор всех контролов всех окон



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

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