Форум » GUI » Примеры из Минигуи -ошибки, вопросы..... (продолжение) » Ответить

Примеры из Минигуи -ошибки, вопросы..... (продолжение)

Andrey: Всем привет. Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ? А заодно может и исправить и добавить новые.... Очень красочный пример: \MiniGUI\SAMPLES\Advanced\AVI_Animation - не работает под Win7 (наверно AVI-шки нет в ресурсах) Предложение Григорию: Можно ли добавить еще один пример с отдельным AVI-файлом в ресурсах проекта и показом такого же бегунка ? Пример: \MiniGUI\SAMPLES\Advanced\DisplayMode - не работает под ХР и далее.... Пример: \MiniGUI\SAMPLES\Advanced\Tsb_filter - вылетает на ХР -------------------------------------------------------------------------------- Harbour MiniGUI Errorlog File Harbour MiniGUI Extended Edition 2.0.1 - 2011.09.21 -------------------------------------------------------------------------------- Date: 11/15/2011 Time: 22:13:24 Error BASE/1124 Argument error: LEFT Called from LEFT(0) Called from SCANSOFT(195) Called from MAIN(84) Пример: \MiniGUI\SAMPLES\BASIC\MsgEdit - не собирается... Z:\MiniGUI\SAMPLES\BASIC\MsgEdit>call ..\..\..\batch\compile.bat demo /L shell32 Harbour 3.1.0dev (Rev. 17042) Copyright (c) 1999-2011, http://harbour-project.org/ Compiling 'demo.prg'... Lines 20133, Functions/Procedures 30 Generating C source output to 'demo.c'... Done. Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland demo.c: Error E2141 demo.prg 993: Declaration syntax error *** 1 errors in Compile *** C compile error.

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Andrey: Спасибо БОЛЬШОЕ !

Andrey: А что за ошибка такая ? Подробней информация как можно получить ? Error MGERROR/0 Grid: ITEMS length mismatch. Program terminated. Called from MSGMINIGUIERROR(91) Called from _DEFINEGRID(140) Called from ACHOICE_HMG(230) Called from ACHOICEMENU(142) Called from LISTSPRAVKI(286) Called from (b)MYINITFORMSPR(173) Called from (b)METRO3BUTTON(40) Called from _DOCONTROLEVENTPROCEDURE(1658) Called from EVENTS(1472) Called from _DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1380) Called from HANDBOOKS(83) Called from (b)MAIN(105) Called from _PROCESSINITPROCEDURE(1498) Called from _ACTIVATEWINDOW(1364)

SergKis: Andrey _DEFINEGRID(140) открываешь h_grid.prg FUNCTION _DefineGrid ( ControlName, ParentFormName, x, y, w, h, aHeaders, aWidths, aRows, value, ; fontname, fontsize, tooltip, change, dblclick, aHeadClick, gotfocus, lostfocus, nogrid, ; aImage, aJust, break, HelpId , bold, italic, underline, strikeout, ownerdata, ondispinfo, ; itemcount, editable, dynamicforecolor, dynamicbackcolor, multiselect, editcontrols, ; backcolor, fontcolor, nId, columnvalid, columnwhen, validmessages, showheaders, aImageHeader, ; NoTabStop, celled, lCheckboxes, lockcolumns ) ... goto line 140 : [pre2] ... IF ValType ( aRows ) != 'U' IF Len ( aRows ) > 0 IF Len ( aRows[1] ) != Len ( aHeaders ) // а тут бяка MsgMiniGuiError ( "Grid: ITEMS length mismatch." ) // line 140 ENDIF ENDIF ENDIF ... [/pre2] если не понятно, открываешь i_grid.ch и смотришь DEFINE GRID ... как ложаться параметры ... и делаешь выводы


Andrey: SergKis пишет: открываешь h_grid.prg Взял это файл, поставил к себе в проект. Перед IF ValType ( aRows ) != 'U' поставил: MsgDebug(aRows,"====",aHeaders,"---",Len ( aRows[1] ), Len ( aHeaders )) После компиляции и запуска на этой строке получаю: MsgDebug(Значение_массива,"====",{'Select menu'},"---", 41, 1) и далее вылет по этой же ошибке.... GRID состоит из ОДНОГО столбца, заголовок есть - тоже один ! Почему должна срабатывать ошибка ? Не пойму я что-то ничего в этом.... А если я делаю SHOWHEADERS .F. тогда этот aHeaders вообще не надо учитывать ! Пример был рабочим - растащил на части - не работает...

Andrey: Andrey пишет: Пример был рабочим - растащил на части - не работает... Блин, уже не первый раз залетаю, что GRID должен на входе иметь не одинарный массив, а вложенный.... Вставил в рабочий пример - h_grid.prg, в нем натыкал отладки, собираешь пример и видишь - где сам накосячил.... Вопрос решен ! Спасибо SergKis за подсказку решения проблеммы !!!

Andrey: Открываю новую форму, задаю шрифт и размер на эту форму, далее вызываю функцию, которая строит объекты на форме. Как получить в этой функции, размер и наименование шрифта ? Можно конечно и передавать параметры в новую функцию, но это не есть хорошо. Я видал что можно и так делать: cFontName := _HMG_DefaultFontName // из MiniGUI.Init() nFontSize := _HMG_DefaultFontSize // из MiniGUI.Init() Или это относиться ТОЛЬКО при открытии задачи ? Поясните пожалуйста....

SergKis: Andrey открываешь h_windows.prg и : [pre2] FUNCTION _DefineWindow ( FormName, Caption, x, y, w, h, nominimize, nomaximize, nosize, nosysmenu, nocaption, aMin, aMax, ; InitProcedure, ReleaseProcedure, MouseDragProcedure, SizeProcedure, ClickProcedure, MouseMoveProcedure, aRGB, PaintProcedure, ; noshow, topmost, main, icon, child, fontname, fontsize, NotifyIconName, NotifyIconTooltip, NotifyIconLeftClick, ; GotFocus, LostFocus, VirtualHeight, VirtualWidth, scrollleft, scrollright, scrollup, scrolldown, hscrollbox, vscrollbox, helpbutton, ; MaximizeProcedure, MinimizeProcedure, cursor, NoAutoRelease, InteractiveCloseProcedure, ; RestoreProcedure, MoveProcedure, DropProcedure, mdi, palette, NotifyIconDblClick, cPanelParent, panel ) ... _HMG_ActiveFontName := IFCHARACTER( FontName, FontName, "" ) _HMG_ActiveFontSize := IFNUMBER( FontSize, FontSize, 0 ) ... [/pre2] если empty(_HMG_ActiveFontName), то берешь _HMG_DefaultFontName аналогично _HMG_ActiveFontSize и _HMG_DefaultFontSize

Andrey: SergKis пишет: открываешь h_windows.prg и : Спасибо !!!

Andrey: Как отловить ошибку в МиниГуи ? В терминалке было так: bErrHandler := ERRORBLOCK( {|var| BREAK(var)} ) //Простая обработка ошибок BEGIN SEQUENCE nJ := LEN( aRelation ) IF nJ > 0 SET RELATION TO FOR nI := 1 TO nJ cTemp1:=aRelation[ nI, 1 ] ; cTemp2:=aRelation[ nI, 2 ] dbSetRelation( cTemp2, {|| &cTemp1}, cTemp1 ) NEXT ENDIF MSG( " Не могу установить SET RELATION "+cTemp1+" INTO "+cTemp2+; " [цикл="+ALLTRIM(STR(nI))+"]", 5 ) RETURN .F. END SEQUENCE ERRORBLOCK(bErrHandler) При ошибках всё прекрасно работало. В МиниГуи теперь получаю: Как сделать, чтобы такого не было ?

SergKis: Andrey пишет:Как отловить ошибку в МиниГуи ? см. SAMPLES\BASIC\MyErrorFunc

Andrey: SergKis пишет: см. SAMPLES\BASIC\MyErrorFunc Спасибо за это ! Только при неправильном dbSetRelation( cTemp2, {|| &cTemp1}, cTemp1 ) программа вылетает БЕЗ ОШИБКИ с таким видом: Как это побороть ? Чтобы ошибка была ?

Andrey: Andrey пишет: Только при неправильном dbSetRelation( cTemp2, {|| &cTemp1}, cTemp1 ) программа вылетает БЕЗ ОШИБКИ с таким видом: Народ, а у вас как вылетает при неправильно заданном dbSetRelation() ?

Dima: Andrey пишет: Народ, а у вас как вылетает при неправильно заданном dbSetRelation() ? У меня ни как. Таких ошибок просто не делаю.

Andrey: gfilatov2002 пишет: С помощью WinAPI надо переопределить statusbar item как самописный (ownerdraw), послав ему собщение SendMessage( hwndSb, SB_SETTEXT, hb_BitOr( IDS_STATUSBAR, SBT_OWNERDRAW ), IDS_STATUSBAR ). В первом приближении это может выглядеть как в примере ниже Скрытый текст А можете эту программ чуток подробне прокоментировать ? Не совсем понял что делает и когда: SET EVENTS FUNCTION TO MYEVENTS Как в основной программе задать цвет и фон StatusBar'a.

gfilatov2002: Andrey пишет: Как в основной программе задать цвет и фон StatusBar'a По шагам: 1) получаем хэндл статусбара hwndSb := GetControlHandle ( _HMG_ActiveMessageBarname, _HMG_ActiveFormName ) 2) переназначаем требуемый участок этого статусбара как ownerdraw SendMessage( hwndSb, SB_SETTEXT, hb_BitOr( IDS_STATUSBAR, SBT_OWNERDRAW ), IDS_STATUSBAR ) 3) обрабатываем в пользовательской функции MyEvents() событие WM_DRAWITEM, в котором сами рисуем надпись на заданном участке. См. доработанный пример ниже [pre2] #include "i_winuser.ch" #include "minigui.ch" #define APP_TITLE "Hello World!" #define SB_SETTEXT (WM_USER+1) #define SBT_OWNERDRAW 0x1000 #define IDS_STATUSBAR 0 /* */ Function Main Local hwndSb SET EVENTS FUNCTION TO MYEVENTS DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 400 ; TITLE APP_TITLE ; MAIN DEFINE STATUSBAR FONT "Arial" SIZE 12 hwndSb := GetControlHandle ( _HMG_ActiveMessageBarname, _HMG_ActiveFormName ) STATUSITEM "Dummy" STATUSITEM "Dummy" WIDTH 92 END STATUSBAR END WINDOW SendMessage( hwndSb, SB_SETTEXT, hb_BitOr( IDS_STATUSBAR, SBT_OWNERDRAW ), IDS_STATUSBAR ) SendMessage( hwndSb, SB_SETTEXT, hb_BitOr( 1, SBT_OWNERDRAW ), 1 ) CENTER WINDOW Win_1 ACTIVATE WINDOW Win_1 Return Nil *----------------------------------------------------------* Function MyEvents ( hWnd, nMsg, wParam, lParam ) *----------------------------------------------------------* local i, a, hBrush do case **************************************************** case nMsg == WM_DRAWITEM **************************************************** i := AScan ( _HMG_aFormHandles , hWnd ) IF i > 0 .AND. _IsControlDefined ( "StatusBar" , _HMG_aFormNames [ i ] ) a := GETOWNBTNRECT(lParam) hBrush := CreateSolidBrush( 255, 255, 225 ) FillRect( GETOWNBTNDC(lParam), a[ 1 ], a[ 2 ], a[ 3 ], a[ 4 ], hBrush ) DeleteObject( hBrush ) IF GETOWNBTNITEMID(lParam) == IDS_STATUSBAR TextOut( a[ 1 ] + 1, a[ 2 ] + 1, "New Value", GETOWNBTNDC(lParam), RGB( 0, 0, 255 ) ) ELSE TextOut( a[ 1 ] + 1, a[ 2 ] + 1, "New Value", GETOWNBTNDC(lParam), RGB( 255, 0, 0 ) ) ENDIF ENDIF otherwise Events( hWnd, nMsg, wParam, lParam ) endcase Return (0) #pragma BEGINDUMP #include "hbapi.h" #include "windows.h" HB_FUNC ( TEXTOUT ) { HDC hdc = (HDC) hb_parnl( 4 ); SetTextColor( hdc, hb_parnl( 5 ) ); SetBkMode( hdc, TRANSPARENT ); TextOut( hdc, hb_parni(1), hb_parni(2), hb_parc(3), strlen(hb_parc(3)) ) ; SetBkMode( hdc, OPAQUE ); DeleteDC( hdc ) ; } #pragma ENDDUMP[/pre2]

Andrey: Вылетает по ошибке. IF i > 0 .AND. _IsControlDefined ( "StatusBar" , _HMG_aFormNames ) Error BASE/1081 Argument error: + Called from _ISCONTROLDEFINED(1039) Called from MYEVENTS(55) Called from UPDATEWINDOW(0) Called from EVENTS(634) Called from MYEVENTS(72) Called from SHOWWINDOW(0) Called from _ACTIVATEWINDOW(1360) Called from MAIN(37)

gfilatov2002: Andrey пишет: Вылетает по ошибке Это из-за форматирования форума - уже поправил код в сообщении выше

Andrey: Работает ! Осталось как то параметры цвета передавать ....

Dima: Andrey пишет: Осталось как то параметры цвета передавать ... Они задаются в этом примере в MyEvents() и похоже красятся все ITEMы а как покрасит конкретный ?

gfilatov2002: Dima пишет: как покрасит конкретный ? Для этого надо сделать само-нарисованным (Ownerdraw) только этот конкретный участок статусной строки. См. рабочий пример ниже [pre2]#include "i_winuser.ch" #include "minigui.ch" #define APP_TITLE "Hello World!" #define SB_SETTEXT (WM_USER+1) #define SBT_OWNERDRAW 0x1000 #define IDS_STATUSBAR 0 /* */ Function Main Local hwndSb SET EVENTS FUNCTION TO MYEVENTS DEFINE WINDOW Win_1 ; AT 0,0 ; WIDTH 400 ; HEIGHT 400 ; TITLE APP_TITLE ; MAIN DEFINE STATUSBAR FONT "Arial" SIZE 12 hwndSb := GetControlHandle ( _HMG_ActiveMessageBarname, _HMG_ActiveFormName ) STATUSITEM "Item 0" STATUSITEM "Item 1" WIDTH 92 STATUSITEM "Item 2" WIDTH 92 END STATUSBAR END WINDOW // SendMessage( hwndSb, SB_SETTEXT, hb_BitOr( IDS_STATUSBAR, SBT_OWNERDRAW ), IDS_STATUSBAR ) SendMessage( hwndSb, SB_SETTEXT, hb_BitOr( 1, SBT_OWNERDRAW ), 1 ) // SendMessage( hwndSb, SB_SETTEXT, hb_BitOr( 2, SBT_OWNERDRAW ), 2 ) CENTER WINDOW Win_1 ACTIVATE WINDOW Win_1 Return Nil *----------------------------------------------------------* Function MyEvents ( hWnd, nMsg, wParam, lParam ) *----------------------------------------------------------* local i, a, hBrush, hDC do case **************************************************** case nMsg == WM_DRAWITEM **************************************************** i := AScan ( _HMG_aFormHandles, hWnd ) IF i > 0 .AND. _IsControlDefined ( "StatusBar", _HMG_aFormNames [ i ] ) a := GETOWNBTNRECT( lParam ) hDC := GETOWNBTNDC( lParam ) IF GETOWNBTNITEMID( lParam ) == IDS_STATUSBAR hBrush := CreateSolidBrush( 225, 225, 225 ) FillRect( hDC, a[ 1 ], a[ 2 ], a[ 3 ], a[ 4 ], hBrush ) DeleteObject( hBrush ) TextOut( a[ 1 ] + 1, a[ 2 ], "New Value", hDC, RGB( 0, 0, 255 ) ) ELSE hBrush := CreateSolidBrush( 225, 225, 0 ) FillRect( hDC, a[ 1 ], a[ 2 ], a[ 3 ], a[ 4 ], hBrush ) DeleteObject( hBrush ) TextOut( a[ 1 ] + 1, a[ 2 ], "New Value", hDC, RGB( 255, 0, 0 ) ) ENDIF ENDIF otherwise Events( hWnd, nMsg, wParam, lParam ) endcase Return (0) #pragma BEGINDUMP #include "hbapi.h" #include "windows.h" HB_FUNC ( TEXTOUT ) { HDC hdc = ( HDC ) hb_parnl( 4 ); SetTextColor( hdc, hb_parnl( 5 ) ); SetBkMode( hdc, TRANSPARENT ); TextOut( hdc, hb_parni( 1 ), hb_parni( 2 ), hb_parc( 3 ), strlen( hb_parc( 3 ) ) ); SetBkMode( hdc, OPAQUE ); } #pragma ENDDUMP [/pre2]



полная версия страницы