Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть IV) (продолжение) » Ответить

Новая версия Расширенного релиза библиотеки MiniGUI (часть IV) (продолжение)

gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).

Ответов - 301, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 All

gfilatov2002: Andrey пишет: Если собирать проект для МиниГуи под MinGW - собирается ОДИН ехе-ник Именно так - никаких дополнительных DLL не нужно

Andrey: gfilatov2002 СПАСИБО ! Есть ли инструкция сборки программ под MinGW (как его ставить, если уже установлен BCC) ? Кто может просветить как собирать проект под BCC и MinGW (в одном *.hbp) ?

gfilatov2002: Andrey пишет: Есть ли инструкция сборки программ под MinGW Используйте структуру каталогов, как она задана в сборке по адресу http://hmgextended.com/files/CONTRIB/hmg207-mingw.zip и собирайте свою программу с помощью батника build.bat из примеров, включенных в эту поставку. Вот и все инструкции


Andrey: gfilatov2002 пишет: Вот и все инструкции Спасибо ! А как указать для МойПроект.hbp сборку под MinGW ?

gfilatov2002: Andrey пишет: А как указать для МойПроект.hbp сборку под MinGW ? Просто в начале батника для сборки проекта указываете @echo off SET HMGPATH=<имя диска>:\hmg SET PATH=%HMGPATH%\harbour\bin;%HMGPATH%\mingw\bin;%PATH% ... где <имя диска> - это имя корневого диска, на котором развернута сборка P.S. Готовый скрипт см. в файле minigui\buildapp.bat сборки для компилятора MinGW.

Andrey: gfilatov2002 пишет: Используйте структуру каталогов, как она задана в сборке по адресу Не совсем понятно... У меня установлено на диск Z: Z:\BCC55 Z:\MINIGUI если добавить Z:\HMG Z:\MINIGUI то папки MINIGUI - пересекутся !!! Я могу конечно переименовать папку, но хотелось бы что в дальнейшем была возможность собирать программу с помощью любого компилятора. Можно ли как то упорядочить этот процесс ? Кто и как разместил/собирает проект несколькими компиляторами ? И где скачать(и какую версию) MinGW для MiniGui ? А то у меня не собирается.... Z:\HMG\minigui>buildapp.bat Z:\hmg\mingw\bin\nm.exe: 'C:/WINDOWS/TEMP/hbmk_ex6y1x.dir/.c': No such file Z:/hmg/harbour/lib/libhbvm.a(hvmall.o)(.text+0x1ab):hvmall.c: undefined reference to `__mingw_vfprintf' collect2: ld returned 1 exit status hbmk2: Error: Running linker. 1 gcc.exe C:/WINDOWS/TEMP/hbmk_ex6y1x.dir/hbmk_d4jlpp.o Z:/HMG/minigui/_temp.o -mwindows -Wl,--start-grou p -lminigui -ltsbrowse -ladordd -lcalldll -lhbprinter -lminiprint -lhbct -lhbmisc -lhbtip -lhbziparc -lhbm zip -lminizip -lhbwin -lxhb -lmsvfw32 -lvfw32 -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtc gi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddf pt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainwin -lkernel32 -luser32 -lgdi32 -l advapi32 -lws2_32 -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lwinmm -lmap i32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib -Wl,--end-group -o.exe -LZ:/hmg/harbour/lib -LZ:/hmg/ harbour/bin -LZ:/hmg/minigui/lib

gfilatov2002: Andrey пишет: Не совсем понятно Если не хотите переименовывать папку minigui каждый раз при смене компилятора, то тогда нужно размещать эти папки на разных дисках. Andrey пишет: Можно ли как то упорядочить этот процесс ? Возможно, надо выбрать для себя приоритетный компилятор, как это сделано в текущей сборке для BCC Andrey пишет: И где скачать(и какую версию) MinGW для MiniGui ? Можно использовать версию 4.6.1 из поставки ночного релиза Харбора, который располагается по адресу http://sourceforge.net/projects/harbour-project/files/binaries-windows/nightly/

krutoff: sashaBG пишет: Подтверждаю зависание в TSBROWSE ! А у меня после ввода новых записей при заполнении окна TSBROWSE - ввода последней записи внизу окна - происходит очищение всего окна и даже тек. запись не показывает - остается только текущая ячейка. Откатился на пред. версию 2.06 - все опять отрабатывает. У меня в конце объявления TSBROWSE стоит: oBrw:nHeightCell += 6 oBrw:nHeightHead += 10 oBrw:nHeightFoot += 4 oBrw:nWheelLines := 1

gfilatov2002: krutoff пишет: у меня после ввода новых записей при заполнении окна TSBROWSE - ввода последней записи внизу окна - происходит очищение всего окна Да, подтверждаю, есть такая бяка. Уже поправил код библиотеки tsbrowse для новой сборки - добавил проверку (см. ниже): [pre2]... If ! ::lHitBottom .and. ! ::lAppendMode .and. ::nRowCount() == ::nRowPos() ::Refresh( .F. ) // 2.0.7 EndIf ::nAt := ::nLogicPos() //V90 ... [/pre2]

gfilatov2002: АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Завершена подготовка к опубликованию новой версии 2.0.8, которая выйдет послезавтра. Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - добавлен новый экспериментальный элемент управления CHECKLABEL (автор - Януш Пора); - добавлена константа WIN32_LEAN_AND_MEAN при компиляции Си-кода библиотеки, как это сделано в xHarbour; - обновлена сборка Харбора версии 3.1.0dev, библиотеки HbPrint и TsBrowse; - пересобрана HMGS-IDE с текущей версией библиотеки; - добавлены новые и обновлены старые примеры Спасибо за внимание!

Andrey: gfilatov2002 пишет: добавлены новые и обновлены старые примеры Подскажите пожалуйста, а есть ли возможность показа PNG-картинки без библиотеки Freeimage.dll ??? И пример, где можно посмотреть ?

gfilatov2002: Andrey пишет: есть ли возможность показа PNG-картинки без библиотеки Freeimage.dll Если Вам не нравится отдельная библиотека Freeimage.dll, то ее можно статически встроить в приложение, откомпилированное с помощью MinGW. Правда екзешник получится более 6 МБайт. Пример, как это сделать, мне прислал Владимир Чумаченко <ChVolodymyr@yandex.ru>. Картинки выводятся на экран как с диска, так и из ресурсов приложения [pre2]/* * MINIGUI - Harbour Win32 GUI library Demo * * Static FreeImage usage * (c) 2012 Vladimir Chumachenko <ChVolodymyr@yandex.ru> * * Revised by Grigory Filatov <gfilatov@inbox.ru> */ #include "FreeImage.ch" #include "MiniGUI.ch" // Области вывода изображений имеют фиксированные размеры // Координаты области изображения из файла #define FI_TOP 30 #define FI_LEFT 30 #define FI_BOTTOM 455 #define FI_RIGHT 380 #define FI_WIDTH ( FI_RIGHT - FI_LEFT ) #define FI_HEIGHT ( FI_BOTTOM - FI_TOP ) // Координаты области изображения из ресурса #define RES_TOP FI_TOP #define RES_LEFT ( FI_RIGHT + 50 ) #define RES_BOTTOM FI_BOTTOM #define RES_RIGHT 780 #define RES_WIDTH ( RES_RIGHT - RES_LEFT ) #define RES_HEIGHT ( RES_BOTTOM - RES_TOP ) // Имена ресурсов (соответсвуют определениям Demo.rc), хотя можно определить // свои и связывать их в процедуре загрузки. #define PNG_BIRD 'BIRD' #define PNG_SEA 'SEA' #define JPG_TOWN 'TOWN' #define JPG_WATERFALL 'WATERFALL' // Имя файла, имя ресурса Static cFileImg Static cResImg /****** * * Вывод графики из файла и ресурса * */ Procedure Main FI_Initialise() Set font to 'Tahoma', 9 Define window wMain ; At 0, 0 ; Width 810 ; Height 525 ; Title 'FreeImage Demo' ; NoMaximize ; NoSize ; Icon 'MAINICON' ; Main ; On Release FI_DeInitialise() ; On Paint { || ShowFile(), ShowRes() } Define main menu Define Popup '&File' MenuItem '&Open' Action OpenImgFile() Separator MenuItem 'E&xit Alt+X' Action ReleaseAllWindows() End Popup // !!! Все пункты меню связаны с именем соответствующего ресурса Define Popup '&Resourse' MenuItem 'Bird (png)' Action OpenImgRes( PNG_BIRD , 'PNG' ) MenuItem 'Sea (png)' Action OpenImgRes( PNG_SEA , 'PNG' ) MenuItem 'Town (jpg)' Action OpenImgRes( JPG_TOWN , 'JPG' ) MenuItem 'Waterfall (jpg)' Action OpenImgRes( JPG_WATERFALL, 'JPG' ) End Popup End menu @ ( FI_TOP - 25 ), ( FI_LEFT - 25 ) Frame frmFile ; Caption 'File' ; Width ( FI_WIDTH + 45 ) ; Height ( FI_HEIGHT + 45 ) @ ( RES_TOP - 25 ), ( RES_LEFT - 25 ) Frame frmResource ; Caption 'Resource' ; Width ( RES_WIDTH + 45 ) ; Height ( RES_HEIGHT + 45 ) End window On Key Alt+X of wMain Action ReleaseAllWindows() Center window wMain Activate window wMain Return ****** End of Main ****** /****** * * OpenImgFile() * * Выбор файла для загрузки * */ Static Procedure OpenImgFile Local cFile := GetFile( { { 'Image files (*.bmp;*.jpg;*.jpeg;*.gif;*.png;*.psd;*.tif;*.ico)', ; '*.bmp;*.jpg;*.jpeg;*.gif;*.png;*.psd;*.tif;*.ico' ; } ; }, 'Select image', GetCurrentFolder(), .F., .T. ) If !Empty( cFile ) cFileImg := cFile wMain.frmFile.Caption := cFileNoPath( cFile ) ShowFile() Endif Return ****** End of OpenImgFile ****** /****** * * ShowFile() * * Вывод изображения из файла * */ Static Procedure ShowFile Static nHandleFileImg Local nTop := FI_TOP , ; nLeft := FI_LEFT , ; nBottom := FI_BOTTOM, ; nRight := FI_RIGHT , ; cImage , ; pps , ; hDC , ; nWidth , ; nHeight , ; cID , ; aData , ; nKoeff , ; nHandleClone If !( nHandleFileImg == nil ) FI_Unload( nHandleFileImg ) nHandleFileImg := nil Endif If IsNil( cFileImg ) Return Else nHandleFileImg := FI_Load( FI_GetFileType( cFileImg ), cFileImg, 0 ) // Загрузка рисунка Endif InvalidateRect( Application.Handle, 1, FI_LEFT, FI_TOP, FI_RIGHT, FI_BOTTOM ) nWidth := FI_GetWidth( nHandleFileImg ) nHeight := FI_GetHeight( nHandleFileImg ) If ( ( nHeight > FI_HEIGHT ) .or. ( nWidth > FI_WIDTH ) ) If ( ( nHeight - FI_HEIGHT ) > ( nWidth - FI_WIDTH ) ) nKoeff := ( FI_HEIGHT / nHeight ) Else nKoeff := ( FI_WIDTH / nWidth ) Endif nHeight := Round( ( nHeight * nKoeff ), 0 ) nWidth := Round( ( nWidth * nKoeff ), 0 ) nHandleClone := FI_Clone( nHandleFileImg ) FI_Unload( nHandleFileImg ) nHandleFileImg := FI_Rescale( nHandleClone, nWidth, nHeight, FILTER_BICUBIC ) FI_Unload( nHandleClone ) Endif If ( nWidth < FI_WIDTH ) nLeft += Int( ( FI_WIDTH - nWidth ) / 2 ) nRight := ( nLeft + nWidth ) Endif If ( nHeight < FI_HEIGHT ) nTop += Int( ( FI_HEIGHT - nHeight ) / 2 ) nBottom := ( nTop + nHeight ) Endif pps := DefinePaintStru() hDC := BeginPaint( Application.Handle, pps ) FI_WinDraw( nHandleFileImg, hDC, nTop, nLeft, nBottom, nRight ) EndPaint( Application.Handle, pps ) Return ****** End of ShowFile ****** /****** * * OpenImgRes( cRes, cType ) * * Загрузка рисунка из ресурса * */ Static Procedure OpenImgRes( cRes, cType ) Local cData := Win_LoadResource( cRes, cType ) If !Empty( cData ) cResImg := cData wMain.frmResource.Caption := ( cRes + ' (' + cType + ')' ) ShowRes() Else MsgExclamation( cRes + ' not found.', 'Error' ) Endif Return ****** End of OpenImgRes ****** /****** * * ShowRes() * * Вывод рисунка из переменной (ресурса, загруженного в память) * */ Static Procedure ShowRes Static nHandleResImg Local nTop := RES_TOP , ; nLeft := RES_LEFT , ; nBottom := RES_BOTTOM, ; nRight := RES_RIGHT , ; cImage , ; pps , ; hDC , ; nWidth , ; nHeight , ; cID , ; aData , ; nKoeff , ; nHandleClone If !( nHandleResImg == nil ) FI_Unload( nHandleResImg ) nHandleResImg := nil Endif If Empty( cResImg ) Return Else nHandleResImg := FI_LoadFromMem( FI_GetFileTypeFromMem( cResImg, Len( cResImg ) ), cResImg, 0 ) Endif InvalidateRect( Application.Handle, 1, RES_LEFT, RES_TOP, RES_RIGHT, RES_BOTTOM ) nWidth := FI_GetWidth( nHandleResImg ) nHeight := FI_GetHeight( nHandleResImg ) If ( ( nHeight > RES_HEIGHT ) .or. ( nWidth > RES_WIDTH ) ) If ( ( nHeight - RES_HEIGHT ) > ( nWidth - RES_WIDTH ) ) nKoeff := ( RES_HEIGHT / nHeight ) Else nKoeff := ( RES_WIDTH / nWidth ) Endif nHeight := Round( ( nHeight * nKoeff ), 0 ) nWidth := Round( ( nWidth * nKoeff ), 0 ) nHandleClone := FI_Clone( nHandleResImg ) FI_Unload( nHandleResImg ) nHandleResImg := FI_Rescale( nHandleClone, nWidth, nHeight, FILTER_BICUBIC ) FI_Unload( nHandleClone ) Endif If ( nWidth < FI_WIDTH ) nLeft += Int( ( FI_WIDTH - nWidth ) / 2 ) nRight := ( nLeft + nWidth ) Endif If ( nHeight < FI_HEIGHT ) nTop += Int( ( FI_HEIGHT - nHeight ) / 2 ) nBottom := ( nTop + nHeight ) Endif pps := DefinePaintStru() hDC := BeginPaint( Application.Handle, pps ) FI_WinDraw( nHandleResImg, hDC, nTop, nLeft, nBottom, nRight ) EndPaint( Application.Handle, pps ) Return ****** End of ShowRes ****** #pragma BEGINDUMP #include <windows.h> #include "hbapi.h" #include "hbapiitm.h" // Определение структуры для рисования HB_FUNC_STATIC( DEFINEPAINTSTRU ) { PAINTSTRUCT *pps = (PAINTSTRUCT*) hb_xgrab( sizeof( PAINTSTRUCT ) ); hb_retnl( (LONG) pps ); } #pragma ENDDUMP[/pre2]

Andrey: gfilatov2002 пишет: е можно статически встроить в приложение, откомпилированное с помощью MinGW Я так и не смог собрать примеры на МиниГуи с помощью MinGW ....

gfilatov2002: Новый релиз библиотеки для компилятора BCC выложил, как и обещал, по адресу: http://minigui.mylivepage.ru/file/?fileid=8702 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-2.0.8-setup.zip Также доступна эта сборка и для компилятора MinGW по адресу: http://hmgextended.com/files/CONTRIB/hmg208-mingw.zip Спасибо за внимание! P.S. Ваши комментарии приветствуются, как всегда

Dr. Oldwarez: Залипание последней строки и периодическое исчезновение FOOTERа так никуда и не делось

SergKis: Для gfilatov2002: При инициализации дочернего окна MDI в c_windowMDI.c неточность: [pre2] HB_FUNC( INITMDICHILDWINDOW ) { HWND hwndChild; MDICREATESTRUCT mcs; char rgch[ 150 ]; static int cUntitled; int Style = 0; if( hb_parl(9) ) rgch[ 0 ] = 0; else { if( hb_parc(2) == NULL ) wsprintf( rgch, "Untitled%d", cUntitled++ ); else { strncpy( rgch, hb_parc(2), 149 ); rgch[ 149 ] = 0; } } if( !hb_parl(7) ) Style = Style | WS_MINIMIZEBOX; // ??? Эти константы не работаеют нужны WS_MINIMIZE if( !hb_parl(8) ) Style = Style | WS_MAXIMIZEBOX; // ??? Эти константы не работаеют WS_MAXIMIZE if( hb_parl(10) ) Style = Style | WS_VSCROLL; if( hb_parl(11) ) Style = Style | WS_HSCROLL; // Create the MDI child window mcs.szClass = "MdiChildWndClass"; // window class name mcs.szTitle = rgch; // window title mcs.hOwner = GetModuleHandle( NULL ); // owner mcs.x = hb_parni( 3 ); // x position mcs.y = hb_parni( 4 ); // y position mcs.cx = hb_parni( 5 ); // width mcs.cy = hb_parni( 6 ); // height mcs.style = Style; // window style mcs.lParam = 0; // lparam hwndChild = ( HWND ) SendMessage( ( HWND ) hb_parnl(1), WM_MDICREATE, 0, ( LPARAM ) ( LPMDICREATESTRUCT ) &mcs ); if( hwndChild != NULL ) ShowWindow( hwndChild, SW_SHOW ); hb_retnl( ( LONG ) hwndChild ); } [/pre2]

gfilatov2002: Dr. Oldwarez пишет: Залипание последней строки и периодическое исчезновение FOOTERа так никуда и не делось Вы правы, но появился пример, как обойти этот баг (см. в папке samples\Advanced\Tsb_LASTROW)

gfilatov2002: SergKis пишет: При инициализации дочернего окна MDI в c_windowMDI.c неточность Спасибо! Вы правы, но это должно быть исправлено по-другому (я уже сделал поправку для следующей сборки)

Dr. Oldwarez: gfilatov2002 пишет: Вы правы, но появился пример, как обойти этот баг (см. в папке samples\Advanced\Tsb_LASTROW) ДА! [pre2]procedure CorrectionFirstLast(oBrw) *--------------------------------------------------------------------------------* IF oBrw:nRowCount() == oBrw:nRowPos() oBrw:Refresh( .F. ) ENDIF IF oBrw:nLogicPos() > 0 .and. oBrw:nRowPos() == 1 oBrw:Refresh( .F. ) ENDIF RETURN[/pre2] И ведь работает! Огромное Вам спасибо!

sashaBG: Как предотвратиь срабатывание ONLOST или VALID при BTNTEXTBOX или GETBOX когда нажимая на бутон вызывем например свой 'поисковик' . Я раньше создавал флаг lDisableOnLost и поднимал его по нажатии кнопки. а сейчас не могу добится етого. Поетому так и остался на версии 2.0.5 ТЕСТ соберите с 2.0.5 потом с 2.0.8 и посмотрите на разницу при нажатии кнопок



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