On-line: PSP, Haz, гостей 4. Всего: 6 [подробнее..]
АвторСообщение
gfilatov
модератор




Пост N: 699
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть V) (продолжение)


Начало темы находится здесь, а теперь

АНОНС * АНОНС * АНОНС * АНОНС * АНОНС

Готовится к опубликованию новая сборка №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 [только новые]


krutoff





Пост N: 171
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 31.08.15 12:37. Заголовок: On INIT


Григорий, наткнулся на такую проблемку.
Для ввода новой записи в полнооконном режиме я всегда делаю такой код
if isAppend; Go Bottom; Skip; endIf // Чтобы показало нулевые поля
Затем форму наполняю getBox'ами с параметром FIELD. В этом случае фома будет
универсальной для ввода/корректировки записи.
Так вот если при вводе новой записи в ON INIT переприсвоить значения getBox'ов, то ничего
не переприсваивается.
Нашел, где портится - при открытии окна идет цепочка процедур (h_windows.prg):
_ActivateWindow
_SetActivationFlag
_ProcessInitProcedure
_RefreshDataControls
И вот эта последняя процедура _RefreshDataControls присваивает значения из записи файла.
Можно ли в этой цепочке поставить _ProcessInitProcedure последней?



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




Пост N: 823
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.09.15 08:31. Заголовок: Выпустил очередной р..


Выпустил очередной релиз библиотеки.

Сборка для компилятора BCC лежит на официальном сайте библиотеки по адресу:

http://hmgextended.com/files/CONTRIB/hmg-2.5.2-setup.zip

Также доступна сборка для компилятора MinGW по адресу:

http://hmgextended.com/files/CONTRIB/hmg252-mingw.exe

и компактный архив для свежей версии компилятора xHarbour

http://hmgextended.com/files/CONTRIB/xhmg252_xhb10131.zip

Благодарю за внимание

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 649
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.09.15 15:42. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Выпустил очередной релиз библиотеки


пересобрал проект все норм

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




Пост N: 824
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.09.15 16:34. Заголовок: Haz Игорь, благодар..


Haz
Игорь, благодарю за подтверждение!

krutoff
Так задумано автором, и менять этот порядок вызовов нет смысла из соображений совместимости со старым кодом

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




Пост N: 813
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.09.15 12:32. Заголовок: gfilatov2002 Григор..


gfilatov2002
Григорий, поковырялся еще в вызовах блока кода TsBrowse. Можно добавть эти модификации (bold-ом) ?
 
METHOD DrawHeaders( lFooters ) CLASS TSBrowse
...
For nI := nBegin To nLastCol
...
nAlign := If( ValType( oColumn:nHAlign ) == "B", ;
Eval( oColumn:nHAlign, nJ, Self ), oColumn:nHAlign )
...
hBitMap := If( ValType( oColumn:uBmpHead ) == "B", Eval( oColumn:uBmpHead, nJ, Self ), oColumn:uBmpHead )
...
cHeading := If( Valtype( oColumn:cHeading ) == "B", Eval( oColumn:cHeading, nJ, Self ), oColumn:cHeading )
...
nClr3dL := If( ValType( nClr3dL ) == "B", Eval( nClr3dL, 0, nJ, Self ), nClr3dL )
nClr3dS := If( ValType( nClr3dS ) == "B", Eval( nClr3dS, 0, nJ, Self ), nClr3dS )
...
IF ::lDrawSpecHd
...
nAlign := If( ValType( oColumn:nSAlign ) == "B", Eval( oColumn:nSAlign, nJ, Self ), oColumn:nSAlign )
...
nClrFore := If( ValType( nClrFore ) == "B", Eval( nClrFore, nJ, Self ), nClrFore )
...
nClrBackS := If( ValType( nClrBackS ) == "B", Eval( nClrBackS, nJ, Self ), nClrBackS )
...
cHeading := If( Valtype( oColumn:cSpcHeading ) == "B", Eval( oColumn:cSpcHeading, nJ, Self ), oColumn:cSpcHeading )
...
hBitMap := If( ValType( oColumn:uBmpSpcHd ) == "B", Eval( oColumn:uBmpSpcHd, nJ, Self ), oColumn:uBmpSpcHd )
...
nClr3dL := If( ValType( nClr3dL ) == "B", Eval( nClr3dL, 0, nJ, Self ), nClr3dL )
nClr3dS := If( ValType( nClr3dS ) == "B", Eval( nClr3dS, 0, nJ, Self ), nClr3dS )
...
If ::lFooting .and. ::lDrawFooters
...
nClrFore := If( ValType( nClrFore ) == "B", Eval( nClrFore, nJ, Self ), nClrFore )
...
nClrBack := If( ValType( nClrBack ) == "B", Eval( nClrBack, nJ, Self ), nClrBack )
...
cFooting := If( Valtype( oColumn:cFooting ) == "B", Eval( oColumn:cFooting, nJ, Self ), oColumn:cFooting )
...
hBitMap := If( ValType( oColumn:uBmpFoot ) == "B", Eval( oColumn:uBmpFoot, nJ, Self ), oColumn:uBmpFoot )
...
nClr3dL := If( ValType( nClr3dL ) == "B", Eval( nClr3dL, 0, nJ, Self ), nClr3dL )
nClr3dS := If( ValType( nClr3dS ) == "B", Eval( nClr3dS, 0, nJ, Self ), nClr3dS )
...

METHOD DrawLine( xRow ) CLASS TSBrowse
...
For nI := nBegin To nLastCol
...
nAlign := If( ValType( nAlign ) == "B", Eval( nAlign, nJ, Self ), nAlign )
...
hBitMap := If( ValType( uBmpCell ) == "B", Eval( uBmpCell, nJ, Self ), uBmpCell )
...
nClr3dL := If( ValType( nClr3dL ) == "B", Eval( nClr3dL, ::nAt, nJ, Self ), nClr3dL )
nClr3dS := If( ValType( nClr3dS ) == "B", Eval( nClr3dS, ::nAt, nJ, Self ), nClr3dS )
...

METHOD DrawSelect( xRow ) CLASS TSBrowse
...
For nI := nBegin To nLastCol
...
nAlign := If( ValType( nAlign ) == "B", Eval( nAlign, nJ, Self ), nAlign )
...
hBitMap := If( ValType( uBmpCell ) == "B", Eval( uBmpCell, nJ, Self ), uBmpCell )
...
nClr3dL := If( ValType( nClr3dL ) == "B", Eval( nClr3dL, ::nAt, nJ, Self ), nClr3dL )
nClr3dS := If( ValType( nClr3dS ) == "B", Eval( nClr3dS, ::nAt, nJ, Self ), nClr3dS )
...


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




Пост N: 825
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.09.15 14:33. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно добавть эти модификации


Если очень нужно, то, конечно, сделаю...

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




Пост N: 815
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.09.15 15:22. Заголовок: gfilatov2002 пишет:Е..


gfilatov2002 пишет:
 цитата:
Если очень нужно, то, конечно, сделаю...


Дело в том, что при вызове блока кода без nJ, Sel не понятно, какая колонка прорисовывается и использование PUBLIC oBrw переменной в нем не самый лучший стиль программирования. Например cFooting := If( Valtype( oColumn:cFooting ) == "B", Eval( oColumn:cFooting, nJ, Self ), oColumn:cFooting ) без nJ требует от блока кода указания в какой колонке он используется, а если добавить колонку перед - придется править все правые блоки указывая новую позицию и это справедливо для всех указанных выше строк

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




Пост N: 816
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.09.15 16:22. Заголовок: PS. без nJ к oCol:cN..


PS. без nJ к oCol:cName не прицепиться

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




Пост N: 827
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.09.15 16:36. Заголовок: SergKis пишет: без ..


SergKis пишет:

 цитата:
без nJ к oCol:cName не прицепиться


Уже сделал эти исправления

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




Пост N: 817
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.09.15 17:08. Заголовок: gfilatov2002 Отличн..


gfilatov2002
Отлично. А что на счет поста N 801 с предыдущего листа

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




Пост N: 828
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.09.15 17:34. Заголовок: SergKis пишет: что ..


SergKis пишет:

 цитата:
что на счет поста N 801


Благодарю за напоминание
Пропустил эти исправления
Сейчас буду проверять и затем использовать

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




Пост N: 818
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.09.15 18:47. Заголовок: gfilatov2002 Еще пр..


gfilatov2002
Еще предложение, добавить в CLASS TSColumn переменную
DATA lValToCharEmpty AS LOGICAL INIT .F. // при .T. показывать пустую строку для пустых значений типа D,N,T,L после cValToChar(...) вместо 0, 0.00, / / , ...

добавив небольшой код (bold-ом)
 
METHOD DrawLine( xRow ) CLASS TSBrowse
...
//V90
If lCheck
Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )}
hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ]
nAlign := nMakeLong( DT_CENTER, DT_CENTER )
uData := ""
ElseIf oColumn:lValToCharEmpty .and. empty(uData)
uData := ""

EndIf
//end
...

METHOD DrawSelect( xRow ) CLASS TSBrowse
...
If lCheck //V90
Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 ) }
hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ]
nAlign := nMakeLong( DT_CENTER, DT_CENTER )
uData := ""
ElseIf oColumn:lValToCharEmpty .and. empty(uData)
uData := ""

EndIf //end
...


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




Пост N: 829
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.09.15 21:15. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще предложение


Благодарю за помощь
Сделал, но только переименовал переменную в lEmptyValToChar

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 655
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.09.15 14:10. Заголовок: Григорий , еще право..


Григорий , еще правочка . В одном месте в блок bPrevEdit не передается обект. Остальные вызовы по коду OK

 
METHOD KeyDown( nKey, nFlags ) CLASS TSBrowse
...
...
If ::aColumns[ nCol ]:bPrevEdit != Nil

If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) // append mode for arrays
Else // GF 16-05-2008
uVal := Eval( ::aColumns[ nCol ]:bData )
uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self )
If ValType( uVal ) == "L" .and. ! uVal
Return 0
EndIf
EndIf

EndIf


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




Пост N: 830
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.09.15 15:16. Заголовок: Haz пишет: еще прав..


Haz пишет:

 цитата:
еще правочка


Благодарю за помощь!
Поправил...

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




Пост N: 820
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.09.15 16:54. Заголовок: Haz пишет:uVal := Ev..


Haz пишет:
 цитата:
uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self )


Не знаю насколько это важно, но у себя я добавил еще параметр
Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self, .T. ) // .T. - вызов из ::Edit(...) метода
uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self .F. ) // .F. - вызов из ::KeyDown(...) метода





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




Пост N: 4518
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.09.15 12:14. Заголовок: Григорий, а можно в ..


Григорий, а можно в ядро библиотеки поставить 2 классные функции SergKis ?
GetClientWidth() и GetClientHeight()
Они прекрасно выдают правильные размеры объектов и пользоваться удобно.

Пример:
Скрытый текст


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5274
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.09.15 12:54. Заголовок: Andrey Да функций м..


Andrey
Да функций много хороших и полезных с WINAPI , но вырастет ядро.
Вот что Григорий ответил на похожее предложение НО более глобальное


 цитата:

цитата:
все WINAPI функции ... прикрутить к основной библиотеке.

Этот подход сейчас используется в официальной сборке HMG.
И он привел к тому, что размер экзешника простого примера составляет свыше 3,5 MБ.
Подобный пример, собранный с помощью минигуи с компилятором MinGW, будет иметь размер около 2.2 MБ.
Поэтому сохранение компактного ядра библиотеки рассматривается как приоритетная задача в Минигуи.
А использование дополнительных функций из примеров рекомендуется только в случае необходимости.
Поэтому и ответ на Ваше предложение - отрицательный



ЗЫ
Проще самостоятельно затолкать все нужное в свою отдельную либу.

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




Пост N: 824
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.09.15 11:34. Заголовок: gfilatov2002 Предло..


gfilatov2002
Предложение немного поменять стоки местами:
 
METHOD EditExit(...)
...
Line: 4045
::lAppendMode := oCol:oEdit:lAppend
oCol:oEdit:Move( 1500,0 )
oCol:oEdit:End()
// oCol:oEdit := Nil было
::PostEdit( uValue, nCol, bValid )
oCol:oEdit := Nil
::oWnd:bValid := ::oGet
cMsg := If( ! Empty( oCol:cMsg ), oCol:cMsg, ::cMsg )
cMsg := If( Valtype( cMsg ) == "B", Eval( cMsg, Self, ::nCell ), cMsg )
::SetMsg( cMsg )
Return Nil
...
Line: 4091
oCol:oEdit:End()
// oCol:oEdit := Nil было
::oWnd:bValid := ::oGet
::PostEdit( uValue, nCol, bValid )
oCol:oEdit := Nil

cMsg := If( ! Empty( oCol:cMsg ), oCol:cMsg, ::cMsg )
cMsg := If( Valtype( cMsg ) == "B", Eval( cMsg, Self, ::nCell ), cMsg )
::SetMsg( cMsg )
...

Тогда в bValid из oCol:oEdit координаты ячейки видны нормальным образом (сейчас нет)

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




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


SergKis пишет:

 цитата:
Предложение немного поменять


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

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