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

Ответов - 181, стр: 1 2 3 4 5 6 7 8 9 10 All

SergKis: Andrey пишет При PRIVATE nMsg := 0 - ошибка компиляции: смени режим компиляции или пиши как требует уст. компиляции

SergKis: Andrey пишет А с каких пор для PRIVATE переменных можно ставить m-> ? Я всегда ставил только для PUBLIC .... Со времен Summer 87

Pasha: Andrey пишет: Делаю контекстное меню. Не могу получить значение выбираемого меню. Вот код: STATIC nStatRet := 0 ..... DEFINE CONTEXT MENU OF &cForm FOR nI := 1 TO LEN(aMenuItem) cMenu := aMenuItem[nI] cName := "MyMenuItem" + HB_NtoS(nI) bAction := &( '{|| nStatRet := VAL( "' + HB_NtoS(nI) + '" ) }' ) cImg := aMenuImg[nI] lChk := .F. lDis := .F. _DefineMenuItem( cMenu, bAction, cName, cImg, lChk, lDis, , Font1 , , .F., .F. ) NEXT SEPARATOR MENUITEM "Выход" ACTION {|| nStatRet := 0 } FONT Font2 IMAGE aMenuImg[nLen] END MENU _ShowContextMenu(cForm, nY, nX, .f. ) // ПОКАЗ ВЫПАДАЕЩЕГО МЕНЮ InkeyGui(100) ? nStatRet, VALTYPE(nStatRet) Почему то всегда возвращает 0 ? Вклинюсь в вашу беседу. Маленький совет. Вместо такого кода (я конечно понимаю, что нормальные герои всегда идут в обход, но..) bAction := &( '{|| nStatRet := VAL( "' + HB_NtoS(nI) + '" ) }' ) лучше так: bAction := GetStatBlock(nI) ... Static func GetStatBlock(nI) Return {|| nStatRet := nI} Это прямой путь без всяких макросов и сомнительных конструкций через з.. Val и hb_NTOS


SergKis: Pasha По мне исп. в данном случае static переменной - лишнее. А без макросов можно hb_macroBlock(сVal) использовать

SergKis: PS Если применить вместо [pre2] cName := "MyMenuItem" + HB_NtoS(nI) bAction := &( '{|| nStatRet := VAL( "' + HB_NtoS(nI) + '" ) }' ) это cName := StrZero(nI, 3) bAction := {|| MyContextMenu() } ) то Static Func MyContextMenu() Local cForm := ThisWindow.Name // _HMG_ThisFormName Local cItem := This.Name // _HMG_ThisControlName Local nItem := Val(cItem) ... [/pre2]

Pasha: Макросы, private/public переменные... Это все стиль программирования, который имело смысл использовать до 1990-го года, когда появился клиппер 5 А с тех пор прошло все-таки 27 (двадцать семь, Карл!) лет. Контекстное меню - это, как я понимаю, popup-меню. В bAction заполняется номер выбранного пункта меню. Затем, надо полагать, в зависимости от номера выполняется какое-то действие. Почему бы сразу не задать в bAction это действие ? Т.е., кроме массива aMenuItem с названиями элементов меню передавать еще и массив блоков кода с действиями для этих элементов меню, или двумерный массив: имя и блок кода действие для этого элемента. Это еще более спрямит очень уж долгий путь к нужному результату.

Andrey: Pasha пишет: Почему бы сразу не задать в bAction это действие ? Это у меня функция для 3-х разных кнопок и картинке. При выборе позиций меню, кнопки/картинки перерисовываются. Из-за этого и не захотел дублировать одну функцию.

SergKis: Andrey пишет не захотел дублировать одну функцию Pasha об этом[pre2] ... FOR nI := 1 TO LEN(aMenuItem) cMenu := aMenuItem[nI] cName := "MyMenuItem" + HB_NtoS(nI) bAction := aMenuBlock[nI] // &( '{|| nStatRet := VAL( "' + HB_NtoS(nI) + '" ) }' ) cImg := aMenuImg[nI] ... [/pre2] передавай сразу, что выполнять из 3-х мест и дублироваться не будет.

Andrey: SergKis пишет: передавай сразу, что выполнять из 3-х мест и дублироваться не будет. Это не всегда удобно и необходимо.

Andrey: Сделал небольшой тест - https://cloud.mail.ru/public/74it/5ovNT4GDk Не могу добиться смены фона на КНОПКЕ. Что там не так делаю ? Вот текст кода: [pre2] @ 140, 110 BUTTONEX Button_S1 WIDTH 400 HEIGHT nFontSize*2 ; .......... FONTCOLOR BLACK BACKCOLOR YELLOW ; NOHOTLIGHT NOXPSTYLE HANDCURSOR NOTABSTOP ; On MouseHover {|| BFInvertObject({YELLOW,BLACK}) } ; On MouseLeave {|| BFInvertObject({BLACK,YELLOW}) } ; ACTION { || .... }[/pre2]

gfilatov2002: Andrey пишет: Что там не так делаю ? Убери из определения кнотки класс NOHOTLIGHT [pre2] @ 140, 110 BUTTONEX Button_S1 WIDTH 400 HEIGHT nFontSize*2 ; CAPTION aDim3[nI3] SIZE nFontSize ; FONTCOLOR BLACK BACKCOLOR YELLOW ; /*NOHOTLIGHT*/ NOXPSTYLE HANDCURSOR NOTABSTOP ; [/pre2]и все заработает

Andrey: gfilatov2002 пишет: и все заработает Опять пролетел... А за что он хоть отвечает ? Можно чуток подробнее про него ?

gfilatov2002: Andrey пишет: Можно чуток подробнее про него ? Если указан класс NOHOTLIGHT, то не создается подсветка контура кнопки при наведени мыши на кнопку. Поправил: сделал событие ON MOUSEHOVER независимым от указания класса NOHOTLIGHT для ButtonEx. Благодарю за наводку

Andrey: gfilatov2002 пишет: Поправил: сделал событие ON MOUSEHOVER независимым от указания класса NOHOTLIGHT для ButtonEx. Это будет доступно в следующей версии ?

gfilatov2002: Andrey пишет: Это будет доступно в следующей версии ? Да, конечно. Как раз сегодня подготовил первую бетку для следующей сборки

Andrey: gfilatov2002 пишет: Как раз сегодня подготовил первую бетку для следующей сборки Положи туда пример - Colored_Tab2. Правда его ещё доделать надо на показ/скрытие вкладок Tab. А так этот пример очень показателен. Пока дошёл как нужно работать с Tab, очень много времени потратил. Теперь можно на базе этого примера сразу делать большие программы.

Andrey: Всем привет ! Столкнулся с проблемой, не знаю как решить. Есть у меня в программе окно, создаётся так: [pre2] DEFINE WINDOW Form_Report ; ...... WINDOWTYPE STANDARD TOPMOST ; NOMAXIMIZE NOSIZE NOSYSMENU ; ..... DEFINE WINDOW Win_2 ; ... ; WINDOWTYPE PANEL .......... END WINDOW .... hWnd := GetFormHandle('Win_2') ON KEY PRIOR ACTION SendMessage( hWnd, WM_VSCROLL, SB_PAGEUP, 0 ) ON KEY NEXT ACTION SendMessage( hWnd, WM_VSCROLL, SB_PAGEDOWN, 0 ) ON KEY UP ACTION SendMessage( hWnd, WM_VSCROLL, SB_LINEUP, 0 ) ON KEY DOWN ACTION SendMessage( hWnd, WM_VSCROLL, SB_LINEDOWN, 0 ) END WINDOW[/pre2] Окно прекрасно работает, но если открыто другое окно: [pre2] DEFINE WINDOW &cFormName ; ......... WINDOWTYPE STANDARD TOPMOST ; NOMAXIMIZE NOSIZE ; ... DEFINE TBROWSE oBrw ; .... END TBROWSE .... END WINDOW[/pre2] то программа падает с ошибкой: Error MGERROR/0 Form Win_2 is not defined. Program terminated. Called from MSGMINIGUIERROR(97) in module: h_error.prg Called from GETFORMHANDLE(2209) in module: h_windows.prg Called from SHOW_REPORT2(261) in module: Source\form_report.prg Called from SHOW_REPORT(118) in module: Source\form_report.prg Called from (b)HB_MACROBLOCK(0) Строка 261 в SHOW_REPORT2(261) такая: [pre2] hWnd := GetFormHandle('Win_2') [/pre2] Почему падает ? Или нужно по другому делать ?

Vlad04: А окно объявлено ? Declare window Win_2 А почему не так cFormName:='Win_2'

Andrey: Кажись разобрался... Это еще первые мои наработки были. Говорил же Сергей: всегда нужно объекты положить на форму и ненужные просто скрывать. А у меня по условию - положить объект Win_2. Вот и ищет хендл несуществующего объекта. Спасибо за участие. Пока не спросишь что то - фиг сам разберёшься !

rvu: Такая проблема обнаружилась. У меня есть три программки, в каждой из них ввод данных. По отдельности все работает нормально. Начинаю их соединять вместе. В первой программе сверху кнопки: DEFINE TOOLBAR ToolBar_1 BUTTONSIZE 230,30 FLAT RIGHTTEXT BUTTON UNDO ; CAPTION 'Отменить введеное' ; ACTION ( Refresh() ) BUTTON SAVE ; CAPTION 'Записать и отправить' ; ACTION ( Save(), Refresh() ) BUTTON TABLO_ON ; CAPTION 'Включить ТАБЛО' ; ACTION ( ToOnTablo() ) BUTTON TABLO_OFF ; CAPTION 'Закрыть ТАБЛО' ; ACTION ( ToExitTablo() ) BUTTON SETTINGS01 ; CAPTION 'Настройки' ; ACTION ( ToSettings1() ) BUTTON UPGRADE ; CAPTION 'Обновление' ; ACTION ( ToUpgrade() ) END TOOLBAR Начинаю соединять программы. Кнопка Настройки вызывает другое окно, там тоже есть кнопка, вызывающее третье окно. В третьем окне очередной ввод данных. Пока их немного всё работает, но в какой-то момент времени при добавлении TEXTBOXов в это третье окно, в первом окне кнопки Настройки и Обновление перестают показываться. Т.е. сами кнопки есть, они нажимаются, работают, но надписи в них или пропадают или заменяются абракадаброй. Остальные кнопки показываются нормально. Вот что это и как быть?



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