Форум » 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.

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

Andrey: Привет всем. Вот опять непонятка по доке. Использую у себя окно выбора: MsgYesNo( "Вы хотите добавить в СПРАВОЧHИК новую запись ?", "Добавление записей", .f. ) .f. - это же кнопка по умолчанию ? А при показе по умолчанию идет другая кнопка: Как исправить ? Или я не прав ?

SergKis: Andrey пишет:Как исправить ? Что исправлять ? .T. - кнопка Нет .F. - кнопка Да в фокусе

Andrey: SergKis пишет: .T. - кнопка Нет .F. - кнопка Да в фокусе Блин, всё наоборот. Я считал что .F. - кнопка нет. Да уж... Спасибо БОЛЬШОЕ !


Andrey: SergKis пишет: см. ...\BASIC\Form_Controls\demo.prg Function _GetArrayOfAllControlsForForm ( cFormName ) При использовании этой функции, возник такой вопрос. Что за странные имена объектов - DummyMenuName?? , если вывести список объектов формы ? Мне нужно перерисовать свои объекты на форме. Т.е. я тогда просто пропускаю эти объекты, а свои перерисовываю. Правильно ли это ?

SergKis: Andrey пишет:странные имена объектов - DummyMenuName строка меню имеет идентификатор (для обращения\управления этой строкой см. h_menu.prg), если не задано имя, то по формируется по default. Т.е. я тогда просто пропускаю эти объекты, а свои перерисовываю. Правильно ли это ? Да. Но я создаю свой массив для нужных контролов и пляшу от него. пример: [pre2] // oW:aKrt_Field - массив для нужных контролов y += nHn + nGapsH x := nWl cNm := 'VALSTS'; cTx := gTxt(cPref+'R_11A') // COUNTRY (СТРАНА) ТЕКСТ @ y, x LABEL &('Lbl_'+cNm) WIDTH nLn HEIGHT nHn VALUE cTx BACKCOLOR BC ; FONTCOLOR FC x += nLn + nGapsW // COUNTRY (СТРАНА КОД) cNm := 'VALSTSK'; nLen := oSt:W('05') + 5 @ y, x GETBOX &cNm WIDTH nLen HEIGHT nHn VALUE '' ACTION oW:BtnGet() ; VALID VldValsts() ; BACKCOLOR BG ; FONTCOLOR FC nNm := GetControlIndex (cNm, oW:cWnd) hNm := GetControlHandle(cNm, oW:cWnd) oNm := _HMG_aControlHeadClick[ nNm ] oNm:OnDblClick := {|oGet| oSelfObj:SelRecEdit('VALSTSK')} oNm:OnF5 := {|oGet| oSelfObj:BtnGet( oGet ) } // VK_F5 CONTROLREADONLY(hNm, .T.) CONTROLTABSTOP (hNm, .F.) aAdd(oW:aKrt_Field, { cNm, nNm, hNm, 'R_11A', .T., , , }) // .T. - снимаем ReadOnly, R_11A - FieldName x += nLen // + nGapsW cNm := 'VALSTSN'; nLen := oSt:W('30') - 5 // COUNTRY (СТРАНА НАИМЕН.) @ y, x GETBOX &cNm WIDTH nLen HEIGHT nHn VALUE '' READONLY BACKCOLOR BG ; FONTCOLOR FC nNm := GetControlIndex (cNm, oW:cWnd) hNm := GetControlHandle(cNm, oW:cWnd) oNm := _HMG_aControlHeadClick[ nNm ] // object GetBox oNm:OnDblClick := {|oGet| oSelfObj:SelRecEdit('VALSTSK')} CONTROLTABSTOP(hNm, .F.) aAdd(oW:aKrt_Field, { cNm, nNm, hNm, 'R_12A', .F., , , }) // .F. - не снимаем ReadOnly, R_12A - FieldName ... вот включаю корректировку по массиву: METHOD SelRecEdit( cFocus ) CLASS Child_Mdi_UMZ_KLI LOCAL a,i,j,k,n, nF, cC, oW := oSelfObj LOCAL aBColor := oW:aBColorGet LOCAL aFColor := oW:aFColorGet ::lSetKrtEdit := .T. // вошли в редактирование k := len(::aKrt_Field) FOR i := 1 TO k a := ::aKrt_Field[ i ] IF a[ 5 ] // { cNm, nNm, hNm, 'R_1' , .F., , , } cC := a[ 1 ] // Name controlа IF nF == NIL; nF := a[ 2 ] // Index controlа для SetFocus ENDIF a[ 6 ] := _GetBackColor( cC, ::cWnd ) // сохраняем цвета Getbox a[ 7 ] := _GetFontColor( cC, ::cWnd ) // --"--- CONTROLREADONLY( a[ 3 ], .F. ) // включаем корректировку и CONTROLTABSTOP ( a[ 3 ], .T. ) // переход по TabStop _SetBackColor( cC, ::cWnd, aBColor ) // ставим цвета GetBox _SetFontColor( cC, ::cWnd, aFColor ) // в коректировке ENDIF NEXT SetProperty(::cWnd, 'BTN_OK' , 'Visible', .T.) SetProperty(::cWnd, 'BTN_CANCEL', 'Visible', .T.) SetProperty(::cWnd, ::oBr1:cBrw , 'Enabled', .F.) CONTROLTABSTOP(::oBr1:hBrw, .F.) IF ! empty(cFocus) nF := GetControlIndex(cFocus, ::cWnd) ENDIF IF ! empty(nF); _SetFocus(nF) // ставим на первый или указанный ENDIF RETURN [/pre2]

SergKis: Andrey вдогонку завершение корректировки: [pre2] METHOD PressBtn( nBtn ) CLASS Child_Mdi_UMZ_KLI LOCAL a,f,i,j,k,n,o, cN, cC, nC, oC, cF, uV, uF, aM := {} IF ::lPressBtn; RETURN ENDIF ::lPressBtn := .T. // начали PressBtn k := len(::aKrt_Field) IF nBtn == 1 // button OK. save values FOR i := 1 TO k a := ::aKrt_Field[ i ] IF ! a[ 5 ]; LOOP // { cNm, nNm, hNm, 'R_1' , .F., , , } ENDIF cC := a[ 1 ] // control name nC := a[ 2 ] // control index oC := _HMG_aControlHeadClick[ nC ] // control object GetBox cF := a[ 4 ] // control FieldName uF := mFieldGet(cF, ::cAlias) // FieldName value uV := oC:VarGet() // control value IF hb_IsChar(uV) IF ! trim(uF) == trim(uV) // изменено значение aAdd(aM, { cF, uV }) cN := '' IF cC == 'VALSTSK' // код страны cN := left(cC, len(cC)-1)+'N' ENDIF IF ! empty(cN) // данные наименований от кода n := ascan(::aKrt_Field, {|aX,nX| aX[1] == cN }) IF n > 0 j := ::aKrt_Field[ n ][2] // index o := _HMG_aControlHeadClick[ j ] // object f := ::aKrt_Field[ n ][4] // field aAdd(aM, { f, o:VarGet() }) // изменены ENDIF ENDIF ENDIF ELSE IF ! uF == uV // изменено значение aAdd(aM, { cF, uV }) ENDIF ENDIF NEXT IF ! empty(aM) dbSelectArea(::cAlias) IF mRLock() // save modify values mFieldPut(aM, , , .F.) ELSE // Lock error ::lPressBtn := .F. // завершили PressBtn MsgStop(upper(gTxt('#'+::cAlias+'_Kod'))+': '+R_1+' NOT SAVE !', ; 'Lock record error.') RETURN ENDIF ENDIF ENDIF FOR i := 1 TO k a := ::aKrt_Field[ i ] IF a[ 5 ] // { cNm, nNm, hNm, 'R_1' , .F., , , } cC := a[ 1 ] CONTROLREADONLY(a[ 3 ], .T.) // выключаем корректировку и CONTROLTABSTOP (a[ 3 ], .F.) // переход по TabStop IF ! a[ 6 ] == NIL; _SetBackColor( cC, ::cWnd, a[ 6 ] ) ENDIF IF ! a[ 7 ] == NIL; _SetFontColor( cC, ::cWnd, a[ 7 ] ) ENDIF ENDIF NEXT SetProperty(::cWnd, 'BTN_OK' , 'Visible', .F.) SetProperty(::cWnd, 'BTN_CANCEL', 'Visible', .F.) SetProperty(::cWnd, ::oBr1:cBrw , 'Enabled', .T.) CONTROLTABSTOP(::oBr1:hBrw, .T.) ::oBr1:Refresh() ::OnChange() _MdiWindowsActivate( ::hWnd ) ::oBr1:SetFocus() ::lSetKrtEdit := .F. // вышли из редактирования ::lPressBtn := .F. // завершили PressBtn RETURN [/pre2]

Andrey: Спасибо БОЛЬШОЕ за разъяснения !

Andrey: Как сделать запрет/разрешение на контекстном меню ? Вот так не проходит: MENUITEM "Включить показ удаленных записей" ACTION { || RecnoViewDel(.T.) } IF( M->nOperat # 101, DISABLED ) MENUITEM "Отключить показ удаленных записей" ACTION { || RecnoViewDel(.F.) } IF( M->nOperat # 101, DISABLED ) Выдает ошибку: Harbour 3.2.0dev (r1406261642) Copyright (c) 1999-2014, http://harbour-project.org/ Sel_DimHmg.prg(581) Error E0030 Syntax error "syntax error at '┬ъы■ўшЄ№ яюърч єфрыхээ√ї чряшёхщ'" Sel_DimHmg.prg(582) Error E0030 Syntax error "syntax error at '┬╬╤╤╥└═╬┬╚╥▄ єфрыхээє■ чряшё№'"

SergKis: Andrey ITEM 'Item 1' NAME Item_menu1 ACTION ... ... MENUITEM 'Item 1' NAME Item_menu1 ACTION ... ... функции (см. h_menu.prg): _DisableMenuItem ( ItemName , FormName ) _EnableMenuItem ( ItemName , FormName ) _CheckMenuItem ( ItemName , FormName ) _UncheckMenuItem ( ItemName , FormName )

Andrey: Не совсем понял как сделать в моем случае ? DEFINE CONTEXT MENU CONTROL oBrw_5 // для моего TBROWSE ..... SEPARATOR MENUITEM "Включить показ удаленных записей" ACTION ... NAME RecDelete_menu1 MENUITEM "Отключить показ удаленных записей" ACTION ... NAME RecDelete_menu2 END MENU IF M->nOperat # 101 _DisableMenuItem ( "RecDelete_menu1" , "oBrw_5" ) _DisableMenuItem ( "RecDelete_menu2" , "oBrw_5" ) ENDIF

SergKis: Andrey пишет:Не совсем понял как из MiniGui.chm: [pre2] SYNTAX DEFINE CONTEXT MENU CONTROL <cControlName>[ OF<cParentWindowName> ] MENUITEM <cItemCaption> ACTION <ActionProvedureName> | <bBlock> [ NAME <MenuItemName>] [ IMAGE <cImageName> ] [ CHECKED ] [ DISABLED ] [ MESSAGE <cMessage> ] ... ... [ SEPARATOR ] ... [/pre2] END MENU т.е. [pre2] IF M->nOperat # 101 MENUITEM "Включить показ удаленных записей" ACTION ... NAME RecDelete_menu1 DISABLED MENUITEM "Отключить показ удаленных записей" ACTION ... NAME RecDelete_menu2 DISABLED ELSE MENUITEM "Включить показ удаленных записей" ACTION ... NAME RecDelete_menu1 MENUITEM "Отключить показ удаленных записей" ACTION ... NAME RecDelete_menu2 ENDIF [/pre2] а функции применяешь на каких то событиях (нажатие кнопки, click, ...) oBrw_5 - это FormName или объект tsbrowse. должен быть FormName

SergKis: Andrey можно сделать все пункты disable, а в ON ININ после определения всех условий, для нужных сделать enable, (или наоборот) через функции и в местах изменения условия(установки) так же функциями сделать изменения

Andrey: SergKis пишет: oBrw_5 - это FormName или объект tsbrowse. должен быть FormName Спасибо БОЛЬШОЕ ! Разобрался. Ставил условие неправильное, из-за этого и не получалось у меня. SergKis пишет: ON ININ после определения всех условий, для нужных сделать enable, (или наоборот) Вот это самый лучший вариант !

Andrey: Нашел выражение при котором программа на МиниГуи вешается наглухо !!! cStroka := "Затрачено всего времени: " + SECTOTIME(SECONDS()-nTime + " !" ) И даже ошибки не выдает.

Haz: Andrey пишет: SECTOTIME(SECONDS()-nTime + " !" ) Andrey пишет: И даже ошибки не выдает. всеж ругается и правильно ругается тк к числу плюсуем строку Time from start: 0 days 0 hours 0 mins 0 secs<BR> Error BASE/1081 Argument error: +</p><BR>

petr707: Возможно, неудачно модифицирован ERRORSYS (или заменен при выполнении ERRORBLOCK ) и сообщения ошибок при выполнении не видны. Как вариант, иметь в софте вызов управляемого свала, типа этого или a:= "2"+2 для проверки системы сообщений. Вызов этой "ошибки" можно делать по "секретной" для юзеров клавише(кнопке) или в отладочном режиме выполнения софта.

Andrey: Haz пишет: всеж ругается и правильно ругается тк к числу плюсуем строку В моей системе не ругается вообще. Вешает прогу и все. Хотя исходников пока немного - 350Кб. petr707 пишет: Возможно, неудачно модифицирован ERRORSYS (или заменен при выполнении ERRORBLOCK ) и сообщения ошибок при выполнении не видны. Ничего не менял и не заменял.

Andrey: Как на МиниГуи сделать правильно индексацию БД с бегунком ? На локальном компе сделанная мною индексация БД работает нормально, а по сети вешается.... Причем на разных файлах. Кол-во файлов для индексации примерно 200 штук.

gfilatov2002: Andrey пишет: Как на МиниГуи сделать правильно индексацию БД с бегунком ? У меня работает такой пример (см.ниже) [pre]/* MINIGUI - Harbour Win32 GUI library Demo */ #include "minigui.ch" #include "dbstruct.ch" DECLARE WINDOW Form_PrgBar PROCEDURE Main filltable( 500 ) GO TOP DEFINE WINDOW Form1 ; AT 0 , 0 ; WIDTH 600 HEIGHT 400 ; TITLE "ProgressBar Demo" ; MAIN DEFINE BUTTON Button_1 ROW 20 COL 20 WIDTH 80 HEIGHT 28 CAPTION "Process 1" ACTION NtxCreate( FIELD(2), FIELD(2) ) DEFAULT .T. END BUTTON ON KEY ESCAPE ACTION ThisWindow.Release END WINDOW CENTER WINDOW Form1 ACTIVATE WINDOW Form1 RETURN /////////////////////////////////////////////////////////////////// FUNCTION NtxCreate( cField, cNtxName ) CreateProgressBar( "Create index " + cNtxName + "..." ) INDEX ON (cField) TO (cNtxName) EVAL NtxProgress() EVERY LASTREC()/10 Form_PrgBar.PrgBar_1.Value := 100 Form_PrgBar.Label_1.Value := "Completed 100%" // final waiting INKEYGUI(1000) CloseProgressBar() RETURN NIL /////////////////////////////////////////////////////////////////// FUNCTION NtxProgress() LOCAL nComplete := INT((RECNO()/LASTREC()) * 100) Form_PrgBar.PrgBar_1.Value := nComplete Form_PrgBar.Label_1.Value := "Completed "+ +HB_NTOS(nComplete) + "%" // refreshing INKEYGUI(100) RETURN .T. ////////////////////////////////////////////////////////////////////// FUNCTION CreateProgressBar( cTitle ) DEFINE WINDOW Form_PrgBar ; ROW 0 COL 0 ; WIDTH 428 HEIGHT 200 ; TITLE cTitle ; WINDOWTYPE MODAL ; NOSIZE ; FONT 'Tahoma' SIZE 11 @ 10,80 ANIMATEBOX Avi_1 ; WIDTH 260 HEIGHT 40 ; FILE 'filecopy.avi' ; AUTOPLAY TRANSPARENT NOBORDER @ 75,10 LABEL Label_1 ; WIDTH 400 HEIGHT 20 ; VALUE '' ; CENTERALIGN VCENTERALIGN @ 105,20 PROGRESSBAR PrgBar_1 ; RANGE 0,100 ; VALUE 0 ; WIDTH 380 HEIGHT 34 END WINDOW Form_PrgBar.Center Activate Window Form_PrgBar NoWait RETURN NIL ////////////////////////////////////////////////////////////////////// FUNCTION CloseProgressBar() Form_PrgBar.Release DO MESSAGE LOOP RETURN NIL ////////////////////////////////////////////////////////////////////// PROCEDURE filltable ( nCount ) LOCAL aDbf[11][4], i if !file('test.dbf') aDbf[1][ DBS_NAME ] := "First" aDbf[1][ DBS_TYPE ] := "Character" aDbf[1][ DBS_LEN ] := 20 aDbf[1][ DBS_DEC ] := 0 // aDbf[2][ DBS_NAME ] := "Last" aDbf[2][ DBS_TYPE ] := "Character" aDbf[2][ DBS_LEN ] := 20 aDbf[2][ DBS_DEC ] := 0 // aDbf[3][ DBS_NAME ] := "Street" aDbf[3][ DBS_TYPE ] := "Character" aDbf[3][ DBS_LEN ] := 30 aDbf[3][ DBS_DEC ] := 0 // aDbf[4][ DBS_NAME ] := "City" aDbf[4][ DBS_TYPE ] := "Character" aDbf[4][ DBS_LEN ] := 30 aDbf[4][ DBS_DEC ] := 0 // aDbf[5][ DBS_NAME ] := "State" aDbf[5][ DBS_TYPE ] := "Character" aDbf[5][ DBS_LEN ] := 2 aDbf[5][ DBS_DEC ] := 0 // aDbf[6][ DBS_NAME ] := "Zip" aDbf[6][ DBS_TYPE ] := "Character" aDbf[6][ DBS_LEN ] := 10 aDbf[6][ DBS_DEC ] := 0 // aDbf[7][ DBS_NAME ] := "Hiredate" aDbf[7][ DBS_TYPE ] := "Date" aDbf[7][ DBS_LEN ] := 8 aDbf[7][ DBS_DEC ] := 0 // aDbf[8][ DBS_NAME ] := "Married" aDbf[8][ DBS_TYPE ] := "Logical" aDbf[8][ DBS_LEN ] := 1 aDbf[8][ DBS_DEC ] := 0 // aDbf[9][ DBS_NAME ] := "Age" aDbf[9][ DBS_TYPE ] := "Numeric" aDbf[9][ DBS_LEN ] := 2 aDbf[9][ DBS_DEC ] := 0 // aDbf[10][ DBS_NAME ] := "Salary" aDbf[10][ DBS_TYPE ] := "Numeric" aDbf[10][ DBS_LEN ] := 6 aDbf[10][ DBS_DEC ] := 0 // aDbf[11][ DBS_NAME ] := "Notes" aDbf[11][ DBS_TYPE ] := "Character" aDbf[11][ DBS_LEN ] := 70 aDbf[11][ DBS_DEC ] := 0 DBCREATE("test", aDbf) endif if select('test') == 0 dbusearea(.t.,,'test') endif for i := 1 to nCount append blank replace first with 'first' + str(i) replace last with 'last' + str(i) replace street with 'street' + str(i) replace city with 'city' + str(i) replace state with chr( HB_RANDOMINT( 65,90 ) ) + chr( HB_RANDOMINT( 65,90 ) ) replace zip with alltrim( str( HB_RANDOMINT( 9999 ) ) ) replace hiredate with date() - 20000 + i replace married with ( HB_RANDOMINT() == 1 ) replace age with HB_RANDOMINT( 99 ) replace salary with HB_RANDOMINT( 10000 ) replace notes with 'notes' + str(i) next i RETURN[/pre]

Andrey: gfilatov2002 пишет: У меня работает такой пример (см.ниже) Посмотрел код, я также делаю. Единственно добавлен у меня еще один бегунок по общему кол-ву файлов. Буду переделывать тогда этот код. О результатах сообщу. Спасибо большое за помощь !



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