Автор | Сообщение |
Andrey
|
| постоянный участник
|
Пост N: 1929
Зарегистрирован: 12.09.06
|
|
Отправлено: 15.11.11 21:36. Заголовок: Примеры из Минигуи -ошибки, вопросы..... (продолжение)
Всем привет. Взялся смотреть примеры из МиниГуи, так не все работают. Может кто подскажет что там "допилить" нужно ? А заодно может и исправить и добавить новые.... Очень красочный пример: \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
|
| постоянный участник
|
Пост N: 3905
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.01.15 11:49. Заголовок: Спасибо БОЛЬШОЕ ! :..
Спасибо БОЛЬШОЕ !
| |
|
Andrey
|
| постоянный участник
|
Пост N: 3908
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.01.15 21:09. Заголовок: А что за ошибка така..
А что за ошибка такая ? Подробней информация как можно получить ? 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
|
| постоянный участник
|
Пост N: 463
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.01.15 21:59. Заголовок: Andrey _DEFINEGRID(..
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 : ... IF ValType ( aRows ) != 'U' IF Len ( aRows ) > 0 IF Len ( aRows[1] ) != Len ( aHeaders ) // а тут бяка MsgMiniGuiError ( "Grid: ITEMS length mismatch." ) // line 140 ENDIF ENDIF ENDIF ... если не понятно, открываешь i_grid.ch и смотришь DEFINE GRID ... как ложаться параметры ... и делаешь выводы
| |
|
Andrey
|
| постоянный участник
|
Пост N: 3909
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.01.15 14:58. Заголовок: SergKis пишет: откр..
SergKis пишет: Взял это файл, поставил к себе в проект. Перед IF ValType ( aRows ) != 'U' поставил: MsgDebug(aRows,"====",aHeaders,"---",Len ( aRows[1] ), Len ( aHeaders )) После компиляции и запуска на этой строке получаю: MsgDebug(Значение_массива,"====",{'Select menu'},"---", 41, 1) и далее вылет по этой же ошибке.... GRID состоит из ОДНОГО столбца, заголовок есть - тоже один ! Почему должна срабатывать ошибка ? Не пойму я что-то ничего в этом.... А если я делаю SHOWHEADERS .F. тогда этот aHeaders вообще не надо учитывать ! Пример был рабочим - растащил на части - не работает...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 3912
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.01.15 23:25. Заголовок: Andrey пишет: Приме..
Andrey пишет: цитата: | Пример был рабочим - растащил на части - не работает... |
| Блин, уже не первый раз залетаю, что GRID должен на входе иметь не одинарный массив, а вложенный.... Вставил в рабочий пример - h_grid.prg, в нем натыкал отладки, собираешь пример и видишь - где сам накосячил.... Вопрос решен ! Спасибо SergKis за подсказку решения проблеммы !!!
| |
|
Andrey
|
| постоянный участник
|
Пост N: 3913
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.01.15 20:54. Заголовок: Открываю новую форму..
Открываю новую форму, задаю шрифт и размер на эту форму, далее вызываю функцию, которая строит объекты на форме. Как получить в этой функции, размер и наименование шрифта ? Можно конечно и передавать параметры в новую функцию, но это не есть хорошо. Я видал что можно и так делать: cFontName := _HMG_DefaultFontName // из MiniGUI.Init() nFontSize := _HMG_DefaultFontSize // из MiniGUI.Init() Или это относиться ТОЛЬКО при открытии задачи ? Поясните пожалуйста....
| |
|
SergKis
|
| постоянный участник
|
Пост N: 464
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.01.15 21:32. Заголовок: Andrey открываешь h..
Andrey открываешь h_windows.prg и : 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 ) ... если empty(_HMG_ActiveFontName), то берешь _HMG_DefaultFontName аналогично _HMG_ActiveFontSize и _HMG_DefaultFontSize
| |
|
Andrey
|
| постоянный участник
|
Пост N: 3914
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.01.15 19:54. Заголовок: SergKis пишет: откр..
SergKis пишет: цитата: | открываешь h_windows.prg и : |
| Спасибо !!!
| |
|
Andrey
|
| постоянный участник
|
Пост N: 3915
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.01.15 20:00. Заголовок: Как отловить ошибку ..
Как отловить ошибку в МиниГуи ? В терминалке было так: 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
|
| постоянный участник
|
Пост N: 465
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.01.15 20:25. Заголовок: Andrey пишет:Как отл..
Andrey пишет: цитата: | Как отловить ошибку в МиниГуи ? |
| см. SAMPLES\BASIC\MyErrorFunc
| |
|
Andrey
|
| постоянный участник
|
Пост N: 3916
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.01.15 21:15. Заголовок: SergKis пишет: см. ..
SergKis пишет: цитата: | см. SAMPLES\BASIC\MyErrorFunc |
| Спасибо за это ! Только при неправильном dbSetRelation( cTemp2, {|| &cTemp1}, cTemp1 ) программа вылетает БЕЗ ОШИБКИ с таким видом: Как это побороть ? Чтобы ошибка была ?
| |
|
|
Andrey
|
| постоянный участник
|
Пост N: 3935
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.01.15 23:17. Заголовок: Andrey пишет: Тольк..
Andrey пишет: цитата: | Только при неправильном dbSetRelation( cTemp2, {|| &cTemp1}, cTemp1 ) программа вылетает БЕЗ ОШИБКИ с таким видом: |
| Народ, а у вас как вылетает при неправильно заданном dbSetRelation() ?
| |
|
Dima
|
| |
Пост N: 4426
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.01.15 23:41. Заголовок: Andrey пишет: Народ..
Andrey пишет: цитата: | Народ, а у вас как вылетает при неправильно заданном dbSetRelation() ? |
| У меня ни как. Таких ошибок просто не делаю.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 3944
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.02.15 17:32. Заголовок: gfilatov2002 пишет: ..
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
|
| moderator
|
Пост N: 715
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.15 17:56. Заголовок: Andrey пишет: Как в..
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, в котором сами рисуем надпись на заданном участке. См. доработанный пример ниже Скрытый текст
#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
|
| |
|
Andrey
|
| постоянный участник
|
Пост N: 3945
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.02.15 18:43. Заголовок: Вылетает по ошибке. ..
Вылетает по ошибке. 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
|
| moderator
|
Пост N: 716
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.15 18:47. Заголовок: Andrey пишет: Вылет..
Andrey пишет: Это из-за форматирования форума - уже поправил код в сообщении выше
| |
|
Andrey
|
| постоянный участник
|
Пост N: 3946
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.02.15 21:37. Заголовок: Работает ! Осталось ..
Работает ! Осталось как то параметры цвета передавать ....
| |
|
Dima
|
| |
Пост N: 4483
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.02.15 22:14. Заголовок: Andrey пишет: Остал..
Andrey пишет: цитата: | Осталось как то параметры цвета передавать ... |
| Они задаются в этом примере в MyEvents() и похоже красятся все ITEMы а как покрасит конкретный ?
| |
|
gfilatov2002
|
| moderator
|
Пост N: 717
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.15 22:38. Заголовок: Dima пишет: как по..
Dima пишет: цитата: | как покрасит конкретный ? |
| Для этого надо сделать само-нарисованным ( Ownerdraw) только этот конкретный участок статусной строки. См. рабочий пример ниже Скрытый текст
#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
|
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|