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

SergKis: PS nTyp это, к примеру 0 - main 1 - standatt 2 - child 3 - modal

Andrey: SergKis пишет: Если надо усложнить добавь в #xcommand переменную WTYPE <nTyp> и в ф-ю параметр nTyp и обрабатывай как надо Понял, СПАСИБО !

Andrey: Собираю тестовые проги в Far'e на МиниГуи. После того как ехе-ник запустится, каждый раз приходится мышкой тыкать на запущенную прогу, т.к. Far всегда поверх запущенной программы. Можно ли как то сделать, чтобы после запуска программа МиниГуи выходила на передний план ? У меня тестовые проги имеют код такой (специфика тестирования):[pre2] DEFINE WINDOW Form_Main ; AT 20 , 20 ; WIDTH 500 HEIGHT 480 ; TITLE "Test-MiniGui" ; MAIN ; ..... ON INIT {|| Form_Main.Minimize, TestPrint("Печать",,,cDebugPath) , Form_Main.Release } ....[/pre2] Т.е. далее запускается TestPrint("Печать",,,cDebugPath) и это окно всегда под Far'ом. Я знаю что можно сделать в окне TestPrint() следующую конструкцию: [pre2] DEFINE WINDOW wTestPrint ; .... MODAL .... END WINDOW CENTER WINDOW wTestPrint // переносим сюда, чтобы не дергалось окно ACTIVATE WINDOW wTestPrint ON INIT {|| This.Minimize, This.Restore, ; This.Label_0.SetFocus } RETURN NIL[/pre2] Но потом после переноса в основную программу, это окно wTestPrint появляется снизу - это не совсем красиво для основной программы. Можно как то сделать "передёргивание окна wTestPrint" из основной программы ?


Andrey: Сделал так: [pre2] ....... DEFINE TIMER Timer_1 ; INTERVAL 500 ; ACTION Bring_window_to_front() END WINDOW ACTIVATE WINDOW Form_Main RETURN ////////////////////////////////////////////////////////////////////////////////// FUNCTION Bring_window_to_front() LOCAL cForm := "wTestPrint" IF IsWindowActive( &cForm ) Domethod( cForm, "Minimize" ) INKEYGUI(100) Domethod( cForm, "Restore" ) Form_Main.Timer_1.Enabled := .F. // ОТКЛЮЧИТЬ таймер M->oBrwP:Setfocus() ENDIF RETURN NIL [/pre2] В Win8.1 отрабатывает нормально, а в WinXP окошко сворачивается и разворачивается - остановить нельзя... Бесконечный цикл, можно только снять программу через менеджер программ. Почему остановка таймера не происходит ?

SergKis: Andrey Добавь в TIMER параметр ONCE (вып. один раз) см. i_timer.ch А topmost пробовал ?[pre2] DEFINE WINDOW wTestPrint ; ... ON INIT This.Topmost := .F. ; ... ACTIVATE WINDOW wTestPrint ON INIT {|| This.Minimize, This.Restore, This.Topmost := .T., ; This.Label_0.SetFocus } [/pre2]

Andrey: Что то в доке нет ONCE ! Как писать правильно ? [pre2] DEFINE TIMER Timer_1 ; INTERVAL 500 ; ACTION Bring_window_to_front() ONCE [/pre2] Так ?

SergKis: Andrey i_timer.ch[pre2]#command DEFINE TIMER <name> ; [ <dummy1: OF, PARENT> <parent> ] ; [ INTERVAL <interval> ] ; [ ACTION <action> ] [ <lOnce: ONCE> ] ; => ; _DefineTimer ( <"name">, <"parent">, <interval>, <{action}>, <.lOnce.> ) [/pre2]

Andrey: Да так сработало ! На XP и 8-ке работает теперь одинаково ! СПАСИБО БОЛЬШОЕ ! SergKis пишет: А topmost пробовал ? Пробовал так:[pre2] DEFINE WINDOW wTestPrint ; ... ON INIT {|| OnInitPrintF5(), This.Topmost := .F., oBrwP:Setfocus() } ... ACTIVATE WINDOW wTestPrint ON INIT {|| This.Topmost := .T. } [/pre2] Окно на переднем плане, т.е. поверх Far'a, но при прокрутке колесиком мышки - ездит по папкам Far'a. Лучший вариант для отладки всё таки таймер !

SergKis: Andrey Попробуй так (с SET OOP ON)[pre2] DEFINE WINDOW wTestPrint ; ... ON INIT ( This.Topmost := .F., _wPost(1), DoEvents() ) ... (This.Object):Event(1, {|| OnInitPrintF5(), oBrwP:Setfocus() }) END WINDOW ACTIVATE WINDOW wTestPrint ON INIT {|| This.Topmost := .T. } [/pre2]

SergKis: PS И Form_Main поправь[pre2] DEFINE WINDOW Form_Main ; AT 20 , 20 ; WIDTH 500 HEIGHT 480 ; TITLE "Test-MiniGui" ; MAIN ; ..... ON INIT ( This.Minimize, _wPost(1), DoEvents() ) ... (This.Object):Event( 1, {|| TestPrint("Печать",,,cDebugPath) , This.Release } ) .... [/pre2]

Andrey: Сделал ! Всё равно колесико мышки и клавиши продолжают ездить по Far'у. Хотя окно программы Минигуи становится поверх всех окон. Нужно кликнуть мышкой по форме, тогда на ней можно нажимать клавиши и мышку. Вообще то я с таким поведением давно сталкиваюсь, но всё некогда было разобраться с таким поведением. И ещё ошибка появилась, при выходе из окна wTestPrint, у меня на кнопку выход назначено: [pre2]ACTION { || wTestPrint.Release() } [/pre2] Выдает теперь ошибку: Error MGERROR/0 Control: Of Form_Main Not defined. Program terminated. --------------------------------- Stack Trace --------------------------------- Called from MSGMINIGUIERROR(99) in module: h_error.prg Called from DOMETHOD(5205) in module: h_controlmisc.prg Called from (b)MAIN(349) in module: f5main.prg Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg Called from TWNDDATA:DOEVENT(667) in module: h_objects.prg Called from DO_ONWNDLAUNCH(234) in module: h_objmisc.prg Called from (b)INIT(123) in module: h_init.prg Called from EVENTS(1215) in module: h_events.prg Called from DOEVENTS(0) Called from (b)MAIN(323) in module: f5main.prg Called from _PROCESSINITPROCEDURE(1672) in module: h_windows.prg Called from _ACTIVATEWINDOW(1487) in module: h_windows.prg Called from MAIN(354) in module: f5main.prg [pre2] Строка 349 - (This.Object):Event( 1, {|| TestPrint("Печать",,,cDebugPath) , This.Release } ) Строка 354 - ACTIVATE WINDOW Form_Main[/pre2] This.Release - не срабатывает ....

Andrey: А есть такая команда, которая бы эмулировала нажатие мышки на окне, чтобы фокус окну переходил ?

SergKis: Возможно, будет интересно. Пример по окнам с DEF WINDOW ... и WTYPE nTypWindow : 0 - main 1 - child 2 - modal 3 - standart и галочка для :Action := .T.\.F. окна Если галочки нет, окно не активно и сообщения не работают, убрать окно по [X] крестику нельзя, кнопки не работают. Если галочка есть, окно активно и все кнопки работают. Пример тут https://TransFiles.ru/s4x9y

Andrey: SergKis пишет: Пример по окнам с DEF WINDOW ... и WTYPE nTypWindow : Пример интересный ! Можно применять в ситуациях, когда юзеру нужно запретить выходить из окна пока все GETBOX не заполнит или пока что-то не посчитается.... Применений много. Спасибо !

Andrey: Всем привет ! Появилась ошибка у меня после изменения кода. Правда не всегда появляется. Error BASE/1004 Message not found: NIL:EVENT --------------------------------- Stack Trace --------------------------------- Called from __ERRRT_SBASE(0) Called from NIL:ERROR(0) Called from (b)HBOBJECT(0) Called from NIL:MSGNOTFOUND(0) Called from NIL:EVENT(0) Called from FORM_F5PRINT(191) in module: Source\form_f5print.prg Called from FORMPRINTF5(106) in module: Source\form_f5print.prg Код программы:[pre2] DEFINE WINDOW Form_F5 ; ..... MODAL ; ..... ON INIT ( This.Topmost := .F., _wPost(1), DoEvents() ) (This.Object):Event(1, {|| OnInitPrintF5(),; oBrwP:Setfocus(), nStaticViewRecno := 1 }) // строка 191[/pre2] Почему и что нужно править ?

SergKis: Andrey пишет Появилась ошибка у меня после изменения кода NIL:EVENT(0) - нет объекта окна. Он создается в DEFINE WINDOW ... SET OOP ON стоит, не отключен ? #define _HMG_OUTLOG LOCAL oWnd ... DEFINE WINDOW Form_F5 ; ... oWnd := This.Object ? This.Name, This.Handle, oWnd, _HMG_lOOPEnabled oWnd:Event(1, {|| OnInitPrintF5(),; oBrwP:Setfocus(), nStaticViewRecno := 1 }) выделенным цветом это опечатка ?

Andrey: SergKis пишет: выделенным цветом это опечатка ? Да, опечатка. SergKis пишет: SET OOP ON стоит, не отключен ? Перепроверю.

Andrey: В основной программе не стоит у меня SET OOP ON . А везде в других стоит. Пропустил наверное. Буду проверять заново. СПАСИБО БОЛЬШОЕ !

Andrey: Всем привет. Непонятка возникла по окнам. Делаю форму:[pre2] DEFINE WINDOW Form_Calc ; ...... WINDOWTYPE STANDARD ;[/pre2] с неё вызываются допустим 3 окна: [pre2] cFormName := "WinMemo_" + HB_NtoS( _GetId() ) DEFINE WINDOW &cFormName ; ...... WINDOWTYPE STANDARD ;[/pre2] После выхожу с формы Form_Calc и прога падает с ошибкой: Error MGERROR/0 Window: Form_Calc is not defined. Program terminated. --------------------------------- Stack Trace --------------------------------- Called from MSGMINIGUIERROR(100) in module: h_error.prg Called from GETPROPERTY(4387) in module: h_controlmisc.prg Called from (b)PROVDB_3HMG(2458) in module: form_calc1.prg Called from _DOCONTROLEVENTPROCEDURE(1865) in module: h_windows.prg Called from EVENTS(1828) in module: h_events.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1499) in module: h_windows.prg Called from MSGEDIT(245) in module: Util_MsgEdit.prg Called from REPORTTXTNOTEPAD(49) in module: ReportTxt.prg Called from REPORTTXTONE(19) in module: ReportTxt.prg Called from (b)PROVDB_2HMG(1422) in module: form_calc1.prg Called from _DOCONTROLEVENTPROCEDURE(1865) in module: h_windows.prg Called from EVENTS(1828) in module: h_events.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1499) in module: h_windows.prg Called from SHOW_CALC2(238) in module: form_calc.prg Что не так делаю ? Наверное нужно закрывать эти 3 открытые формы ? А как их закрыть, если не знаю эти названия форм ? Или эти окна могут оставаться на экране, даже если закрыта форма Form_Calc ? P.S. Эти 3 формы вызываю по кнопке, типа: [pre2] bAction := { || SetProperty(ThisWindow.Name, This.Name, "Enabled", .F.),; ReportTxtOne( cFileError, .T. ) ,; SetProperty(ThisWindow.Name, This.Name, "Enabled", .T.) }[/pre2]

SergKis: Andrey Покрути пример с окнами https://TransFiles.ru/vo4dq



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