Примеры из Минигуи -ошибки, вопросы..... (продолжение)
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.
Vlad04: Мы не ищем легкий путей! Стоит CHECKBOX Check_1 CAPTION 'Сменить иконку' ; задача которого сменить Иконку !!! А может поставить COMBOBOX и им определить направление копирования ?
SergKis: Vlad04 пишет А может поставить COMBOBOX и им определить направление копирования ? Это всего лишь пример https://TransFiles.ru/f1eyd
Andrey: Опять непонятка... Беру пример C:\MiniGUI\SAMPLES\BASIC\COLORED_TAB\demo.prg Добавляю вверху исходника строку:[pre2] #define EMAIL2 'gfilatov@inbox.ru'[/pre2] Далее добавляю объект: [pre2] PAGE 'Page &5' IMAGE 'Check' TOOLTIP 'TabPage 5' @ 24, 2 LABEL Page_5 VALUE "" WIDTH 0 HEIGHT 0 BACKCOLOR aTabColors[ 5 ] @ 70, 55 HYPERLINK Label_Link ; VALUE "<" + EMAIL2 + ">" ; ADDRESS EMAIL2 + "?cc=&bcc=" + ; "&subject=Programm%20testing%20%20MiniGui%20!" ; WIDTH 300 HEIGHT 30 ; BACKCOLOR aTabColors[ 5 ] ; TOOLTIP "Отправить письмо MiniGui" ; HANDCURSOR END PAGE END TAB[/pre2] Прога перестаёт работать, падает с ошибкой: Error BASE/1081 Argument error: + Called from GETCONTROLINDEX(1005) in module: h_controlmisc.prg Called from _SETADDRESS(55) in module: h_hyperlink.prg Called from SETTAB_1(135) in module: demo.prg Called from MAIN(46) in module: demo.prg В другом месте этот HYPERLINK работает. А совместно с цветным TAB - нет. Почему ?
gfilatov2002: Andrey пишет: @ 70, 55 HYPERLINK Label_Link ; VALUE "<" + EMAIL2 + ">" ; ADDRESS EMAIL2 + "?cc=&bcc=" + ; "&subject=Programm%20testing%20%20MiniGui%20!" ; WIDTH 300 HEIGHT 30 ; BACKCOLOR aTabColors[ 5 ] ; TOOLTIP "Отправить письмо MiniGui" ; HANDCURSOR Добавь указание родительского окна в определение этого HYPERLINK @ 70, 55 HYPERLINK Label_Link OF Form_1 ;
Andrey: СПАСИБО Григорий !
Andrey: Хорошие функции для получения картинок типа файлов: [pre2] hIcon := ICON_EXEREAD( cFile ) hBmp := BmpFromIcon( hIcon ) // a return handle bmp[/pre2] Только вот возвращают картинки 32х32. А можно сделать, чтобы возвращались картики 64х64 ?
Andrey: Есть большой лог ошибок ErrorLog.htm Просматривать вручную его ОЧЕНЬ ДОЛГО... Как бы сделать с него выборку: Date: 10.04.19 Time: 21:25:30 Error MGERROR/0 Control: PrgBar_1 Of Form_Index Not defined. Program terminated. Called from - выборку ошибок 5 или 7 уровней. Может сделать бы стандартный компонент в МиниГуи для этого ? В виде дерева будет наверное очень удобно !
SergKis: Andrey Может достаточно будет в программе переименовывать (раз в несколько дней\недель\...) Но сделать можешь "компонент" на весь файл, думаю возражений не будет
Andrey: Всем привет ! Что-то столкнулся с потерей фокуса на модальном окне. На главной таблице вызываю окно печати (MODAL), в этом окне своя таблица, в ней делаются вызов другой функции так: [pre2] SetProperty(oBrwP:cParentWnd, oBrwP:cControlName, "Enabled", .F.) //блокируем меню cRet := &cRun(....) // вызов внешних функций SetProperty(oBrwP:cParentWnd, oBrwP:cControlName, "Enabled", .T.) //разлокируем меню[/pre2] Вызываю функцию, в ней вызываю MODAL-окно, там выбираю и закрываю это окно, далее вызываю ещё MODAL-окно c таблицей, потом его закрываю. В результате теряю фокус на окно печати (MODAL), оно оказывается под главной таблицей. И теперь можно ходить по главной таблице, хотя окно печати (MODAL) ! И прога начинает вылетать в других местах. Юзер в ауте, я тоже. Как исправить эту ситуацию ? Сергей, ты писал что так блокировать таблицу не правильно, я этот вопрос оставил на потом. И вот этот вопрос вылез у меня. P.S. Если один раз вызывать MODAL-окно, то всё работает отлично, если 2 раза, то теряется фокус и начинается фигня.
SergKis: Andrey пишет ты писал что так блокировать таблицу не правильно, я этот вопрос оставил на потом Неправильно, т.к. tsbrowse (это объект) имеет собственную блокировку oBrw:lEnabled := .T.\.F. oBrw:Enabled( lEnable ) - с закраской тсб
Andrey: Разобрался наконец то со своей (или не моей) ошибкой ... Так портачит, что даже окно в коде принудительно не закрывается, например так Form_F5.Release Может неправильный код с потоками, я не знаю. Вот такая конструкция ломает в дальнейшем код: [pre2] // если было вызвано последнее окно MODAL, то вернёт .T. MsgDebug( "_HMG_IsModalActive=", _HMG_IsModalActive ) -->> .T. TestModalWindows() // если было вызвано последнее окно MODAL, то вернёт .T. MsgDebug( "_HMG_IsModalActive=", _HMG_IsModalActive ) -->> .F. ..... FUNCTION TestModalWindows() .... WaitThreadCreate( "загрузка отчёта" ) ..... DEFINE WINDOW Form_Modal ; ..... MODAL ; ..... ON INIT {|| WaitThreadClose(), DoMethod('Form_Modal', 'Butt_Exit', 'Setfocus') }[/pre2] Пример функции WaitThreadCreate() в папке C:\MiniGUI\SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg Где и что править в demo2.prg я не знаю ?
Andrey: gfilatov2002 пишет: Да, есть. Это WinAPI функция GetPixel(). Рабочий пример ее использования см. в папке samples\Advanced\FillTriangle Переделал эту функцию вот так:[pre2] Function RowColColorRGB(nRow,nCol) LOCAL hdc, cMsg, aColor := {0,0,0} LOCAL hWin := ThisWindow.Handle hdc := GetDC( hWin ) //x := _HMG_MouseCol //y := _HMG_MouseRow IF GetPixelColor( hdc, nCol, nRow, @aColor ) cMsg := "RGB (" ; + " r:" + str(aColor[1], 3 ) ; + " g:" + str(aColor[2], 3 ) ; + " b:" + str(aColor[3], 3 ) ; + " )" //MsgDebug( cMsg ) ENDIF ReleaseDC( hWin, hdc ) Return aColor[/pre2] Всегда чёрный цвет возвращает. Что то я не так переделал... Как правильно сделать
Andrey: Всем привет ! Очередная непонятка с работой на различных платформах. Сделал универсальное затенение окна (пример отправлен Григорию в библиотеку для всех) Работает отлично на Win ХР/8.1/10/Server 2012, а на Server 2008 не захватывает верх окна. Вот так выглядит на экране Windows Server 2008 R2 Standart: С чем это связано ?
Andrey: В разных меню испольую по разному стиль меню и высоту иконок, типа: [pre2] SET MENUSTYLE EXTENDED SetMenuBitmapHeight( 48 ) [/pre2] Есть ли функции установки - какой стиль стоит и какой размер иконок ?
Andrey: SergKis пишет: i_menu.ch Спасибо БОЛЬШОЕ !
Andrey: А можно как то сократить текст программы ? [pre2] // если было вызвано последнее окно MODAL, то вернёт .T. lModal := _HMG_IsModalActive If lModal DEFINE WINDOW &cFrmName ; ..... MODAL ; .... Else DEFINE WINDOW &cFrmName ; ..... WINDOWTYPE STANDARD ; .... Endif [/pre2]
Andrey: SergKis пишет: Поднял свои опыты на эту тему, покрути, если хочешь Не совсем то ... Хотелось бы типа такого: [pre2] WINDOWTYPE IIF( lModal == .T., MODAL , STANDARD ) ; [/pre2] Или возможности опледелить ТИП окна отдельной командой. Ну да ладно, если нет такого, будем писать как все.
SergKis: Andrey пишет Или возможности опледелить ТИП окна отдельной командой. А смысл в переменной ? В данном случае, при запуске из под модал, окно будет всегда модал, что бы ты не писал в WINDOWTYPE. Т.е. пиши STANDART или CHILD всегда, к примеру (в функции), но вызов этой же функции из под модал -> будет тип окна modal, т.к. modal := modal .or. ! Empty( _HMG_IsModalActive ). Если надо усложнить добавь в #xcommand переменную WTYPE <nTyp> и в ф-ю параметр nTyp и обрабатывай как надо[pre2] #xcommand DEF WINDOW <w> ; ... [ WTYP <nTyp> ] ; ... => ; DECLARE WINDOW <w> ;; _DefWindow ( <"w">, ... , <clientheight>, <.modal.>, <.flashexit.>, <nTyp> ) ... FUNCTION _DefWindow ( FormName, Caption, x, y, w, h, nominimize, nomaximize, ; ... clientwidth, clientheight, modal, flashexit, nTyp ) ... If HB_ISNUMERIC( nTyp ) // ставь лог. переменные как надо EndIf If modal ... или еще как душе будет угодно. [/pre2]