Форум » 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: Всем привет. Ошибка начала появляться в работающей программе с 2017 года. Ранее таких ошибок не появлялось... Что-то в новой версии появилась такая ошибка. Вот лог-ошибки: Error MGERROR/0 Window: unrecognized property 'MESSAGE'. Program terminated. Called from MSGMINIGUIERROR(99) in module: h_error.prg Called from SETPROPERTY(3785) in module: h_controlmisc.prg Called from (b)WAIT_WINDOW_MY(266) in module: Source\WaitWin.prg Called from _PROCESSINITPROCEDURE(1672) in module: h_windows.prg Called from _ACTIVATEWINDOW(1487) in module: h_windows.prg Called from WAIT_WINDOW_MY(315) in module: Source\WaitWin.prg Called from WAITWINDOWERROR(157) in module: Source\WaitWin.prg Вот код программы: [pre2] ... STATIC nId := 0 .... cFrmName := "err_frm_" ... REPEAT cFrmNameChk := cFrmName + STRZERO( ++nId ) UNTIL _IsWindowDefined(cFrmNameChk) cFrmName += STRZERO( nId ) ... DEFINE WINDOW &cFrmName ; AT nFrmNo * 20, nStartCol ; WIDTH nMaxWidth ; HEIGHT nMaxHeight ; TITLE '' ; CHILD ; BACKCOLOR aBackgroundColor ; CURSOR "hand32" ; ON MOUSECLICK MoveActiveWindow() ; NOSYSMENU ; NOMINIMIZE NOMAXIMIZE NOCAPTION ; FONT cFont SIZE nFontSize ; ON INIT { || Setproperty( cFrmName, "Message", "Setfocus" ) ,; Setproperty( cFrmName , "Topmost" , .T. ) } // строка 266 DEFINE IMAGE PICTURE1 ROW nPictRow COL nPictCol WIDTH nPictWidth HEIGHT nPictHeight PICTURE cPicture STRETCH .T. TRANSPARENT .T. BACKGROUNDCOLOR aBackgroundColor ADJUSTIMAGE .T. END IMAGE DEFINE LABEL Message ROW 20 COL nPictCol*2 + nPictHeight WIDTH nMaxWidth - nPictCol*2 - nPictWidth HEIGHT nMessHeight VALUE cMessage TRANSPARENT .T. ACTION MoveActiveWindow() OnMouseHover RC_CURSOR( "hand32" ) END LABEL DEFINE BUTTONEX Button_Close ROW nMaxHeight - 40 - 20 COL nMaxWidth - 100 - 20 WIDTH 100 HEIGHT 40 CAPTION "Закрыть" ACTION { || OnRelease() } //ACTION { || ThisWindow.Release } NOHOTLIGHT .T. FONTBOLD .T. FONTSIZE 12 NOXPSTYLE .T. FONTCOLOR aButtonColor BACKCOLOR aButtonBackColor END BUTTONEX END WINDOW ACTIVATE WINDOW &cFrmName NOWAIT .... [/pre2] Почему ?

gfilatov2002: Andrey пишет: Почему ? SetFocus - это метод, а не свойство Д.б. DoMethod( cFrmName, "Message", "Setfocus" )


Andrey: Блин, точно ! Раньше работало, я сейчас синтаксис стал строже... Спасибо Григорий ! А для Tsbrowse тоже нужно исправлять на метод ? Раньше писал так - Setproperty( "Form_3Tst", oBrw, "Setfocus" ) и всё работало вроде ...

Andrey: Всем привет ! Как изменить свойства у кнопке на форме, т.е. нужно поменять иконки на кнопке ? [pre2] cIco1x1 := "iUsb64x1" ; cIco1x2 := "iUsb64x2" ...... @ ... BUTTONEX BUTTON_Copy .... ; ICON cIco1x1 ... ; .... FLAT NOXPSTYLE HANDCURSOR NOTABSTOP ; BACKCOLOR aGrOverB1 GRADIENTFILL aGrFillB1 ; ON MOUSEHOVER ( This.Fontcolor := GRAY , This.GradientFill := aGrFillB1 , This.Icon := cIco1x2) ; ON MOUSELEAVE ( This.Fontcolor := BLACK , This.GradientOver := aGrOverB1 , This.Icon := cIco1x1) ; ACTION .... [/pre2] Нужно заменить иконки у свойств: ON MOUSEHOVER и ON MOUSELEAVE ?

gfilatov2002: Andrey пишет: Нужно заменить иконки у свойств: ON MOUSEHOVER и ON MOUSELEAVE Попробуй ON MOUSEHOVER ( This.Fontcolor := GRAY , This.GradientFill := aGrFillB1 , This.Picture := cIco1x2) ; ON MOUSELEAVE ( This.Fontcolor := BLACK , This.GradientOver := aGrOverB1 , This.Picture := cIco1x1) ;

Andrey: Не понял... Кнопка в программе показывается с одними иконками, при наступление нужного события, нужно на этой же кнопке заменить иконки. Как к этому свойству обращаться ? [pre2] SetProperty( ThisWindow.Name, "BUTTON_Copy", "????", ??? ) [/pre2] Или нужно удалять этот объект BUTTON_Copy и строить его заново на форме ?

gfilatov2002: Andrey пишет: Не понял... Вот рабочий код из примера Basic\ButtonEx [pre2]// horizontal buttonex with icon @ 135 + 35 + 40, 5 + 82 + 30 BUTTONEX OButton_4 ; CAPTION "&Login" ; ICON "res\keys.ico" ; FLAT WIDTH 80 HEIGHT 30 FONT "MS Sans serif" SIZE 9 ; FONTCOLOR BLUE ; BOLD ; BACKCOLOR WHITE ; on mousehover this.Picture := 'res\globus.ico'; on mouseleave this.Picture := 'res\keys.ico'; ACTION {|| Tone( 800 ) } TOOLTIP "BUTTONEX 4 with ICON - horizontal" [/pre2]

Andrey: Мне нужно изменить на форме уже показываемую кнопку. Сделаем модификацию: [pre2] aGrFillB1 := { { 0.5, CLR_OK , CLR_WHITE }, { 0.5, CLR_WHITE , CLR_OK } } aGrOverB1 := { { 0.5, CLR_ORANGE, CLR_YELLOW }, { 0.5, CLR_YELLOW, CLR_ORANGE } } cIco1x1 := "res\Usb64x1.ico" ; cIco1x2 := "res\Usb64x2.ico" @ 135 + 35 + 40, 5 + 82 + 30 BUTTONEX OButton_4 ; CAPTION "&Copy USB" ; ICON "res\Usb64x1.ico" ; ...... BACKCOLOR aGrOverB1 GRADIENTFILL aGrFillB1 ; ON MOUSEHOVER ( This.Fontcolor := GRAY , This.GradientFill := aGrFillB1 , This.Icon := cIco1x2) ; ON MOUSELEAVE ( This.Fontcolor := BLACK , This.GradientOver := aGrOverB1 , This.Icon := cIco1x1) ; ACTION {|| ChangeButton(ThisWindow.Name, This.Name) } Function ChangeButton(cForm, cObj) SetProperty( cForm, cObj, "Caption", "новая иконка" ) SetProperty( cForm, cObj, "Icon", "res\new1.ico" ) SetProperty( cForm, cObj, "????", ??? ) // для on mousehover SetProperty( cForm, cObj, "????", ??? ) // для on mouseleave Return Nil[/pre2] И как сохранить This.Fontcolor, This.GradientFill, This.GradientOver установленные первоначально на кнопке ?

SergKis: Andrey пишет Мне нужно изменить на форме уже показываемую кнопку Как то так (твой пример MsgEdit.prg)[pre2] LOCAL cI1, cI2 ... nX := nWidth - nWBtn*3 - nG*3 @ nY, nX BUTTONEX Btn_Prn WIDTH nWBtn HEIGHT nHBtn CAPTION aBtnCapt[1] ICON aBtnIco[1,1] ; NOHOTLIGHT NOXPSTYLE HANDCURSOR FONT cBtnFN SIZE nBtnFS BOLD ; FONTCOLOR aBtnFClr BACKCOLOR aBtnBClr[1] ; ON MOUSEHOVER ( This.Backcolor := BLACK , This.Fontcolor := YELLOW, This.Icon := cI1 ) ; ON MOUSELEAVE ( This.Backcolor := aBtnBClr[1], This.Fontcolor := WHITE , This.Icon := cI2 ) ; ACTION {|| MsgDebug("Подключить самостоятельно из MiniGUI\SAMPLES\Basic\MiniPrint_3"),; This.Cargo[1] := 2, ; cI1 := iif( This.Cargo[1] == 1, This.Cargo[2], This.Cargo[4] ), ; cI2 := iif( This.Cargo[1] == 1, This.Cargo[3], This.Cargo[5] ), ; this.Lbl0.Setfocus } ; ON INIT {|| This.Cargo := Array(5), This.Cargo[1] := 1, ; This.Cargo[2] := aBtnIco[1,2], ; This.Cargo[3] := aBtnIco[1,1], ; This.Cargo[4] := aBtnIco[2,2], ; This.Cargo[5] := aBtnIco[2,1], ; cI1 := This.Cargo[2], ; cI2 := This.Cargo[3] ; } [/pre2] Аналогично можно поступить и с др. свойствами кнопки, увеличив кол-во элементов в This.Cargo массиве

SergKis: PS Точнее (без переменных LOCAL) можно так[pre2] @ nY, nX BUTTONEX Btn_Prn WIDTH nWBtn HEIGHT nHBtn CAPTION aBtnCapt[1] ICON aBtnIco[1,1] ; NOHOTLIGHT NOXPSTYLE HANDCURSOR FONT cBtnFN SIZE nBtnFS BOLD ; FONTCOLOR aBtnFClr BACKCOLOR aBtnBClr[1] ; ON MOUSEHOVER ( This.Backcolor := BLACK , This.Fontcolor := YELLOW, This.Icon := This.Cargo[2] ) ; ON MOUSELEAVE ( This.Backcolor := aBtnBClr[1], This.Fontcolor := WHITE , This.Icon := This.Cargo[3] ) ; ACTION {|| MsgDebug("Подключить самостоятельно из MiniGUI\SAMPLES\Basic\MiniPrint_3"),; This.Cargo[1] := iif( This.Cargo[1] == 1, 2, 1 ), ; This.Cargo[2] := iif( This.Cargo[1] == 1, This.Cargo[4], This.Cargo[6] ), ; This.Cargo[3] := iif( This.Cargo[1] == 1, This.Cargo[5], This.Cargo[7] ), ; this.Lbl0.Setfocus } ; ON INIT {|| This.Cargo := Array(7), This.Cargo[1] := 1, ; This.Cargo[2] := aBtnIco[1,2], ; This.Cargo[3] := aBtnIco[1,1], ; This.Cargo[4] := aBtnIco[1,2], ; This.Cargo[5] := aBtnIco[1,1], ; This.Cargo[6] := aBtnIco[2,2], ; This.Cargo[7] := aBtnIco[2,1] ; } [/pre2] После ACTION смена иконок на кнопке

Andrey: SergKis пишет: Точнее (без переменных LOCAL) можно так Да уж ... Ни за что бы не догадался... Заработало ! Спасибо БОЛЬШОЕ ! Только вот не совсем понимаю как сделать смену иконки в другой функции ? Вот так у меня ранее было: [pre2] FUNCTION MyInitFormMain() // Отключить копирование на флешку IF M->lPubFlaskaNot M->lFlash := .F. Form_Main.Button_Copy.Caption := "Создать архив и" + CRLF + "копировать на ДИСК" Form_Main.Button_Copy.Icon := "iHDD64" ELSE M->lFlash := .T. Form_Main.Button_Copy.Caption := "Создать архив и" + CRLF + "копировать на флешку" Form_Main.Button_Copy.Icon := "iCopyUsb" ENDIF RETURN NIL[/pre2]

SergKis: Andrey Похоже у тебя hover-ов нет, если это на action Button_Copy, то замени Form_Main.Button_copy. на This. Если есть, то положи иконки в Cargo, как в примере (по 2е пары) и добавь в action This.Caption := iif( This.Cargo[1] == 1, "Создать ... на ДИСК", "Создать ... на флешку" ) Но телепатов нет додумывать

Andrey: SergKis пишет: Похоже у тебя hover-ов нет, Есть ховеры, просто я код переделываю на новый с ховерами. А функция MyInitFormMain() после инициализации формы отрабатывает. Вот и не знаю как сделать: [pre2] IF M->lPubFlaskaNot // показ иконки "iHDD64x1" и "iHDD64x2" ELSE // показ иконки "iCopyUsbx1" и "iCopyUsbx2" ENDIF[/pre2] Просто после изменения (по кнопке Настройка программы), мне нужно сменить показ иконок, т.е. я вызываю эту функцию - MyInitFormMain(). на кнопке Button_Copy я сделаю: [pre2] ON INIT {|| This.Cargo := Array(7), This.Cargo[1] := M->lPubFlaskaNot, ; This.Cargo[2] := aBtnIco[1,2], ; This.Cargo[3] := aBtnIco[1,1], ; This.Cargo[4] := aBtnIco[1,2], ; This.Cargo[5] := aBtnIco[1,1], ; This.Cargo[6] := aBtnIco[2,2], ; This.Cargo[7] := aBtnIco[2,1] ; }[/pre2] А как сменить иконки ?

SergKis: Andrey MsgEdit.prg - твой пример и что ты засовывал в массив aBtnIco по элеметам, тебе лучше знать. Посмотри, что там и сделай по аналогии для выше указанных парных иконок

SergKis: Andrey пишет Просто после изменения (по кнопке Настройка программы), мне нужно сменить показ иконок Делай сразу на кнопке "Copy", сначала к примеру Copy to disk, кликнули по ней -> Copy to USB зачем лишняя кнопка "Настройка" Добавь только TOOLTIP "Уточните куда COPY" или более развернуто

Andrey: Как получить/изменить This.Cargo из другой функции: [pre2] This.Cargo[2] := iif( M->lPubFlaskaNot, This.Cargo[4], This.Cargo[6] ), ; This.Cargo[3] := iif( M->lPubFlaskaNot, This.Cargo[5], This.Cargo[7] ), ; [/pre2] Т.е. как можно сделать ? [pre2] SetProperty( cForm, "Button_Copy", "Cargo", ??? ) // для on mousehover SetProperty( cForm, "Button_Copy", "Cargo", ??? ) // для on mouseleave [/pre2] Не знаю как правильно сделать: [pre2] SetProperty( cForm, "Button_Copy", "Cargo", iif( M->lPubFlaskaNot, Button_Copy.Cargo[4], Button_Copy.Cargo[6] ) ) SetProperty( cForm, "Button_Copy", "Cargo", iif( M->lPubFlaskaNot, Button_Copy.Cargo[5], Button_Copy.Cargo[7] ) ) [/pre2]

Andrey: SergKis пишет: Делай сразу на кнопке "Copy", сначала к примеру Copy to disk, кликнули по ней -> Copy to USB зачем лишняя кнопка "Настройка" Да там несколько настроек для проги. А отображение иконки связано со сменой переменной M->lPubFlaskaNot. Дополнительный запрос юзеру совсем не нужен. Давай сделаю тест, чтобы понятней было ?

SergKis: Andrey Ты не первый год замужем на MiniGui, основы запомни или запиши и держи под рукой (в help смотри почаще по командам). Забыл, посмотри i_this.ch, i_window.ch Трудно, поставь получение ppo файла и посмотри как там меняется псевдо ООП на функции Получается ты просто копипастишь все подряд ничего не понимая Разберись разок до конца

Andrey: Спасибо ОГРОМНОЕ ! Теперь понял как делать. Для тех кому интересно, привожу код: [pre2] PUBLIC lPubFlaskaNot M->lPubFlaskaNot := .F. ..... @ 150,30 CHECKBOX Check_1 ; CAPTION 'Сменить иконку' ; VALUE M->lPubFlaskaNot ; WIDTH 400 HEIGHT 30 ; FONTCOLOR YELLOW TRANSPARENT ; ON CHANGE {|| M->lPubFlaskaNot := Form_Main.Check_1.Value ,; MyInitFormMain() , Form_Main.Label_0.Setfocus } cIco1x1 := "iUsb64x1" ; cIco1x2 := "iUsb64x2" cIco6x1 := "iHDD64x1" ; cIco6x2 := "iHDD64x2" cButtCapt := "Создать архив и" + CRLF + "копировать на флешку" cButtCapt2 := "Создать архив и" + CRLF + "копировать на ДИСК" aGrFillB1 := { { 0.5, CLR_OK , CLR_WHITE }, { 0.5, CLR_WHITE , CLR_OK } } aGrOverB1 := { { 0.5, CLR_ORANGE, CLR_YELLOW }, { 0.5, CLR_YELLOW, CLR_ORANGE } } @ nRow, nCol BUTTONEX BUTTON_Copy WIDTH nWButt HEIGHT nHButt ; CAPTION cButtCapt ICON cIco1x1 FONTCOLOR BLACK ; VERTICAL SIZE nFSButt-2 BOLD FLAT NOXPSTYLE HANDCURSOR NOTABSTOP ; BACKCOLOR aGrOverB1 GRADIENTFILL aGrFillB1 ; ON MOUSEHOVER ( This.Fontcolor := GRAY , This.GradientFill := aGrFillB1 , This.Icon := This.Cargo[2]) ; ON MOUSELEAVE ( This.Fontcolor := BLACK , This.GradientOver := aGrOverB1 , This.Icon := This.Cargo[1]) ; ACTION {|| SetProperty(ThisWindow.Name, This.Name, "Enabled", .F.) ,; MsgDebug( "CopyToUsbHdd()" ) ,; SetProperty(ThisWindow.Name, This.Name, "Enabled", .T.) } ; ON INIT {|| This.Cargo := Array(8) ,; This.Cargo[1] := cIco1x1 , ; This.Cargo[2] := cIco1x2 , ; This.Cargo[3] := cIco1x1 , ; This.Cargo[4] := cIco1x2 , ; This.Cargo[5] := cIco6x1 , ; This.Cargo[6] := cIco6x2 , ; This.Cargo[7] := cButtCapt , ; This.Cargo[8] := cButtCapt2 ; } ..... ////////////////////////////////////////////////////////////////////////////////// FUNCTION MyInitFormMain() LOCAL a, cForm := ThisWindow.Name, cObj := 'BUTTON_Copy' a := GetProperty(cForm, cObj, 'Cargo') ?v a // получить список Cargo объекта //? GetProperty(cFrom, cObj, 'Cargo')[1], GetProperty(cFrom, cObj, 'Cargo')[2], ... // Отключить копирование на флешку IF M->lPubFlaskaNot Form_Main.Button_Copy.Caption := a[8] // как здесь сменить иконку ? // иконка cIco6x1 := "iHDD64x1" // иконка cIco6x2 := "iHDD64x2" a[1] := a[5] a[2] := a[6] SetProperty(cForm, cObj, 'Cargo', a) // Или можно так // This.&(cObj).Cargo[1] := This.&(cObj).Cargo[5] // This.&(cObj).Cargo[2] := This.&(cObj).Cargo[6] // Или можно так // Form_Main.&(cObj).Cargo[1] := a[5] // Form_Main.&(cObj).Cargo[2] := a[6] ELSE Form_Main.Button_Copy.Caption := a[7] // как здесь сменить иконку ? // иконка cIco6x1 := "iUsb64x1" // иконка cIco6x2 := "iUsb64x2" a[1] := a[3] a[2] := a[4] SetProperty(cForm, cObj, 'Cargo', a) // Или можно так // This.&(cObj).Cargo[1] := This.&(cObj).Cargo[3] // This.&(cObj).Cargo[2] := This.&(cObj).Cargo[4] // Или можно так // Form_Main.&(cObj).Cargo[1] := a[3] // Form_Main.&(cObj).Cargo[2] := a[4] ENDIF DoMethod(cForm, cObj, 'Setfocus') RETURN NIL[/pre2]



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