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


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




Пост N: 7970
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.05.25 13:24. Заголовок: Небольшой глюк по ок..


Небольшой глюк по окнам.
В проге стоит
   SET WINDOW MODAL PARENT HANDLE ON  // окна Modal получают родителя 

MAIN окно, далее вызываю STANDART, делаю MAIN.Minimize.
В окне первый же вызов MODAL окна (типа Alert* или MsgDebug) после закрытия этого окна, на экран лезет MAIN окно !!!
Потом после этого не лезет.
Выходим в MAIN окно, заново делаем ... и опять тоже самое, первый раз ВСЕГДА на экран лезет MAIN окно на передний план !
Юзеру ОЧЕНЬ некомфортно....
Как исправить ?

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




Пост N: 4719
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.05.25 14:42. Заголовок: Andrey пишет Как исп..


Andrey пишет
 цитата:
Как исправить ?


Повторю
 
FUNC Modal2(cParent, ...) // cParent - имя Modal(1)
...
ACTIVATE WINDOW &cForm

IF _IsWindowDefined(cParent)
DoMethod(cParent, "SetFocus")
ENDIF

RETURN aRet

PS
Вопрос такой ты уже задавал давно

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




Пост N: 7971
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.05.25 16:17. Заголовок: Я использую стандарт..


Я использую стандартные функции Alert****() !
Как я могу заблокировать показ MAIN окна в них ???
При повторном использовании функции Alert****() такого уже не происходит,
т.е. первый вызов Alert****() и после него показывается MAIN окно.

Можно это исправить в ядре МиниГуи ???

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




Пост N: 2429
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 01.05.25 21:21. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно это исправить в ядре МиниГуи ?


Благодарю за сообщение
Поправил возврат из функции Alert****() в вызвавшее эту функцию дочернее немодальное окно.
В первый раз заметно небольшое мигание при переключении фокуса на вызвавшее окно, при повторном возврате этого мигания нет.

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




Пост N: 7972
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.05.25 23:29. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Поправил возврат из функции Alert****() в


Можно исправленный исходник прислать мне на почту ?
Я попробую у себя в проекте.

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




Пост N: 2430
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.05.25 10:45. Заголовок: Andrey пишет: исход..


Andrey пишет:

 цитата:
исходник прислать мне на почту


Отправил, конечно...

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




Пост N: 2431
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.05.25 11:23. Заголовок: Всем кому это интересно


Опубликована финальная MiniGUI сборка 25.05

Стандартная сборка (zip архив)

Профессиональная сборка (7z архив под паролем)

---
Также были подготовлены дополнительные сборки для следующих C компиляторов:

- MinGW GNU C 15.1.0 (64-bit)

- BCC 7.70 (32-bit и 64-bit)

Эти сборки доступны для всех доноров проекта

Поздравляю всех с наступающим юбилеем Великой Победы!

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




Пост N: 4720
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.25 08:46. Заголовок: gfilatov2002 У себя ..


gfilatov2002 У себя сделал немного по другому для SPLITBOX
 
IF Upper( Arg2 ) == "SPLITBOX" .and. Upper( Arg3 ) $ "HEIGHT,WIDTH" ;
.and. GetControlIndex( Arg2, Arg1 ) == 0
RetVal := 0
IF ( ix := GetFormIndex( Arg1 ) ) > 0
IF IsWindowHandle ( Arg8 := _HMG_aFormReBarHandle [ ix ] )
IF Upper( Arg3 ) == "WIDTH" ; RetVal := GetWindowWidth ( Arg8 )
ELSEIF Upper( Arg3 ) == "HEIGHT" ; RetVal := GetWindowHeight( Arg8 )
ENDIF
ENDIF
ENDIF
RETURN RetVal

ELSEIF ( Upper( Arg2 ) == "VSCROLLBAR" .OR. Upper( Arg2 ) == "HSCROLLBAR" )
IF .NOT. _IsWindowDefined ( Arg1 )
MsgMiniGuiError ( "Window: " + Arg1 + " is not defined." )
ENDIF
ELSE
VerifyControlDefined ( Arg1 , Arg2 )
ENDIF

т.к. используется для вычисления клиентской области окна, то 0 тоже надо возвращать, если нет SPLITBOX, т.е.
nCliH := This.ClientHeight - This.SplitBox.Height - This.StatusBar.Height

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




Пост N: 2432
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.25 09:43. Заголовок: SergKis пишет: 0 то..


SergKis пишет:

 цитата:
0 тоже надо возвращать, если нет SPLITBOX


Благодарю за предложение
Как обычно, это очень практичное предложение, которое упрощает работу.

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




Пост N: 4721
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.25 16:09. Заголовок: gfilatov2002 Неболь..


gfilatov2002
Небольшая правка, Андрей нашел
 
METHOD RButtonDown( nRowPix, nColPix, nFlags ) CLASS TSBrowse
...
IF ! ::lNoVScroll .and. !Empty( ::oVScroll )
::oVScroll:SetPos( ::RelPos( ::nLogicPos() ) )
ENDIF

IF ! ::lNoHScroll .and. !Empty( ::oHScroll )
::oHScroll:SetPos( ::nCell )
ENDIF
...


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




Пост N: 2433
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.25 16:26. Заголовок: SergKis пишет: Небо..


SergKis пишет:

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


Спасибо, но такие проверки отсутствуют и в других методах, не только в RButtonDown().

 цитата:

IF ! ::lNoVScroll .AND. ::oVScroll != NIL
...



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




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


gfilatov2002 пишет
 цитата:
такие проверки отсутствуют и в других методах


По идее, надо чистить. У Андрея задача с основным экраном тсб (колонки помещаются во окно) и второй экран, где правые колонки появляются по CheckBox и колонок больше чем 2-а окна тсб, но при этом oHScroll := NIL, нет горизонтального scroll, попытка установить правый клик, привели к сбою

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




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


SergKis пишет:

 цитата:
попытка установить правый клик, привели к сбою


Поправил, конечно.
Благодарю за помощь

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




Пост N: 4723
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.25 20:09. Заголовок: gfilatov2002 Сканир..


gfilatov2002
Сканировал в h_tbrowse.prg "::oHScroll", мест где надо добавлять проверку немного, самое сложное место это где надо отделить значение ::Cell := ...
 
METHOD HThumbDrag( nPos ) CLASS TSBrowse
...
IF ::lIsTxt
IF ::oHScroll != NIL
::oHScroll:SetPos( ::nAt := nPos )
ENDIF
ELSE
IF ::lLockFreeze .AND. nPos <= ::nFreeze // watch out for frozen columns
::nCell := ::nFreeze + 1
IF ::oHScroll != NIL
::oHScroll:SetPos( ::nCell )
ENDIF

ELSE
::nCell := Min( nPos, Len( ::aColumns ) )
IF ::oHScroll != NIL
::oHScroll:SetPos( ::nCell )
ENDIF

ENDIF
...
цветом выделенное можно вынести за ENDIF, т.е.
IF ::lIsTxt
::nAt := nPos
IF ::oHScroll != NIL
::oHScroll:SetPos( ::nAt )
ENDIF
ELSE
IF ::lLockFreeze .AND. nPos <= ::nFreeze // watch out for frozen columns
::nCell := ::nFreeze + 1
ELSE
::nCell := Min( nPos, Len( ::aColumns ) )
ENDIF
IF ::oHScroll != NIL
::oHScroll:SetPos( ::nCell )
ENDIF
...


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




Пост N: 2435
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.25 21:21. Заголовок: SergKis пишет: METH..


SergKis пишет:

 цитата:
METHOD HThumbDrag( nPos ) CLASS TSBrowse


В этом методе чуть выше уже есть проверка условия

 цитата:
IF ::oHScroll != NIL .AND. ! Empty( nPos )
...


так что дополнительные проверки излишни.

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




Пост N: 4724
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.05.25 22:50. Заголовок: gfilatov2002 :sm36:..


gfilatov2002 Не увидел

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




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


gfilatov2002
Предложение добавить в _TBrowse к oTsb:lZebra вариант oTsb:lChess раскраска строк шахматкой
 
FUNCTION _TBrowse( oParam, uAlias, cBrw, nY, nX, nW, nH )
...
LOCAL i, j, o, lChess, aChess
...
.OR. !Empty( oParam:lZebraRow )
lChess := !Empty( oParam:lChess ) .OR. !Empty( oParam:lChessLine ) ;
.OR. !Empty( oParam:lChessRow )

...
IF lZebra
aZebra := oParam:aZebra ; DEFAULT aZebra := oParam:aZebraColor
DEFAULT aZebra := { GetSysColor( COLOR_WINDOW ), GetSysColor( COLOR_BTNFACE ) }
IF IsArray( aZebra ) .AND. Len( aZebra ) > 1
IF IsArray( aZebra[1] ) .and. IsArrayRGB( aZebra[1] )

aZebra[1] := HMG_RGB2n( aZebra[1] )
ENDIF
IF IsArray( aZebra[2] ) .and. IsArrayRGB( aZebra[2] )

aZebra[2] := HMG_RGB2n( aZebra[2] )
ENDIF
IF IsNumeric( aZebra[1] ) .AND. IsNumeric( aZebra[2] )
AAdd( aColor, { CLR_PANE, {|c,n,b| c := aZebra[2], n := aZebra[1], ;
iif( b:nAt % 2 == 0, c, n ) } } )
ENDIF
ENDIF
ELSEIF lChess
aChess := oParam:aChess ; DEFAULT aChess := oParam:aChessColor
DEFAULT aChess := { GetSysColor( COLOR_WINDOW ), GetSysColor( COLOR_BTNFACE ) }
IF IsArray( aChess ) .AND. Len( aChess ) > 1
IF IsArray( aChess[1] ) .and. IsArrayRGB( aChess[1] )
aChess[1] := HMG_RGB2n( aChess[1] )
ENDIF
IF IsArray( aChess[2] ) .and. IsArrayRGB( aChess[2] )
aChess[2] := HMG_RGB2n( aChess[2] )
ENDIF
AAdd( aColor, { CLR_PANE, {|nr,nc,nn|
IF nr % 2 == 0 ; nn := iif( nc % 2 == 0, 1, 2 )
ELSE ; nn := iif( nc % 2 == 0, 2, 1 )
ENDIF
Return aChess[ nn ]
} } )
ENDIF

ENDIF
...

Применять
oTsb:lChess := .T.
oTsb:aChess := { CLR_HGRAY, CLR_WHITE }
по умолчанию будет DEFAULT aChess := { GetSysColor( COLOR_WINDOW ), GetSysColor( COLOR_BTNFACE ) }

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




Пост N: 2441
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.05.25 18:56. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение добавить в _TBrowse вариант oTsb:lChess


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

Порадовало использование встроенной функции IsArrayRGB()

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




Пост N: 4733
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.25 11:41. Заголовок: gfilatov2002 Неболь..


gfilatov2002
Небольшая правка h_objects.prg
 
CLASS TWndData
...
VAR oEvents AS OBJECT
...
METHOD Def( nIndex, cName, nHandle, nParent, cType, cVar ) INLINE ( ;
::nIndex := nIndex, ::cName := cName, ::nHandle := nHandle, ;
::nParent := nParent, ::cType := cType, ::cVar := cVar, ;
::oCargo := oHmgData(), ::oOnEventBlock := oKeyData( Self, .T. ), ;
::oEvent := oKeyData( Self ), ::oUserKeys := oHmgData(), ;
::oName := oHmgData(), ::oHand := oHmgData(), ;
::oProp := oHmgData(), ::oParam := oHmgData(), ;
::oEvents := oHmgData(), ;

hmg_SetWindowObject( ::nHandle, Self ), ;
::nLeft := ::oApp:Left, ::nRight := ::oApp:Right, ;
::nTop := ::oApp:Top, ::nBottom := ::oApp:Bottom, ;
::nGapWidth := ::oApp:GapsWidth, ;
::nGapHeight := ::oApp:GapsHeight, ;
Self )
...


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




Пост N: 2442
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.05.25 12:21. Заголовок: SergKis пишет: Небо..


SergKis пишет:

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


Поправил, конечно.
Благодарю за помощь

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