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


gfilatov2002
moderator




Пост N: 2191
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 09.09.23 22:08. Заголовок: SergKis пишет: Что ..


SergKis пишет:

 цитата:
Что сделано


ОК, принято
Пример demo3 работает нормально с учетом всех правок

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




Пост N: 4388
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 10.09.23 04:43. Заголовок: gfilatov2002 Правки..


gfilatov2002
Правки в примере, упустил чуток
 
1.
INIT PROCEDURE Sets_ENV()
... (App.Object):IsError правильнее применять чем (App.Object):lError , т.е. можно оба варианта
IF (App.Object):IsError // ошибка создания обработчика сообытий App.Object
MsgStop( (App.Object):cError, "ERROR" )
QUIT
ENDIF
...
END WITH

fErase( App.Cargo:cTimer1Log )
fErase( App.Cargo:cTimer2Log )

RETURN
2. для сортировки колонок по двойному клику
STATIC FUNCTION TsbReport( oWnd, nEvent, aArray, cColName )
...
:UserKeys( VK_F6, {|ob| _wPost(/*2*/"Excel", ob) } )

:lNoChangeOrd := .F.
AEval( :aColumns, {|oc,nc| oc:lFixLite := .T., ;
oc:lIndexCol := nc > 1 })

:AdjColumns({3, 4, 5, 6}) // :AdjColumns()
...
3. сместить вложенные данные при выводе
FUNCTION o2Log( o, nLen, cMsg )
...
IF HB_ISOBJECT( a[2] ) ; o2Log( a[2], nLen + 5 )
ELSE ; ?? a[2]
ENDIF
...


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




Пост N: 2192
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.09.23 10:52. Заголовок: SergKis пишет: Прав..


SergKis пишет:

 цитата:
Правки в примере


Принято.
Благодарю за помощь

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




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


gfilatov2002
Еще небольшая правка (подумал, что информация о контроле в фокусе должна быть всегда)
 
FUNCTION _oThis( oThis, lSets ) // Snapshot of current data This or Sets
...
o:FocusedForm := ""
o:FocusedControl := ""
o:FocusedControlIndex := 0

IF !Empty( c := GetFocus() )
IF ( k := AScan( _HMG_aControlHandles, c ) ) > 0
o:FocusedControlIndex := k

o:FocusedControl := _HMG_aControlNames [ k ]
...
ENDIF
k := iif( Empty( _HMG_ThisControlName ), o:FocusedControlIndex, _HMG_ThisIndex )
IF !Empty( k )

o:ControlCargo := _HMG_aControlMiscData2 [ k ]
o:ControlHandle := _HMG_aControlHandles [ k ]
o:ControlParentHandle := _HMG_aControlParenthandles [ k ]
o:ControlParentName := GetParentFormName ( k )
ENDIF
IF _HMG_ThisFormIndex > 0
...
и в примере правка, обсчитался в max длине имени переменной
FUNCTION myTimer_1( oThis )
...
o2Log(oThis, 19, "*** oThis =>")
...
FUNCTION myTimer_2( oThis )
...
o2Log(oThis, 19, "*** oThis =>")
...


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




Пост N: 2193
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.09.23 19:48. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще небольшая правка


OK

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




Пост N: 7545
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.09.23 15:50. Заголовок: Вот такая ошибка поя..


Минигуи 23.09 Вот такая ошибка появляется:[pre2]

Как это понять ?
Может есть переключатель для вывода ошибок ТОЛЬКО на английском ?

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




Пост N: 4390
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.09.23 06:05. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение по _LogFile(...). 1-й параметр сделать не только Logical, а Array или Char, для того, что бы на таймерах можно было использовать для них свои имена файлов log
 
*-----------------------------------------------------------------------------*
#ifndef __XHARBOUR__
FUNCTION _LogFile( lCrLf, ... )
#else
FUNCTION _LogFile( ... )
#endif
*-----------------------------------------------------------------------------*
LOCAL hFile, i, xVal, cTp
LOCAL aParams := hb_AParams()
LOCAL nParams := Len( aParams )
LOCAL cFile := hb_defaultValue( _SetGetLogFile(), GetStartUpFolder() + hb_ps() + "_MsgLog.txt" )
#ifdef __XHARBOUR__
LOCAL lCrLf
#endif

IF nParams > 0
IF HB_ISCHAR( aParams[1] )
aParams[1] := { .T., aParams[1] }
ENDIF
IF HB_ISARRAY( aParams[1] )
IF Len( aParams[1] ) > 1
IF HB_ISLOGICAL( aParams[1][1] ) // { .T.\.F. , cFile }
cTp := aParams[1][2]
aParams[1] := aParams[1][1]
ELSEIF HB_ISLOGICAL( aParams[1][2] ) // { cFile , .T.\.F. }
cTp := aParams[1][1]
aParams[1] := aParams[1][2]
ELSE // errors
aParams[1] := .T.
ENDIF
IF !Empty( cTp )
IF !hb_ps() $ cTp
cTp := GetStartUpFolder() + hb_ps() + cTp
ENDIF
cFile := cTp
ENDIF
ELSE // errors
aParams[1] := .T.
ENDIF
cTp := NIL
lCrlf := aParams[1]
ENDIF
ENDIF

IF !Empty( cFile )
...
В примере APP_OOPREPORT\demo3.prg можно сделать (для примера по одной строке, например)
*-----------------------------------------------------------------------------*
FUNCTION myTimer_1( oThis )
*-----------------------------------------------------------------------------*
...
LOCAL cLog := "_timer_1.log"
...
_LogFile({.T., cLog}, "@@@ Timer_1 - 1", HB_DATETIME(), ProcName(), nCnt)
_LogFile(cLog, "@@@ Timer_1 - 2", HB_DATETIME(), ProcName(), nCnt)
_LogFile({cLog, .T.}, "@@@ Timer_1 - 3", HB_DATETIME(), ProcName(), ProcLine(), nCnt)
? "@@@ Timer_1", HB_DATETIME(), ProcName(), nCnt
...
*-----------------------------------------------------------------------------*
FUNCTION myTimer_2( oThis )
*-----------------------------------------------------------------------------*
...
LOCAL cLog := "_timer_2.log"
...
_LogFile({.T., cLog}, "@@@ Timer_2 - 1", HB_DATETIME(), ProcName(), nCnt)
_LogFile(cLog, "@@@ Timer_2 - 2", HB_DATETIME(), ProcName(), nCnt)
_LogFile({cLog, .T.}, "@@@ Timer_2 - 3", HB_DATETIME(), ProcName(), ProcLine(), nCnt)
? "@@@ Timer_2", HB_DATETIME(), ProcName(), nCnt
...


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




Пост N: 4391
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.09.23 07:49. Заголовок: PS Возможно, для сте..


PS
Возможно, для стека This переменных надо ставить правильный тип для child окна, т.к. в реале "W" типа нет, т.е
 
*-----------------------------------------------------------------------------*
PROCEDURE _PushEventInfo
*-----------------------------------------------------------------------------*
AAdd ( _HMG_aEventInfo , { _HMG_ThisFormIndex , _HMG_ThisEventType , ;
iif( _HMG_ThisType == "W", "C", _HMG_ThisType ) , ;

_HMG_ThisIndex , _HMG_ThisFormName , _HMG_ThisControlName } )

RETURN
*-----------------------------------------------------------------------------*
PROCEDURE _PopEventInfo( n )
*-----------------------------------------------------------------------------*
...
_HMG_ThisType := iif( _HMG_aEventInfo [l] [3] == "C", "W", _HMG_aEventInfo [l] [3] )

...

С этим правками не уверен, т.к. протокол (смотрим ниже пост) выдает
 
*** aForm => ARRAY[3] // это дает HMG_GetForms( , .T. )
1. {1, "A", "wMainInit", 201590000, "Template of the finished program on MiniGui"}
2. {2, "S", "Forma_Main", 19072408, "STANDARD: Forma_Main (1280x720)"}
3. {3, "S", "Form_ListCD", 30868462, "Message log WM_COPYDATA"}
*** _HMG_aEventInfo => ARRAY[3] // это стек This переменных
1. {0, "", "", 0, NIL, NIL}
2. {1, "", "W", 1, "wMainInit", ""}
3. {2, "", "W", 2, "Forma_Main", ""}

такой подмены типов S -> W не было, была C -> W

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




Пост N: 4392
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.09.23 08:11. Заголовок: PS2 Если сделать изм..


PS2
Если сделать изменения по _LogFile(), как выше, то ф-я o2Log(...) из примера APP_OOPREPORT\demo3.prg может быть такой (сделана модификация) Скрытый текст

применение
 
// доп. ф-ии
FUNCTION To2Log(lExt) // lExt = .T. - расширенная распечатка, массивы по вертикали, объекты по содержимому
o2Log(_oThis(), 19, "*** oThis =>", lExt)
o2Log(oGetForms(.F.), 12, "*** aForm =>", lExt)
o2Log(_HMG_aEventInfo,12, "*** _HMG_aEventInfo =>", lExt)
o2Log("procNL*")
RETURN Nil

FUNCTION oGetForms(lChar)
LOCAL aForms := {}, cRet := "", ow, aw
Default lChar := .T.

FOR EACH ow IN HMG_GetForms( , .T. )
AAdd(aForms, {hb_enumIndex(), ow:Type, ow:Name, ow:Handle, ow:Title} )
NEXT
IF lChar
FOR EACH aw IN aForms
cRet += hb_valtoexp(aw) + CRLF
NEXT
RETURN cRet
ENDIF

RETURN aForms

вызовы (это для отладки)
? "*** TsbObjViewer() *** Start" ; To2Log() ; ?
TsbObjViewer(oWin, oUse, oIndx, oMenu, oTsb, aEvent, bInitForm)
? "*** TsbObjViewer() *** Stop" ; To2Log() ; ?
результат Скрытый текст

PS
Заменил, текст ф-ии o2Log(...), т.к. потерял при перетаскивании часть строк, ее можно применять для App.Cargo, This.Object:Cargo, но она исп. правку для _LogFile(...) ф-ии из поста выше

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




Пост N: 2194
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.09.23 12:01. Заголовок: Всем кому это интересно...


Выложил 1-е обновление сборки 23.09 по адресу

Скачать

Желаю всем хорошего дня!

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




Пост N: 7547
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.09.23 11:21. Заголовок: Собрал свою большую ..


Собрал свою большую систему на новой версии - падает сразу при запуске.
Вот такая ошибка:
Time from start: 0 days 0 hours 0 mins 0 secs 
Error BASE/1004 Message not found: TWNDDATA:EVENT Args: [1] = O TWNDDATA
--------------------------------- Stack Trace ---------------------------------
Called from __ERRRT_SBASE(0)
Called from TWNDDATA:ERROR(0)
Called from (b)HBOBJECT(0)
Called from TWNDDATA:MSGNOTFOUND(0)
Called from TWNDDATA:EVENT(0)
Called from MAIN(158) in module: Source\main.prg

Вот код:
   SET EVENTS FUNCTION TO MyEventsHandler 
DEFINE WINDOW Form_Main ;
MAIN NOSHOW ;
NOMAXIMIZE NOSIZE NOCAPTION ;
ON INIT {|| DoEvents(), _wPost(0) } ;
ON RELEASE {|| _LogFile(.T., CRLF + ">>> STOP <<< " + HMG_TimeMS(App.Cargo:tStart) ) } ;
....
WITH OBJECT This.Object
:Event( 0, {|ow| // запуск при инициализации окна
Local hWnd, cWnd
hWnd := ow:Handle
cWnd := ow:Name
? REPL(".", 90 )
? SPACE(5) + ":Event(0)", ProcNL(), hWnd, IsIconic( hWnd ), cWnd, _HMG_MainHandle
myInitForm()
DO EVENTS
_wSend(1, ow) // запуск события 1
DO EVENTS
_wSend(2, ow) // запуск события 2
DO EVENTS
_wPost(3, ow) // запуск события 3
Return Nil
MAIN(158) -->> })


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




Пост N: 7548
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.09.23 14:18. Заголовок: Заменил в новой верс..


Заменил в новой версии МиниГуи Харбор на январский (из версии МиниГуи)
Version: 3.2.0dev (r2211251714) 
Built on: Dec 3 2022
Last ChangeLog entry: 2022-11-25 18:14 UTC+0100 Przemyslaw Czerpak
ChangeLog ID: 179749ac31ef3a6665d109ba6d02563840596d21

Прога моя собралась и работает нормально.
Чего в Харборе намудрили ?

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




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


SergKis пишет:

 цитата:
Предложение по _LogFile(...)


Принято

SergKis пишет:

 цитата:
Если сделать изменения по _LogFile(), как выше, то ф-я o2Log(...) из примера APP_OOPREPORT\demo3.prg


Возможно получить весь этот пример в крайней редакции?
Заранее благодарен

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




Пост N: 4393
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.09.23 23:02. Заголовок: gfilatov2002 Пример..


gfilatov2002
Пример тут https://TransFiles.ru/tqcd8

положил h_objmisc.prg, в нем ф-ия _o2Log() аналог o2Log() из примера, я положил для использования в lib и что бы не пересекались с примерами переименовал. Команды в o2Log()
o2Log("Forms*" , , , , cLog)
o2Log("procNL*", , , , cLog)
имеют подкоманды
o2Log("Forms*M" , , , , cLog) // только окна модал
o2Log("Forms*MS" , , , , cLog) // только окна модал и standard, т.е. за * список типов окон
o2Log("procNL*3", , , , cLog)
o2Log("procNL*5", , , , cLog) // сколько строк из списка подать на вывод

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




Пост N: 2196
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.09.23 10:36. Заголовок: SergKis пишет: поло..


SergKis пишет:

 цитата:
положил h_objmisc.prg


Спасибо, пример работает нормально

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




Пост N: 4394
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.09.23 12:53. Заголовок: gfilatov2002 В прим..


gfilatov2002
В пример можно добавить работу с записями dbf в контейнере, функция oRecGet().
Правка Скрытый текст


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




Пост N: 7553
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.23 18:47. Заголовок: SergKis пишет: o2Lo..


SergKis пишет:

 цитата:
o2Log("Forms*MS" , , , , cLog) // только окна модал и standard, т.е. за * список типов окон


А можно получить другой список окон, чтобы было имя prg в котором находиться данное окно ?
   aForms :={} 
FOR EACH ow IN HMG_GetForms( , .T. )
AAdd(aForms, {hb_enumIndex(), ow:Type, ow:Name, ow:Handle, ow:Title, ow:Prg} ) // примерно так
NEXT
cRet := ""
FOR EACH aw IN aForms
cRet += hb_valtoexp(aw) + CRLF
NEXT
? cRet


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




Пост N: 4396
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.09.23 19:14. Заголовок: Andrey пишет AAdd(aF..


Andrey пишет
 цитата:
AAdd(aForms, {hb_enumIndex(), ow:Type, ow:Name, ow:Handle, ow:Title, ow:Prg} ) // примерно так


Таких данных нет, сам организуй
 
DEFINE WINDOW ...
This.Cargo := oHmgData()
This.Cargo:cFormName := ThisName
This.Cargo:cFormPrg := ProcFile()
...

o2log(This.Cargo, , "==> :Cargo: ")

PS
Можно поправить тексты hmg для получения данных ProcFile(), ProcName(), ProcLine() - они, правки не большие, тогда будет вывод добавлен
AAdd(o, {hb_enumIndex(ow), ow:Type, ow:Index, ow:Name, ow:Handle, IsWindowVisible(ow:Handle), ow:Title, ow:cProcFile, ow:cProcName, ow:nProcLine})
для пробы сделал, положил на ftp, проверь, если Григорий даст добро на изменения, перекинь

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




Пост N: 2197
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.09.23 12:35. Заголовок: SergKis пишет: Григ..


SergKis пишет:

 цитата:
Григорий даст добро на изменения


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

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




Пост N: 4398
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.09.23 10:12. Заголовок: gfilatov2002 Неболь..


gfilatov2002
Небольшая добавка в h_objmisc.prg
 
FUNCTION _o2Log( o, nLen, cMsg, lExt, cLog )
...
IF HB_ISOBJECT( o )
_LogFile({.F., cLog}, "O:"+o:ClassName)
IF o:ClassName $ "THMGDATA,TKEYDATA,TTHRDATA,TINIDATA"
_LogFile({.F., cLog}, o:GetAll())
IF o:ClassName == "TINIDATA"
_LogFile({.F., cLog}, o:cIni)
ENDIF

FOR EACH a IN o:GetAll()
...
IF a[2]:ClassName $ "THMGDATA,TKEYDATA,TTHRDATA,TINIDATA"
_LogFile({.F., cLog}, a[2]:GetAll())
IF a[2]:ClassName == "TINIDATA"
_LogFile({.F., cLog}, a[2]:cIni)
ENDIF

ELSEIF a[2]:ClassName == "TWNDDATA"
...

Пример проверка для ini https://TransFiles.ru/9yjqn

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