Автор | Сообщение |
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; - новые и обновленные старые примеры (как обычно ).
| |
|
Ответов - 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 последней?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 823
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.09.15 08:31. Заголовок: Выпустил очередной р..
| |
|
Haz
|
| |
Пост N: 649
Зарегистрирован: 20.02.11
|
|
Отправлено: 02.09.15 15:42. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Выпустил очередной релиз библиотеки |
| пересобрал проект все норм
| |
|
gfilatov2002
|
| moderator
|
Пост N: 824
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.09.15 16:34. Заголовок: Haz Игорь, благодар..
Haz Игорь, благодарю за подтверждение! krutoff Так задумано автором, и менять этот порядок вызовов нет смысла из соображений совместимости со старым кодом
| |
|
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 ) ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 825
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.09.15 14:33. Заголовок: SergKis пишет: Можн..
SergKis пишет: цитата: | Можно добавть эти модификации |
| Если очень нужно, то, конечно, сделаю...
| |
|
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 требует от блока кода указания в какой колонке он используется, а если добавить колонку перед - придется править все правые блоки указывая новую позицию и это справедливо для всех указанных выше строк
| |
|
SergKis
|
| постоянный участник
|
Пост N: 816
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.09.15 16:22. Заголовок: PS. без nJ к oCol:cN..
PS. без nJ к oCol:cName не прицепиться
| |
|
gfilatov2002
|
| moderator
|
Пост N: 827
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.09.15 16:36. Заголовок: SergKis пишет: без ..
SergKis пишет: цитата: | без nJ к oCol:cName не прицепиться |
| Уже сделал эти исправления
| |
|
SergKis
|
| постоянный участник
|
Пост N: 817
Зарегистрирован: 17.02.12
|
|
Отправлено: 03.09.15 17:08. Заголовок: gfilatov2002 Отличн..
gfilatov2002 Отлично. А что на счет поста N 801 с предыдущего листа
| |
|
gfilatov2002
|
| moderator
|
Пост N: 828
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.09.15 17:34. Заголовок: SergKis пишет: что ..
SergKis пишет: Благодарю за напоминание Пропустил эти исправления Сейчас буду проверять и затем использовать
| |
|
|
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 ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 829
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.09.15 21:15. Заголовок: SergKis пишет: Еще ..
SergKis пишет: Благодарю за помощь Сделал, но только переименовал переменную в lEmptyValToChar
| |
|
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
| |
|
gfilatov2002
|
| moderator
|
Пост N: 830
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.09.15 15:16. Заголовок: Haz пишет: еще прав..
Haz пишет: Благодарю за помощь! Поправил...
| |
|
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(...) метода
| |
|
Andrey
|
| постоянный участник
|
Пост N: 4518
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.09.15 12:14. Заголовок: Григорий, а можно в ..
Григорий, а можно в ядро библиотеки поставить 2 классные функции SergKis ? GetClientWidth() и GetClientHeight() Они прекрасно выдают правильные размеры объектов и пользоваться удобно. Пример: Скрытый текст #include "minigui.ch" Function MAIN() Local nMaxWidth, nMaxHeight nMaxWidth := GetClientWidth(0) nMaxHeight := GetClientHeight(0) DEFINE WINDOW Form_1 AT 0,0 WIDTH nMaxWidth HEIGHT nMaxHeight ; TITLE 'Test MAX desktop' ; MAIN END WINDOW Form_1.Center Form_1.Activate Return Nil /////////////////////////////////////////////////////////////////////////////////////////// // SergKis http://clipper.borda.ru // // GETCLIENTHEIGHT(0) - высота клиентской (внутренней) области Desktop с учетом наличия строки Start // GETCLIENTWIDTH(0) - ширина клиентской (внутренней) области Desktop // GETCLIENTHEIGHT(hWnd) - высота клиентской (внутренней) области окна (или контрола) // GETCLIENTWIDTH(hWnd) - ширина клиентской (внутренней) области окна (или контрола) // т.е.: // hWnd := GetFormHandle('Form_1') // MsgDebug( GetClientWidth(hWnd), GetClientHeight(hWnd) ) #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" // BAA HB_FUNC( GETCLIENTWIDTH ) { RECT rect; LONG hWnd=hb_parnl(1); // SPI_GETWORKAREA == 0x0030 if(hWnd==0) SystemParametersInfo( 0x0030, 0, &rect, 0); else GetClientRect( ( HWND ) hWnd, &rect ); hb_retni( ( INT ) rect.right - rect.left ); } // BAA HB_FUNC( GETCLIENTHEIGHT ) { RECT rect; LONG hWnd=hb_parnl(1); // SPI_GETWORKAREA == 0x0030 if(hWnd==0) SystemParametersInfo( 0x0030, 0, &rect, 0); else GetClientRect( ( HWND ) hWnd, &rect ); hb_retni( ( INT ) rect.bottom - rect.top ); } #pragma ENDDUMP
|
| |
|
Dima
|
| |
Пост N: 5274
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.09.15 12:54. Заголовок: Andrey Да функций м..
Andrey Да функций много хороших и полезных с WINAPI , но вырастет ядро. Вот что Григорий ответил на похожее предложение НО более глобальное цитата: | цитата: все WINAPI функции ... прикрутить к основной библиотеке. Этот подход сейчас используется в официальной сборке HMG. И он привел к тому, что размер экзешника простого примера составляет свыше 3,5 MБ. Подобный пример, собранный с помощью минигуи с компилятором MinGW, будет иметь размер около 2.2 MБ. Поэтому сохранение компактного ядра библиотеки рассматривается как приоритетная задача в Минигуи. А использование дополнительных функций из примеров рекомендуется только в случае необходимости. Поэтому и ответ на Ваше предложение - отрицательный |
| ЗЫ Проще самостоятельно затолкать все нужное в свою отдельную либу.
| |
|
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 координаты ячейки видны нормальным образом (сейчас нет)
| |
|
gfilatov2002
|
| moderator
|
Пост N: 831
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.09.15 15:26. Заголовок: SergKis пишет: Пред..
SergKis пишет: цитата: | Предложение немного поменять |
| Принимается с благодарностью
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|