Форум » 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: gfilatov2002 пишет: Для этого надо использовать два события .... Спасибо БОЛЬШОЕ !!! Теперь знаю где копать...

Andrey: Всем привет. Подскажите пожалуйста как можно получить bmp-ки 16х16 из ExtractIcon( System.SystemFolder + "\shell32.dll"....) Пример :\MiniGUI\SAMPLES\BASIC\ExtractIcon\demo2.prg А то надоело иконки держать в ресурсах... Хочу из системы брать.

gfilatov2002: Andrey пишет: Подскажите пожалуйста как можно получить bmp-ки 16х16 Для этого надо использовать расширенную функцию ExtractIconEx() вместо простой функции ExtractIcon() Рабочий пример использования demo.prg см. ниже [pre]#include <minigui.ch> Procedure MAIN local aIcons := ExtractIconEx( GetStartUpFolder() + "\demo.exe", 0, 0, 0, 1 ) priv hIcon := aIcons[2] SET FONT TO "Ms Sans Serif", 8 DEFINE WINDOW Main ; AT 0,0 WIDTH 120 HEIGHT 119 ; TITLE "Information" ; MAIN ; ON PAINT fgDraw() ; ON RELEASE DestroyIcon( hIcon ) DEFINE LABEL hello ROW 43 - GetTitleHeight() - GetBorderHeight() COL 62 VALUE 'Hello' AUTOSIZE .T. END LABEL DEFINE BUTTON ok ROW 83 - GetTitleHeight() - GetBorderHeight() COL 12 WIDTH 90 HEIGHT 21 CAPTION 'OK' ACTION ThisWindow.Release DEFAULT .T. END BUTTON END WINDOW Main.Sizable := .F. // NOSIZE Main.MinButton := .F. // NOMINIMIZE Main.MaxButton := .F. // NOMAXIMIZE Main.Center Main.Activate Return Function fgDraw() Drawicon( Application.Handle, 12, 12, hIcon ) Return NIL #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #define SMALL_ICON 16 HB_FUNC( DRAWICON ) { HWND hwnd = (HWND) hb_parnl( 1 ); HDC hdc; hdc = GetDC( hwnd ); hb_retl( DrawIconEx( (HDC) hdc, hb_parni( 2 ), hb_parni( 3 ), (HICON) hb_parnl( 4 ), SMALL_ICON, SMALL_ICON, 0, 0, DI_NORMAL ) ); ReleaseDC( hwnd, hdc ); } HB_FUNC( DESTROYICON ) { DestroyIcon( (HICON) hb_parnl( 1 ) ); } HB_FUNC ( EXTRACTICONEX ) { HICON iLarge; HICON iSmall; UINT nIcons=hb_parni(5); ExtractIconEx( (LPCSTR) hb_parc( 1 ), hb_parni( 2 ) , &iLarge , &iSmall , nIcons ); hb_reta( 2 ); hb_storvnl( ( LONG ) iLarge, -1, 1 ); hb_storvnl( ( LONG ) iSmall, -1, 2 ); } #pragma ENDDUMP[/pre]


Andrey: gfilatov2002 пишет: Рабочий пример использования demo.prg см. ниже Спасибо БОЛЬШОЕ !!! Только лучше объявление сделать так: local aIcons := ExtractIconEx( GetExeFileName(), 0, 0, 0, 1 ) А то пока понял, почему не работает....

Andrey: Можно ли в объекте GRID использовать иконки ? Пример \MiniGUI\SAMPLES\BASIC\Grid_6 работает с bmp. А как его переделать на иконки ? И допускает ли GRID использование картинок не с первой позиции, а в середине таблицы ?

gfilatov2002: Andrey пишет: Можно ли в объекте GRID использовать иконки ? Нет Andrey пишет: допускает ли GRID использование картинок не с первой позиции, а в середине таблицы ? Нет, только в первой позиции и только в формате bitmap. Если нужно снять это ограничение, то необходимо использовать TsBrowse в режиме Grid

Andrey: gfilatov2002 пишет: Если нужно снять это ограничение, то необходимо использовать TsBrowse в режиме Grid Спасибо !

Andrey: Очень хочется иметь в МиниГуи простую функцию вывода иконки на форму !!! Типа: DrawIconEx( _HMG_MainHandle, nCol, nRow, "РесурсныйФайлИконки", SMALL_ICON ) А то есть функции, а форму свернешь и нет иконок - пример тут: #include "minigui.ch" Procedure MAIN LOCAL cText, cIcon := System.SystemFolder + "\user32.dll" PRIVAT hIcon cText := 'hIcon := ExtractIcon( '+System.SystemFolder + "\user32.dll" + ', nI )' cText += CRLF + 'DrawIcon( Application.Handle, nCol, nRow, hIcon )' SET FONT TO "Tahoma", 9 DEFINE WINDOW Form_1 ; AT 0,0 WIDTH 700 - GetBorderWidth() HEIGHT 300 - GetBorderHeight() ; TITLE "Icons from user32.dll" ; MAIN ; ON INIT fgDraw() ; BACKCOLOR { 40,122,237} ; ON RELEASE DestroyIcon( hIcon ) @ 10, 10 LABEL Label_Info VALUE cText WIDTH Form_1.Width-20 HEIGHT 42 ; TRANSPARENT FONTCOLOR BLACK SIZE 12 CENTERALIGN @ Form_1.Height-90, Form_1.Width-100 BUTTON Button_Exit ; WIDTH 80 HEIGHT 50 ; ICON cIcon ; EXTRACT 3 ; TOOLTIP 'Exit the program' ; ACTION ThisWindow.Release() END WINDOW Form_1.Sizable := .F. // NOSIZE Form_1.MinButton := .F. // NOMINIMIZE Form_1.MaxButton := .F. // NOMAXIMIZE Form_1.Center Form_1.Activate Return ///////////////////////////////////////////////////////////////////////////////// Function fgDraw() LOCAL nI, cStr1, cStr2, cObj1, cObj2 LOCAL nRow := 70, nCol FOR nI := 1 TO 17 nCol := 20 + 90*(nI-1) hIcon := ExtractIcon( System.SystemFolder + "\user32.dll", nI ) Drawicon( Application.Handle, nCol, nRow, hIcon ) cObj1 := "Lbl1_a"+LTRIM(STR(nI)) cStr1 := "nI="+LTRIM(STR(nI)) @ nRow+40, nCol LABEL &cObj1 OF Form_1 VALUE cStr1 ; WIDTH 100 HEIGHT 12 TRANSPARENT FONTCOLOR BLUE cObj2 := "Lbl2_a"+LTRIM(STR(nI)) cStr2 := "hIcon="+ CRLF + LTRIM(STR(hIcon)) @ nRow+55, nCol LABEL &cObj2 OF Form_1 VALUE cStr2 ; WIDTH 120 HEIGHT 28 TRANSPARENT FONTCOLOR RED IF hIcon == 0 // if no icon EXIT ENDIF NEXT Return NIL ///////////////////////////////////////////////////////////////////////////////// #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #define SMALL_ICON 16 /* убрал, т.к. не работает, чистится после проведения за границы экрана.... HB_FUNC( DRAWICON ) { HWND hwnd = (HWND) hb_parnl( 1 ); HDC hdc; hdc = GetDC( hwnd ); hb_retl( DrawIcon( (HDC) hdc, hb_parni( 2 ), hb_parni( 3 ), (HICON) hb_parnl( 4 ) ) ); ReleaseDC( hwnd, hdc ); } */ HB_FUNC( DRAWICON ) { HWND hwnd = (HWND) hb_parnl( 1 ); HDC hdc; hdc = GetDC( hwnd ); hb_retl( DrawIconEx( (HDC) hdc, hb_parni( 2 ), hb_parni( 3 ), (HICON) hb_parnl( 4 ), SMALL_ICON, SMALL_ICON, 0, 0, DI_NORMAL ) ); ReleaseDC( hwnd, hdc ); } HB_FUNC( DESTROYICON ) { DestroyIcon( (HICON) hb_parnl( 1 ) ); } #pragma ENDDUMP Может я что-то не понимаю с выводом иконок на форму ... Объясните пожалуйста как быть ? Иконки использую из-за того, что они НОРМАЛЬНО ложаться на форму с любым фоном. Т.е. если иконка круглая, то вокруг будет цвет фона, как и положенно. В случае использования PNG теряется качество картинки, т.к. приходиться делать для картинки BACKGROUNDCOLOR aBackgroundColor - и качество теряется, по краям получается черная окантовка....

gfilatov2002: Andrey пишет: Объясните пожалуйста как быть ? Надо заменить событие ON INIT на ON PAINT при определении формы. Рабочий пример см. ниже [pre2]#include "minigui.ch" Procedure MAIN LOCAL cText, cIcon := System.SystemFolder + "\user32.dll" PRIVAT aIcon := {} cText := 'hIcon := ExtractIcon( '+System.SystemFolder + "\user32.dll" + ', nI )' cText += CRLF + 'DrawIcon( Application.Handle, nCol, nRow, hIcon )' SET FONT TO "Tahoma", 9 DEFINE WINDOW Form_1 ; AT 0,0 WIDTH 700 - GetBorderWidth() HEIGHT 300 - GetBorderHeight() ; TITLE "Icons from user32.dll" ; MAIN ; ;//ON INIT fgDraw() ; ON PAINT fgDraw() ; BACKCOLOR { 40,122,237} ; ON RELEASE aEval(aIcon, {|hIcon| DestroyIcon( hIcon ) }) @ 10, 10 LABEL Label_Info VALUE cText WIDTH Form_1.Width-20 HEIGHT 42 ; TRANSPARENT FONTCOLOR BLACK SIZE 12 CENTERALIGN @ Form_1.Height-90, Form_1.Width-100 BUTTON Button_Exit ; WIDTH 80 HEIGHT 50 ; ICON cIcon ; EXTRACT 3 ; TOOLTIP 'Exit the program' ; ACTION ThisWindow.Release() END WINDOW Form_1.Sizable := .F. // NOSIZE Form_1.MinButton := .F. // NOMINIMIZE Form_1.MaxButton := .F. // NOMAXIMIZE Form_1.Center Form_1.Activate Return ///////////////////////////////////////////////////////////////////////////////// Function fgDraw() LOCAL nI, cStr1, cStr2, cObj1, cObj2 LOCAL nRow := 70, nCol FOR nI := 0 TO 6 nCol := 20 + 90*nI hIcon := ExtractIcon( System.SystemFolder + "\user32.dll", nI ) aAdd(aIcon, hIcon) Drawicon( Application.Handle, nCol, nRow, hIcon ) cObj1 := "Lbl1_a"+LTRIM(STR(nI)) cStr1 := "nI="+LTRIM(STR(nI)) if !_IsControlDefined(cObj1, 'Form_1') @ nRow+40, nCol LABEL &cObj1 OF Form_1 VALUE cStr1 ; WIDTH 100 HEIGHT 12 TRANSPARENT FONTCOLOR BLUE endif cObj2 := "Lbl2_a"+LTRIM(STR(nI)) cStr2 := "hIcon="+ CRLF + LTRIM(STR(hIcon)) if !_IsControlDefined(cObj2, 'Form_1') @ nRow+55, nCol LABEL &cObj2 OF Form_1 VALUE cStr2 ; WIDTH 120 HEIGHT 28 TRANSPARENT FONTCOLOR RED endif IF hIcon == 0 // if no icon EXIT ENDIF NEXT Return NIL ///////////////////////////////////////////////////////////////////////////////// #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #define SMALL_ICON 16 HB_FUNC( DRAWICON ) { HWND hwnd = (HWND) hb_parnl( 1 ); HDC hdc; hdc = GetDC( hwnd ); hb_retl( DrawIconEx( (HDC) hdc, hb_parni( 2 ), hb_parni( 3 ), (HICON) hb_parnl( 4 ), SMALL_ICON, SMALL_ICON, 0, 0, DI_NORMAL ) ); ReleaseDC( hwnd, hdc ); } HB_FUNC( DESTROYICON ) { DestroyIcon( (HICON) hb_parnl( 1 ) ); } #pragma ENDDUMP [/pre2]

Andrey: 1) А как сделать переключатель для иконок 16х16, 32х32 и т.д. ? 2) А почему фон у букв не совпадает с фоном формы (я же указываю TRANSPARENT ) ? 3) Удалять иконки - aEval(aIcon, {|hIcon| DestroyIcon( hIcon ) }) после закрытия программы ОБЯЗАТЕЛЬНО ?

gfilatov2002: 1) например, использовать две функции EXTRACTICON16() и EXTRACTICON32(), а также соответственно две функции Drawicon16() и Drawicon32() 2) надо просто проверить размеры надписей - они перекрываются в Вашем примере. Можно поправить, например так: cObj1 := "Lbl1_a"+LTRIM(STR(nI)) cStr1 := "nI="+LTRIM(STR(nI)) if !_IsControlDefined(cObj1, 'Form_1') @ nRow+40, nCol LABEL &cObj1 OF Form_1 VALUE cStr1 ; autosize FONTCOLOR BLUE transparent endif cObj2 := "Lbl2_a"+LTRIM(STR(nI)) cStr2 := "hIcon="+ CRLF + LTRIM(STR(hIcon)) if !_IsControlDefined(cObj2, 'Form_1') @ nRow+65, nCol LABEL &cObj2 OF Form_1 VALUE cStr2 ; WIDTH 70 HEIGHT 28 BACKCOLOR { 40,122,237} FONTCOLOR RED endif 3) да, обязательно, для освобождения выделенных графических ресурсов

Andrey: Спасибо БОЛЬШОЕ за ответы ! gfilatov2002 пишет: 1) например, использовать две функции EXTRACTICON16() и EXTRACTICON32(), а также соответственно две функции Drawicon16() и Drawicon32() Вижу в вашей функции #define SMALL_ICON 16 А какое будет описание для иконок 32х32, 48х48, 96х96 ? Можно ли в библиотеку включить функцию типа: DrawIconMy( Application.Handle, nCol, nRow, hIcon, SMALL_ICON ) ? Или включить стандартную: DrawIconEx (hDC, X, Y, hIcon, 0, 0, 0, NULL, DI_NORMAL | DI_COMPAT | DI_DEFAULTSIZE) ? http://netcode.ru/cpp/?lang=&katID=11&skatID=131&artID=4462 Вот пример (заготовка) для показа разных размеров иконок на форме. У меня выходит только ОДИН размер, а нужно разные... И если иконка состоит из нескольких размеров, то ОНА не показывается на форме. http://files.mail.ru/EC2371A863DB46B9975C53B24D645F01 И еще отдельный вопрос: Как иконку из ресурсов (допустим 16х16) записать в bmp-файл ? Видел функции в c_bitmap.c // convert icon to bitmap. hBmp = Icon2Bmp( ( HICON ) hBmp ); А примеры работы - не нашел....

Andrey: В объектах IMAGE и LABEL можно менять ВИД КУРСОРА при наведении мышки на объект: @ 30,20 IMAGE Image_1 PICTURE 'LOGO' WIDTH 70 HEIGHT 70 STRETCH ; ACTION MsgInfo('Label Clicked!') OnMouseHover RC_CURSOR( "MINIGUI_FINGER" ) @ 40, 120 LABEL Label_Inf1 VALUE MiniGUIVersion() ; ON CLICK MsgInfo('Label Clicked!') ; ON MOUSEHOVER Rc_Cursor( "MINIGUI_FINGER" ) А как можно сделать так же с объектом BUTTONEX ? Т.е. хочу при наведении на кнопку изменить курсор, изменить иконку и изменить шрифт подписи иконки. Аналогично как в примере \MiniGUI\SAMPLES\BASIC\ON_MOUSEHOVER\demo.prg Как это сделать ?

Andrey: Разобрался с помощью Григория ! Ему отдельное СПАСИБО ! Вот такой пример теперь есть: Готовый пример - http://files.mail.ru/A0FD1D8B37FD4FD7829EC1139AC33B0D Народ, протестируйте этот пример пожалуйста !

SergKis: Andrey пишет:Народ, протестируйте этот пример пожалуйста ! На Win7 работает нормально, немного нелогичны клавиши, например стрелка вниз с меню 1 идет на меню 2, а просится меню 3 и т.д.

Andrey: SergKis пишет: немного нелогичны клавиши, например стрелка вниз с меню 1 идет на меню 2, а просится меню 3 и т.д. Понял, переделал. На это не обратил внимания с самого начала. Новый ехе-ник - http://files.mail.ru/ADC40020595240EC930A04F7DB90E5E7

SergKis: Andrey Еще, на мой взгляд не надо фокус на кнопки минимизации и выхода (верхние) переключать - основное это кнопки на окне. и при нажатии верхнего выхода - нет запроса, как на основной кнопки "выход"

SergKis: Andrey пишет:Понял, переделал Глянь внимательнее: -стрелки вверх\вниз переключают кнопки одной колонки -стрелки вправо\влево переключают кнопки между колонками одного ряда

Andrey: SergKis пишет: Глянь внимательнее: -стрелки вверх\вниз переключают кнопки одной колонки -стрелки вправо\влево переключают кнопки между колонками одного ряда А это я не знаю как сделать.... Посмотрите сами....

Andrey: SergKis пишет: Глянь внимательнее: -стрелки вверх\вниз переключают кнопки одной колонки -стрелки вправо\влево переключают кнопки между колонками одного ряда Теперь понял что нужно было сделать. Ваши исправления - классные ! http://files.mail.ru/8A9B66C885F8424A8277F9A4450B52FB Использовать у себя это меню в программах будете ?



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