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

gfilatov2002: Петр, Благодарю за сообщение об ошибке! Догадываюсь, что этот сбой получен на Win7 Можно попробовать запустить этот пример в режиме совместимости с WinXP, как вариант У меня на Win7 64bit Ultimate C:\MiniGUI\SAMPLES\BASIC\IMAGE_2\DEMO.exe при изменении картинки типа .CUR отрабатывает без ошибки, поэтому, возможно, что есть проблемы с локальной системой. В любом случае, Ваши предложения по исправлению возникшей ошибки всегда приветствуются

Петр: gfilatov2002 пишет: Догадываюсь, что этот сбой получен на Win7 Нет, XP SP3. Просто, после запуска программы начните "тыкать" мышкой по всем кнопкам, слева направо или наоборот - без разницы. У меня где-то после 20 щелчков валилась. gfilatov2002 пишет: В любом случае, Ваши предложения по исправлению возникшей ошибки всегда приветствуются Уже исправил, осталось только по просьбе Андрея Верченко вывод PNG для систем поддерживающих gdiplus (XP и выше) прикрутить. Опубликую здесь или сброшу куда-то, по желанию.

Andrey: Петр пишет: осталось только по просьбе Андрея Верченко поддержу вывода PNG для систем поддерживающих gdiplus (XP и выше) прикрутить. Ура... Жду с нетерпением...


gfilatov2002: Петр пишет: Опубликую здесь Ждем...

Петр: Петр пишет: Опубликую здесь click here

Andrey: В примере DEMOGDIP.exe перестал работать показ кнопки "Set cur" И очень хотелось бы для таких подключений библиотек делать файлы проектов *.hbp Ну нет пока практики у меня (начинающего) включения разных библиотек в свои проекты. Заранее спасибо !

Петр: Andrey пишет: В примере DEMOGDIP.exe перестал работать показ кнопки "Set cur" Спасибо за подробное тестирование c_image.obj и RTFM И очень хотелось бы для таких подключений библиотек делать файлы проектов *.hbp вообще-то, автор hbmk2 для "таких подключений библиотек" *.hbc файлы рекомендует

Andrey: Петр пишет: вообще-то, автор hbmk2 для "таких подключений библиотек" *.hbc файлы рекомендует Можно и *.hbc

gfilatov2002: Петр пишет: Опубликую здесь Идея понятна - надо использовать GdiPlus.Dll вместо функции LoadImage() для вывода картинок из файлов в форматах, отличных от BMP. Но в бинарной форме это можно рассматривать только в качестве примера Замечание по поводу ошибки в примере Image_2 для файлов типа CUR и ICO. Проблема при частом обновлении этих картинок возникает только под WinXP. При работе в Win7 или Win98 этой проблемы не возникает

Петр: gfilatov2002 пишет: Но в бинарной форме это можно рассматривать только в качестве примера c_image.obj в стандартном режиме работы, без инициализации библиотеки gdi+, устраняет проблему разрушения памяти программы. К тому же, он позволяет вводить поддержку элементом управления Image формата PNG без перекомпиляции библиотеки, см. пример. Крайне полезная вещь для пользователей bcc55, в поставке которых нет gdiplus*.h (232 kB). Ну и напоследок, я выложу код c_image.c после окончательной пришлифовки, т.е. более точного копирования поведения loadolepicture, с этим нет проблем.

gfilatov2002: Петр пишет: я выложу код c_image.c после окончательной пришлифовка, т.е. более точного копирования поведения loadolepicture Большое спасибо! Но тогда уже это будет включено в следующую сборку

Петр: gfilatov2002 пишет: Но тогда уже это будет включено в следующую сборку Нет вопросов, пока же для желающих - модифицированная версия c_image.c (non-GDI+) click here

Andrey: gfilatov2002 пишет: Но тогда уже это будет включено в следующую сборку Желательно отдельным примером и файл для сборки hbmk2 !

gfilatov2002: Петр пишет: модифицированная версия c_image.c Огромное спасибо за переработанный код: чувствуется рука профи! Но я немного поправил, чтобы убрать предупреждение, которое выдает компилятор MinGW (см.ниже). [pre2]/*---------------------------------------------------------------------------- MINIGUI - Harbour Win32 GUI library source code Copyright 2002-2010 Roberto Lopez <harbourminigui@gmail.com> http://harbourminigui.googlepages.com/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this software; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). As a special exception, you have permission for additional uses of the text contained in this release of Harbour Minigui. The exception is that, if you link the Harbour Minigui library with other files to produce an executable, this does not by itself cause the resulting executable to be covered by the GNU General Public License. Your use of that executable is in no way restricted on account of linking the Harbour-Minigui library code into it. Parts of this project are based upon: "Harbour GUI framework for Win32" Copyright 2001 Alexander S.Kresin <alex@belacy.belgorod.su> Copyright 2001 Antonio Linares <alinares@fivetech.com> www - http://harbour-project.org "Harbour Project" Copyright 1999-2012, http://harbour-project.org/ "WHAT32" Copyright 2002 AJ Wos <andrwos@aust1.net> "HWGUI" Copyright 2001-2009 Alexander S.Kresin <alex@belacy.belgorod.su> ---------------------------------------------------------------------------*/ #ifndef CINTERFACE #define CINTERFACE #endif #define _WIN32_IE 0x0500 #ifdef __POCC__ #define _WIN32_WINNT 0x0500 #else #define _WIN32_WINNT 0x0400 #endif #include <windows.h> #include <commctrl.h> #include "olectl.h" #include "hbapi.h" #include "hbapiitm.h" #include "hbinit.h" #include "hbvm.h" HBITMAP loadolepicture ( char *filename, int width, int height, HWND handle, int scalestrech, int whitebackground, int transparent ); LRESULT APIENTRY PictSubClassFunc ( HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam ); static WNDPROC LabelOldWndProc; static BOOL read_image ( char *filename, DWORD *nFileSize, HGLOBAL *hMem ); static BOOL read_image_rsrc ( HINSTANCE hInstance, HRSRC hResInfo, HGLOBAL *hMem ); static void calc_rect ( HWND handle, int width, int height, int scalestrech, LONG lWidth, LONG lHeight, RECT *rect, RECT *rect2 ); HB_FUNC( INITIMAGE ) { HWND wndhandle; HWND wndparent = ( HWND ) hb_parnl( 1 ); int Style = WS_CHILD | SS_BITMAP; if( !hb_parl( 5 ) ) Style |= WS_VISIBLE; if( hb_parl( 6 ) || hb_parl( 7 ) ) Style |= SS_NOTIFY; wndhandle = CreateWindowEx( 0, "static", NULL, Style, hb_parni( 3 ), hb_parni( 4 ), 0, 0, wndparent, ( HMENU ) hb_parni( 2 ), GetModuleHandle( NULL ), NULL ); if( hb_parl( 7 ) ) LabelOldWndProc = ( WNDPROC ) SetWindowLong( wndhandle, GWL_WNDPROC, ( LONG ) PictSubClassFunc ); hb_retnl( ( LONG ) wndhandle ); } HB_FUNC( C_SETPICTURE ) { HBITMAP hBitmap; if( hb_parclen( 2 ) == 0 ) hb_retnl( ( LONG ) NULL ); hBitmap = loadolepicture( ( char * ) hb_parc( 2 ), hb_parni( 3 ), hb_parni( 4 ), ( HWND ) hb_parnl( 1 ), hb_parni( 5 ), hb_parni( 6 ), hb_parni( 7 ) ); if( hBitmap != NULL ) SendMessage( ( HWND ) hb_parnl( 1 ), ( UINT ) STM_SETIMAGE, ( WPARAM ) IMAGE_BITMAP, ( LPARAM ) hBitmap ); hb_retnl( ( LONG ) hBitmap ); } #define _OLD_STYLE 0 LRESULT APIENTRY PictSubClassFunc ( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ) { TRACKMOUSEEVENT tme; static PHB_SYMB pSymbol = NULL; static BOOL bMouseTracking = FALSE; long int r = 0; #if _OLD_STYLE BOOL bCallUDF = FALSE; #endif if( Msg == WM_MOUSEMOVE || Msg == WM_MOUSELEAVE ) { if( Msg == WM_MOUSEMOVE ) { if( bMouseTracking == FALSE ) { tme.cbSize = sizeof( TRACKMOUSEEVENT ); tme.dwFlags = TME_LEAVE; tme.hwndTrack = hWnd; tme.dwHoverTime = HOVER_DEFAULT; if( _TrackMouseEvent( &tme ) == TRUE ) { #if _OLD_STYLE bCallUDF = TRUE; #endif bMouseTracking = TRUE; } #if _OLD_STYLE } else { bCallUDF = FALSE; #endif } } else { #if _OLD_STYLE bCallUDF = TRUE; #endif bMouseTracking = FALSE; } #if _OLD_STYLE if( bCallUDF == TRUE ) { #endif if( !pSymbol ) pSymbol = hb_dynsymSymbol( hb_dynsymGet( "OLABELEVENTS" ) ); if( pSymbol ) { hb_vmPushSymbol( pSymbol ); hb_vmPushNil(); hb_vmPushLong( ( LONG ) hWnd ); hb_vmPushLong( Msg ); hb_vmPushLong( wParam ); hb_vmPushLong( lParam ); hb_vmDo( 4 ); r = hb_parnl( -1 ); } #if _OLD_STYLE } #endif return ( r != 0 ) ? r : CallWindowProc( LabelOldWndProc, hWnd, 0, 0, 0 ); } return CallWindowProc( LabelOldWndProc, hWnd, Msg, wParam, lParam ); } #undef _OLD_STYLE HBITMAP loadolepicture ( char *filename, int width, int height, HWND handle, int scalestrech, int whitebackground, int transparent ) { UINT fuLoad = ( transparent == 0 ) ? LR_CREATEDIBSECTION : LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT; IStream *iStream; IPicture *iPicture = NULL; HGLOBAL hMem = ( HGLOBAL ) NULL; HRSRC hResInfo; HRESULT hr; DWORD nFileSize = 0; RECT rect, rect2; BITMAP bm; HBITMAP bitmap, bitmap2; LONG lWidth, lHeight; // TODO HINSTANCE hInstance = GetModuleHandle( NULL ); /* MSDN: An application must not delete a DC whose handle was obtained * by calling the GetDC function. * Instead, it must call the ReleaseDC function to free the DC */ HDC imgDC = GetDC( handle ); HDC tmpDC; HDC tmp2DC = ( HDC ) NULL; bitmap2 = ( HBITMAP ) LoadImage( hInstance, filename, IMAGE_BITMAP, 0, 0, fuLoad ); if( bitmap2 == NULL ) bitmap2 = ( HBITMAP ) LoadImage( NULL, filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | fuLoad ); if( bitmap2 == NULL ) { hResInfo = FindResource( hInstance, filename, "JPG" ); if( hResInfo == NULL ) hResInfo = FindResource( hInstance, filename, "GIF" ); if( hResInfo == NULL ) { if( read_image( filename, &nFileSize, &hMem ) == FALSE ) { ReleaseDC( handle, imgDC ); return NULL; } } else if( read_image_rsrc( hInstance, hResInfo, &hMem ) == FALSE ) { ReleaseDC( handle, imgDC ); return NULL; } hr = CreateStreamOnHGlobal( hMem, TRUE, &iStream ); if( hr != S_OK || iStream == NULL ) { GlobalFree( hMem ); ReleaseDC( handle, imgDC ); return NULL; } #if defined( __cplusplus ) hr = OleLoadPicture( iStream, nFileSize, FALSE, IID_IPicture, ( LPVOID * ) &iPicture ); iStream->Release(); #else hr = OleLoadPicture( iStream, nFileSize, FALSE, &IID_IPicture, ( LPVOID * ) &iPicture ); iStream->lpVtbl->Release( iStream ); #endif if( hr != S_OK || iPicture == NULL ) { GlobalFree( hMem ); ReleaseDC( handle, imgDC ); return NULL; } iPicture->lpVtbl->get_Width( iPicture, &lWidth ); iPicture->lpVtbl->get_Height( iPicture, &lHeight ); } else { GetObject( bitmap2, sizeof( BITMAP ), &bm ); lWidth = bm.bmWidth; lHeight = bm.bmHeight; tmp2DC = CreateCompatibleDC( imgDC ); SelectObject( tmp2DC, bitmap2 ); } calc_rect( handle, width, height, scalestrech, lWidth, lHeight, &rect, &rect2 ); tmpDC = CreateCompatibleDC( imgDC ); bitmap = CreateCompatibleBitmap( imgDC, width, height ); SelectObject( tmpDC, bitmap ); if( whitebackground == 1 ) FillRect( tmpDC, &rect2, ( HBRUSH ) GetStockObject( WHITE_BRUSH ) ); else FillRect( tmpDC, &rect2, ( HBRUSH ) GetSysColorBrush( COLOR_BTNFACE ) ); if( iPicture != NULL ) { iPicture->lpVtbl->Render( iPicture, tmpDC, rect.left, rect.top, rect.right, rect.bottom, 0, lHeight, lWidth, -lHeight, NULL ); iPicture->lpVtbl->Release( iPicture ); GlobalFree( hMem ); } else { StretchBlt( tmpDC, rect.left, rect.top, rect.right, rect.bottom, tmp2DC, 0, 0, lWidth, lHeight, SRCCOPY ); DeleteDC( tmp2DC ); DeleteObject( bitmap2 ); } ReleaseDC( handle, imgDC ); DeleteDC( tmpDC ); return bitmap; } static BOOL read_image ( char *filename, DWORD *nFileSize, HGLOBAL *hMem ) { HANDLE hFile; LPVOID lpDest; DWORD nSize, nRead; hFile = CreateFile( filename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if( hFile == INVALID_HANDLE_VALUE ) return FALSE; nSize = GetFileSize( hFile, NULL ); if( nSize == INVALID_FILE_SIZE || ( *hMem = GlobalAlloc( GHND, nSize ) ) == NULL ) { CloseHandle( hFile ); return FALSE; } *nFileSize = nSize; lpDest = GlobalLock( *hMem ); if( lpDest == NULL ) { GlobalFree( *hMem ); CloseHandle( hFile ); return FALSE; } if( ReadFile( hFile, lpDest, nSize, &nRead, NULL ) == FALSE ) { GlobalUnlock( *hMem ); GlobalFree( *hMem ); CloseHandle( hFile ); return FALSE; } GlobalUnlock( *hMem ); CloseHandle( hFile ); return TRUE; } static BOOL read_image_rsrc ( HINSTANCE hInstance, HRSRC hResInfo, HGLOBAL *hMem ) { HGLOBAL hRes; DWORD nSize; LPVOID lpRes, lpDest; hRes = LoadResource( hInstance, hResInfo ); if( hRes == NULL ) return FALSE; nSize = SizeofResource( hInstance, hResInfo ); lpRes = LockResource( hRes ); if( lpRes == NULL || ( *hMem = GlobalAlloc( GHND, nSize ) ) == NULL ) { FreeResource( hRes ); return FALSE; } lpDest = GlobalLock( *hMem ); if( lpDest == NULL ) { GlobalFree( *hMem ); FreeResource( hRes ); return FALSE; } CopyMemory( lpDest, lpRes, ( SIZE_T ) nSize ); GlobalUnlock( *hMem ); FreeResource( hRes ); return TRUE; } static void calc_rect ( HWND handle, int width, int height, int scalestrech, LONG lWidth, LONG lHeight, RECT *rect, RECT *rect2 ) { if( ( width == 0 ) & ( height == 0 ) ) GetClientRect( handle, rect ); else SetRect( rect, 0, 0, width, height ); SetRect( rect2, 0, 0, rect->right, rect->bottom ); if( scalestrech == 0 ) { if( ( int ) lWidth * rect->bottom / lHeight <= rect->right ) rect->right = ( int ) lWidth * rect->bottom / lHeight; else rect->bottom = ( int ) lHeight * rect->right / lWidth; } rect->left = ( int ) ( width - rect->right ) / 2; rect->top = ( int ) ( height - rect->bottom ) / 2; }[/pre2]

Andrey: Петр пишет: Работает, и следующий раз, пожалуйста, пишите в правильной ветке, которую, к тому же, сами и создали - примеры, ошибки и т.д. Да, точно работает... Это глюк инета у меня был....

Andrey: Вопрос возник такой: Есть главное окно программы Form_1, делаю: MINIMIZE WINDOW Form_1 Inkey(60) RESTORE WINDOW Form_1 Программа успешно "скидывается" на панель задач, но мышкой (если юзер захочет) поднять ее невозможно !!! Что нужно использовать вместо INKEY() или нужно по другому делать ?

Dima: Andrey пишет: Что нужно использовать вместо INKEY() или нужно по другому делать ? А какова цель вообще ? ;) Ну скинул ее на панель задач и хорошо. Мешает что ли ? На фига туда еще и задержку лепить.....:)

Andrey: Dima пишет: Ну скинул ее на панель задач и хорошо. Мешает что ли ? На фига туда еще и задержку лепить.....:) Ну хотелось бы чтоб через минуту "поднялась" программа... Для дальнейших действий юзера. И как сделать чтоб эта программа была "под" запущенной программой - типа SW_SHOWNOACTIVATE ???

Петр: Я представляю шок юзера, у которого сначала улетает, а потом откуда не возьмись появляется окно.. MINIMIZE WINDOW Form_1 создать событие таймера с интервалом 60 сек. в событии проверить, распахнуто или нет окно, если нет RESTORE WINDOW грохнуть таймер.

Andrey: Петр пишет: MINIMIZE WINDOW Form_1 создать событие таймера с интервалом 60 сек. в событии проверить, распахнуто или нет окно, если нет RESTORE WINDOW грохнуть таймер. Не знаю как "создать событие таймера" ? Петр, набросай пожалуйста примерный код, (я пока только осваиваю Минигуи) ! Или ткни в пример где это делается...



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