Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть III) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).
|
|
|
Ответов - 166
, стр:
1
2
3
4
5
6
7
8
9
All
[только новые]
|
|
gustow
|
| постоянный участник
|
Пост N: 72
Зарегистрирован: 06.02.07
|
|
Отправлено: 18.03.09 08:28. Заголовок: Григорий, в процессе..
Григорий, в процессе составления "списка примеров" получил (при запуске скомпилированного примера из BASIC\Charts такой вот вылет (см. http://slil.ru/27270178). Win98 SE
|
|
|
gfilatov
|
| модератор
|
Пост N: 967
Зарегистрирован: 25.05.05
|
|
Отправлено: 18.03.09 10:57. Заголовок: gustow пишет: Win98..
gustow пишет: цитата: | Win98 SE Called from TOLEAUTO:OPEN(0) Called from OPENTABLE(246) in demo.prg Called from (b)MAIN(46) in demo.prg |
| Ничего удивительного - проверьте, установлен ли у Вас MDAC 2.8 SP1 по ссылке http://msdn2.microsoft.com/en-us/data/aa937730.aspx Это необходимо только для " устаревшей" Win98 SE естественно.
|
|
|
gfilatov
|
| модератор
|
Пост N: 968
Зарегистрирован: 25.05.05
|
|
Отправлено: 18.03.09 13:02. Заголовок: Опубликован 64-й релиз Расширенной версии библиотеки MiniGUI
|
|
|
valery2
|
| |
Пост N: 82
Зарегистрирован: 12.02.08
|
|
Отправлено: 18.03.09 14:04. Заголовок: небольшая, но удобноя, добавочка в Browse
DEFINE CHECKBOX Control_1 ROW 0 COL 0 WIDTH This.CellWidth CAPTION '' VALUE CellData FONTNAME _hmg_aControlFontName FONTSIZE _hmg_aControlFontSize ON CHANGE IF( _IsWindowActive('_InPlaceEdit'),; _InPlaceEditOk ( i , _InPlaceEdit.Control_1.Value , aValid , CellColIndex ,; sFieldName , _GridWorkArea , aValidMessages , lock , ControlType , aInputItems ), NIL ) END CHECKBOX
|
|
|
gustow
|
| постоянный участник
|
Пост N: 73
Зарегистрирован: 06.02.07
|
|
Отправлено: 18.03.09 15:10. Заголовок: gfilatov пишет: про..
gfilatov пишет: цитата: | проверьте, установлен ли у Вас MDAC 2.8 SP1 |
| Да оно мне как-то (пока) "и даром не надь!.. и с деньгами не надь!.." ((с) м/ф "Волшебное кольцо" - по "Архангельским новеллам") :) Просто проверял "на дурака" (для описания - "что вижу, о том пою") :) Хорошо бы прежде чем пытаться открывать - как-то проверить: а оно у клиента на машинке есть? И коли нет - "по-человечески" сказать: мол, обойдесся...
|
|
|
gfilatov
|
| модератор
|
Пост N: 970
Зарегистрирован: 25.05.05
|
|
Отправлено: 18.03.09 15:49. Заголовок: gustow пишет: Хорош..
gustow пишет: цитата: | Хорошо бы прежде чем пытаться открывать - как-то проверить |
| Нет проблем - добавьте в самом начале Procedure Main такую проверку: цитата: | IF !IsWinNT() .AND. !CheckMDAC() MsgStop( 'This Program Runs In Win2000/XP Only!', 'Stop' ) Return ENDIF |
| где цитата: | Static Function CheckMDAC() LOCAL oReg, cKey := "" OPEN REGISTRY oReg KEY HKEY_LOCAL_MACHINE ; SECTION "Software\CLASSES\MDACVer.Version\CurVer" GET VALUE cKey NAME "" OF oReg CLOSE REGISTRY oReg Return !EMPTY(cKey) |
|
|
|
|
gustow
|
| постоянный участник
|
Пост N: 76
Зарегистрирован: 06.02.07
|
|
Отправлено: 18.03.09 16:00. Заголовок: gfilatov пишет: Нет..
gfilatov пишет: цитата: | Нет проблем - добавьте в самом начале Procedure Main |
| Я про пример, который идет в сборке (там бы поправить)... или я уж перфекционизмом мучаюсь?.. :) (хотя, наверно, маловато будет "новичков" с "устаревшей" Win98 - но хочется, чтобы уж все или работало "везде" - или говорило внятно, почему не работает [чтоб новичка непонятными вылетами не пугать]) И... Григорий, не пора ли новую ветку открывать ("часть IV")? Или рановато? А то эта начинается с анонса аж 48-го билда... :)
|
|
|
gfilatov
|
| модератор
|
Пост N: 972
Зарегистрирован: 25.05.05
|
|
Отправлено: 18.03.09 16:20. Заголовок: gustow пишет: Я про..
gustow пишет: цитата: | Я про пример, который идет в сборке (там бы поправить)... |
| Сделаю в следующей сборке gustow пишет: цитата: | не пора ли новую ветку открывать ("часть IV")? Или рановато? |
| Ждем-с, пока эта ветка получит хотя бы четыре звезды в форуме
|
|
|
gfilatov
|
| модератор
|
Пост N: 974
Зарегистрирован: 25.05.05
|
|
Отправлено: 24.03.09 14:40. Заголовок: Harbour 1.1.0dev (Rev. 10684) for BCC 5.5.1 (SVN 2009-03-24 01:08)
Обновил сборку компилятора Харбор 1.1.0 для BCC 5.5.1 (Harbour MiniGUI Extended Distribution) по адресу: http://minigui.mylivepage.ru/file/?fileid=6894 Harbour Build Info --------------------------- Version: Harbour 1.1.0dev (Rev. 10684) Compiler: Borland C++ 5.5.1 (32-bit) PCode version: 0.2 ChangeLog last entry: 2009-03-24 01:08 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl) ChangeLog ID: ChangeLog 10684 2009-03-24 00:02:25Z druzus Built on: Mar 24 2009 10:29:35 Extra C compiler options: -DHB_FM_STATISTICS_OFF -DHB_GUI -DHB_FM_STD_ALLOC Build options: Language options: (Clipper 5.3) (Clipper 5.x undoc) (Xbase++) (Flagship) (dirty extensions)
|
|
|
gfilatov
|
| модератор
|
Пост N: 975
Зарегистрирован: 25.05.05
|
|
Отправлено: 03.04.09 12:22. Заголовок: Harbour 1.1.0dev (Rev. 10775) для BCC 5.5.1 (SVN 2009-04-03 03:45)
Снова обновил сборку компилятора Харбор 1.1.0 для BCC 5.5.1 (Harbour MiniGUI Extended Distribution) по адресу: http://minigui.mylivepage.ru/file/?fileid=6936 Harbour Build Info --------------------------- Version: Harbour 1.1.0dev (Rev. 10775) Compiler: Borland C++ 5.5.1 (32-bit) PCode version: 0.2 ChangeLog last entry: 2009-04-03 03:45 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) ChangeLog ID: ChangeLog 10775 2009-04-03 01:39:08Z druzus Built on: Apr 3 2009 11:37:04 Extra C compiler options: -DHB_FM_STATISTICS_OFF -DHB_GUI -DHB_FM_STD_ALLOC Build options: Language options: (Clipper 5.3) (Clipper 5.x undoc) (Xbase++) (Flagship) (dirty extensions) ---------------------------
|
|
|
gfilatov
|
| модератор
|
Пост N: 980
Зарегистрирован: 25.05.05
|
|
Отправлено: 15.04.09 12:47. Заголовок: Опубликован 65-й релиз Расширенной версии библиотеки MiniGUI
Новый релиз библиотеки выложил по адресу: http://minigui.mylivepage.ru/file/?fileid=7017 а также, как обычно, на сервере http://hmgextended.com по адресу: http://hmgextended.com/files/CONTRIB/hmg-1.6-65-setup.zip Что нового: - исправление обнаруженных ошибок и неточностей кода; - добавлена возможность перемещения внутри строки по полям в элемент управления GRID - добавлена возможность перетаскивания записей в элементе управления ListBox; - обновлена библиотека HbSqlite3 (спасибо Петру Черному!); - обновлены сборки компилятора Харбор и HMGS-IDE; - новые примеры использования TsBrowse совместно с ADORDD, простые транзакции для DBF - обновлены некоторые старые примеры (как обычно ).
|
|
|
|
Sergey Spirin
|
| постоянный участник
|
Пост N: 244
Зарегистрирован: 25.12.07
|
|
Отправлено: 15.04.09 19:49. Заголовок: Григорий, здравствуй..
Григорий, здравствуйте, Не могли бы Вы в двух словах рассказать о вот этом: - поддержка пользовательских компонентов (заимствована из оффициального релиза); Это реализовано в полном объеме? Интересно, что сейчас тестируют Xailer2, в котором ждут, похоже, аналогичную функциональность. У некоторых пользователей Xailer "витает" идея User Preview Фаста как обычного контрола.... Хочу понять, это применимо только к Xailer или может использоваться каким-то образом шире.
|
|
|
gfilatov
|
| модератор
|
Пост N: 981
Зарегистрирован: 25.05.05
|
|
Отправлено: 15.04.09 20:47. Заголовок: Здравствуйте, Сергей..
Здравствуйте, Сергей! Под пользовательскими компонентами в МиниГуи подразумевается возможность создавать собственные элементы управления, не изменяя самой библиотеки. Описание на языке оригинала ниже: цитата: | User Components Development Reference This standard interface allow HMG users to create its own components (ie: new controls) without need to modify HMG library itself. - InstallEventHandler ( <cEventHandlerFunctionName> ) Every time that an event is triggered by the system the specified function will be called. This function will receive the following parameters: hWnd, nMsg, wParam, lParam If your function process the message, it must return a not NIL value. If not, it must return NIL. - InstallMethodHandler(<cMethodName>,<cMethodHandlerProcName>) Every time that specified method is called, your procedure will be executed. If your procedure process the method, you must set the 'user process flag' to .T. If not, you must set it to .F. - InstallPropertyHandler(<cPropName>,<cSetFucName>,<cGetFuncName>) When the specified property is set, <cSetFucName> is called with all the original parameters When the specified property is value retrieved <cGetFucName> is called with all the original parameters. In both cases if your functions process the property, you must set the 'user process flag' to .T. If not, you must set it to .F. Other Considerations: If you've created components that requires #command directives (ie. a control) you must add these definitions to i_UsrInit.ch file located at HMG's INCLUDE folder. The definitions must include start and end markers that will be used to allow the creation of automated installation and maintenance procedures for components. The format for start marker is: #define BASEDEF_<YourComponentTypeName> The format for end marker is: #undef BASEDEF_<YourComponentTypeName> If you've created methods or properties with new names (not currently specified in i_windows.ch, DECLARE WINDOW command definition) you must add translation directives for them in 'i_UsrSOOP.ch' file, located at HMG's INCLUDE folder. The definitions must include start and end markers too and the translation directives must follow special rules. The format for start marker is: #define SOOP_<YourComponentTypeName> ;; The format for translation directives for methods is: #xtranslate <Window> . \<Control\> . MethodName => Domethod ( <"Window">, \<"Control"\> , "MethodName" ) ;; The format for translation directives for properties is: #xtranslate <Window> . \<Control\> . PropName => GetProperty ( <"Window">, \<"Control"\> , "PropName" ) ;; #xtranslate <Window> . \<Control\> . PropName := \<v\> => SetProperty ( <"Window">, \<"Control"\> , "PropName" , \<v\> ) ;; The format for end marker is: #undef SOOP_<YourComponentTypeName> ;; |
|
|
|
|
Sergey Spirin
|
| постоянный участник
|
Пост N: 245
Зарегистрирован: 25.12.07
|
|
Отправлено: 16.04.09 09:49. Заголовок: Ок. Спасибо. То есть..
Ок. Спасибо. То есть, создание дополнительных компонентов-контролов возможно. Тогда у меня такой вопрос: Что необходимо было бы от FrsystH.dll, чтобы реализовать контрол-предпросмотр? Например, достаточно ли будет таких методов: SetHDC() - передать хэндл графического контекста контрола. DrawPage() - нарисовать страницу на этом контексте. Этого достаточно?
|
|
|
gfilatov
|
| модератор
|
Пост N: 982
Зарегистрирован: 25.05.05
|
|
Отправлено: 16.04.09 11:16. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: Сергей! Мне трудно что-либо сказать без понимания работы Вашей DLL. В качестве примера могу привести реализацию универсального обращения к элементу ActiveX, выполненную в качестве пользовательского компонента: цитата: | *------------------------------------------------------------------------------* Init Procedure _InitActiveX *------------------------------------------------------------------------------* InstallMethodHandler ( 'Release' , 'ReleaseActiveX' ) InstallPropertyHandler ( 'Object' , 'SetActiveXObject' , 'GetActiveXObject' ) Return *------------------------------------------------------------------------------* Procedure _DefineActivex ( cControlName, cParentForm, nRow, nCol , nWidth , nHeight , cProgId ) *------------------------------------------------------------------------------* Local mVar , nControlHandle , aControlHandles , k := 0 , nParentFormHandle , oOle Local nAtlDllHandle , nInterfacePointer * If defined inside DEFINE WINDOW structure, determine cParentForm if _HMG_BeginWindowActive = TRUE .or. _HMG_BeginDialogActive = TRUE cParentForm := iif(_HMG_BeginDialogActive, _HMG_ActiveDialogName, _HMG_ActiveFormName) endif * If defined inside a Tab structure, adjust position and determine * cParentForm if _HMG_FrameLevel > 0 nCol := nCol + _HMG_ActiveFrameCol [_HMG_FrameLevel] nRow := nRow + _HMG_ActiveFrameRow [_HMG_FrameLevel] cParentForm := _HMG_ActiveFrameParentFormName [_HMG_FrameLevel] EndIf * Check for errors * Check Parent Window If .Not. _IsWindowDefined (cParentForm) MsgMiniGuiError("Window: "+ cParentForm + " is not defined. Program terminated" ) Endif * Check Control If _IsControlDefined (cControlName,cParentForm) MsgMiniGuiError ("Control: " + cControlName + " Of " + cParentForm + " Already defined. Program Terminated" ) Endif * Check cProgId If valType (cProgId) <> 'C' MsgMiniGuiError ("Control: " + cControlName + " Of " + cParentForm + " PROGID Property Invalid Type. Program Terminated" ) EndIf If Empty (cProgId) MsgMiniGuiError ("Control: " + cControlName + " Of " + cParentForm + " PROGID Can't be empty. Program Terminated" ) EndIf * Define public variable associated with control mVar := '_' + cParentForm + '_' + cControlName nParentFormHandle := GetFormHandle (cParentForm) * Init Activex aControlHandles := InitActivex( nParentFormHandle , cProgId , nCol , nRow , nWidth , nHeight ) nControlHandle := aControlHandles [1] nInterfacePointer := aControlHandles [2] nAtlDllHandle := aControlHandles [3] If _HMG_BeginTabActive = .T. aAdd ( _HMG_ActiveTabCurrentPageMap , nControlhandle ) EndIf * Create OLE control oOle := CreateObject( nInterfacePointer ) k := _GetControlFree() Public &mVar. := k _HMG_aControlType [k] := "ACTIVEX" _HMG_aControlNames [k] := cControlName _HMG_aControlHandles [k] := nControlHandle _HMG_aControlParenthandles [k] := nParentFormHandle _HMG_aControlIds [k] := 0 _HMG_aControlProcedures [k] := "" _HMG_aControlPageMap [k] := {} _HMG_aControlValue [k] := Nil _HMG_aControlInputMask [k] := "" _HMG_aControllostFocusProcedure [k] := "" _HMG_aControlGotFocusProcedure [k] := "" _HMG_aControlChangeProcedure [k] := "" _HMG_aControlDeleted [k] := .F. _HMG_aControlBkColor [k] := Nil _HMG_aControlFontColor [k] := Nil _HMG_aControlDblClick [k] := "" _HMG_aControlHeadClick [k] := {} _HMG_aControlRow [k] := nRow _HMG_aControlCol [k] := nCol _HMG_aControlWidth [k] := nWidth _HMG_aControlHeight [k] := nHeight _HMG_aControlSpacing [k] := 0 _HMG_aControlContainerRow [k] := iif ( _HMG_FrameLevel > 0 ,_HMG_ActiveFrameRow [_HMG_FrameLevel] , -1 ) _HMG_aControlContainerCol [k] := iif ( _HMG_FrameLevel > 0 ,_HMG_ActiveFrameCol [_HMG_FrameLevel] , -1 ) _HMG_aControlPicture [k] := "" _HMG_aControlContainerHandle [k] := 0 _HMG_aControlFontName [k] := Nil _HMG_aControlFontSize [k] := Nil _HMG_aControlFontAttributes [k] := {} _HMG_aControlToolTip [k] := '' _HMG_aControlRangeMin [k] := 0 _HMG_aControlRangeMax [k] := 0 _HMG_aControlCaption [k] := '' _HMG_aControlVisible [k] := .t. _HMG_aControlHelpId [k] := nAtlDllHandle _HMG_aControlFontHandle [k] := Nil _HMG_aControlBrushHandle [k] := 0 _HMG_aControlEnabled [k] := .T. _HMG_aControlMiscData1 [k] := oOle Return *------------------------------------------------------------------------------* Procedure ReleaseActiveX ( cWindow , cControl ) *------------------------------------------------------------------------------* If _IsControlDefined ( cControl, cWindow ) .And. GetControlType ( cControl , cWindow ) == 'ACTIVEX' ExitActivex( GetControlHandle ( cControl , cWindow ), _HMG_aControlHelpId [ GetControlIndex ( cControl , cWindow ) ] ) _HMG_UserComponentProcess := .T. else _HMG_UserComponentProcess := .F. endif Return *------------------------------------------------------------------------------* Function SetActiveXObject ( cWindow , cControl ) *------------------------------------------------------------------------------* If GetControlType ( cControl , cWindow ) == 'ACTIVEX' MsgExclamation ( 'This Property is Read Only!' , 'Warning' ) endif _HMG_UserComponentProcess := .F. Return Nil *------------------------------------------------------------------------------* Function GetActiveXObject ( cWindow , cControl ) *------------------------------------------------------------------------------* Local RetVal := Nil If GetControlType ( cControl , cWindow ) == 'ACTIVEX' _HMG_UserComponentProcess := .T. RetVal := _GetControlObject ( cControl , cWindow ) else _HMG_UserComponentProcess := .F. endif Return RetVal *-----------------------------------------------------------------------------* Function _GetControlObject ( ControlName, ParentForm ) *-----------------------------------------------------------------------------* Local mVar , i mVar := '_' + ParentForm + '_' + ControlName i := &mVar if i == 0 Return '' EndIf Return ( _HMG_aControlMiscData1 [ &mVar ] ) *------------------------------------------------------------------------------* * Low Level C Routines *------------------------------------------------------------------------------* #pragma BEGINDUMP #include <windows.h> #include <commctrl.h> #include <hbapi.h> #include <hbvm.h> #include <hbstack.h> typedef HRESULT(WINAPI *LPAtlAxGetControl)(HWND hwnd,IUnknown** unk); typedef HRESULT(WINAPI *LPAtlAxWinInit)(void); /* InitActivex() function. 2008.07.15 - Roberto Lуpez <harbourminigui@gmail.com> http://harbourminigui.googlepages.com Inspired by the works of Oscar Joel Lira Lira <oskar78@users.sourceforge.net> for Freewin project http://www.sourceforge.net/projects/freewin */ HB_FUNC( INITACTIVEX ) { HMODULE hlibrary; HWND hchild; IUnknown *pUnk; IDispatch *pDisp; LPAtlAxWinInit AtlAxWinInit; LPAtlAxGetControl AtlAxGetControl; hlibrary = LoadLibrary( "Atl.Dll" ); AtlAxWinInit = ( LPAtlAxWinInit ) GetProcAddress( hlibrary, "AtlAxWinInit" ); AtlAxGetControl = ( LPAtlAxGetControl ) GetProcAddress( hlibrary, "AtlAxGetControl" ); AtlAxWinInit(); hchild = CreateWindowEx( 0, "AtlAxWin",hb_parc(2), WS_CHILD | WS_VISIBLE , hb_parni(3), hb_parni(4), hb_parni(5), hb_parni(6), (HWND)hb_parnl( 1 ) , 0 , 0 , 0 ); AtlAxGetControl( (HWND) hchild , &pUnk ); pUnk->lpVtbl->QueryInterface(pUnk,&IID_IDispatch,(void**)&pDisp); hb_reta( 3 ); hb_stornl( (LONG) hchild , -1, 1 ); hb_stornl( (LONG) pDisp , -1, 2 ); hb_stornl( (LONG) hlibrary , -1, 3 ); } HB_FUNC( EXITACTIVEX ) { DestroyWindow ( (HWND)hb_parnl( 1 ) ); FreeLibrary ( (HMODULE)hb_parnl( 2 ) ); } #pragma ENDDUMP |
| А теперь пример программы для использования WMPlayer.OCX в качестве элемента ActiveX: цитата: | /* * MINIGUI - Harbour Win32 GUI library Demo * * Copyright 2002-2008 Roberto Lopez <harbourminigui@gmail.com> * http://harbourminigui.googlepages.com/ * * Activex Sample: Inspired by Freewin Activex inplementation by * Oscar Joel Lira Lira http://sourceforge.net/projects/freewin */ #include "minigui.ch" Procedure Main DEFINE WINDOW Win1 ; AT 0,0 ; WIDTH 800 ; HEIGHT 500 ; TITLE 'ActiveX Component Demo' ; MAIN ; ON MAXIMIZE ( Win1.Test.Width := (Win1.Width) - 100, Win1.Test.Height := (Win1.Height) - 100 ) ; ON SIZE ( Win1.Test.Width := (Win1.Width) - 100, Win1.Test.Height := (Win1.Height) - 100 ) ; ON RELEASE Win1.Test.Release DEFINE MAIN MENU POPUP "Test" MENUITEM "Play File" ACTION Test() END POPUP END MENU DEFINE ACTIVEX Test ROW 10 COL 50 WIDTH 700 HEIGHT 400 PROGID "WMPlayer.OCX.7" END ACTIVEX END WINDOW CENTER WINDOW Win1 ACTIVATE WINDOW Win1 Return Procedure Test() Win1.Test.Object:url := "c:\\minigui\\samples\\basic\\resourcedemo\\sample.wav" Return |
| Возможно, это покажет Вам путь (например, оформление Вашей DLL как элемента ActiveX )
|
|
|
Sergey Spirin
|
| постоянный участник
|
Пост N: 246
Зарегистрирован: 25.12.07
|
|
Отправлено: 16.04.09 14:36. Заголовок: Добрый день, Григори..
Добрый день, Григорий. Вы меня не совсем поняли. В данном случае, я не собираюсь сам писать контролы для предпросмотра ни под Xailer, ни под MiniGui и т.д. Я только хочу обеспечить такую возможность написания тем, кому это потребуется или захочется ActiveX делать не буду. В данном случае это был бы "чрезмерный огород", я же хочу найти оптимальное решение, с максимальным быстродействием, без раздутого кода и т.д. То есть, нужно "нативное" решение... Как COM-решение, есть FastReport Studio - можно брать и пользоваться FRH же по задумке - "родной".... То есть, мне хорошо бы сейчас понять с Вашей помощью что нужно было бы для реализации такого контрола в MiniGUI. Ok. Чуть конкретизирую вопросы: - Известен ли hdc (device context handle) у контролов в MiniGUI? - Для своей отрисовки контрол обрабатыват WM_PAINT? - Существуют ли какие-нибудь ограничения при отрисовках или все только "в русле" WinApi? Спасибо.
|
|
|
gfilatov
|
| модератор
|
Пост N: 983
Зарегистрирован: 25.05.05
|
|
Отправлено: 16.04.09 15:00. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | - Известен ли hdc (device context handle) у контролов в MiniGUI? - Для своей отрисовки контрол обрабатыват WM_PAINT? - Существуют ли какие-нибудь ограничения при отрисовках или все только "в русле" WinApi? |
| 1) Да, hdc контрола всегда известен, он сохраняется в массиве _HMG_aControlHandles на prg-уровне. 2) нет, событие WM_PAINT используется только для отрисовки графических задач (линии, дуги и т.д.) и выполнения функции DefWindowProc() для форм, а также выполнения пользовательской прорисовки форм. 3) точно не скажу, но вроде используется только WinApi
|
|
|
Sergey Spirin
|
| постоянный участник
|
Пост N: 247
Зарегистрирован: 25.12.07
|
|
Отправлено: 16.04.09 15:18. Заголовок: gfilatov пишет: 1) ..
gfilatov пишет: цитата: | 1) Да, hdc контрола всегда известен, он сохраняется в массиве _HMG_aControlHandles на prg-уровне. 2) нет, событие WM_PAINT используется только для отрисовки графических задач (линии, дуги и т.д.) и выполнения функции DefWindowProc() для форм, а также выполнения пользовательской прорисовки форм. 3) точно не скажу, но вроде используется только WinApi |
| Ok. Спасибо. А как, схематично, выглядело бы реализация контрола, который, допустим, рисует пять красных квадратов на hdc-полотне 100x100, но имеющий размер 50x50? То есть, выводящий графический примитив, но скроллируемый.
|
|
|
gfilatov
|
| модератор
|
Пост N: 984
Зарегистрирован: 25.05.05
|
|
Отправлено: 16.04.09 16:16. Заголовок: Sergey Spirin пишет:..
Sergey Spirin пишет: цитата: | А как, схематично, выглядело бы реализация контрола |
| Сергей! Вот реальный пример подключения пользовательского компонента для универсальной печати содержания элемента управления GRID: цитата: | *------------------------------------------------------------------------------* Init Procedure _InitPrintGrid *------------------------------------------------------------------------------* InstallMethodHandler ( 'Print' , 'MyGridPrint' ) Return *------------------------------------------------------------------------------* Procedure MyGridPrint ( cWindowName , cControlName , MethodName ) *------------------------------------------------------------------------------* MethodName := Nil If GetControlType ( cControlName , cWindowName ) == 'GRID' gridprint( cControlName , cWindowName ) _HMG_UserComponentProcess := .T. else _HMG_UserComponentProcess := .F. endif Return |
| Здесь пользовательской функции gridprint( cControlName , cWindowName ) передаются только имя контрола и его родительского окна, но возможно передавать любой список параметров, а также имя требуемого метода для выполнения (в этом примере не используется). Затем вся обработка происходит в этой пользовательской функции
|
|
|
Sergey Spirin
|
| постоянный участник
|
Пост N: 248
Зарегистрирован: 25.12.07
|
|
Отправлено: 16.04.09 16:59. Заголовок: gfilatov пишет: Вот..
gfilatov пишет: цитата: | Вот реальный пример подключения |
| Ok. Насколько я понимаю, это добавление метода... К тому же, работа gridprint(), кажется, не визуальна, нет отрисовок.. Меня все-таки интересует именно новый контрол со скроллируемой поверхностью для рисования на ней. Хочется понять момент инициализации этого контрола, чтобы вызвать что-то типа: FrPrn:SetDC( Control:hDC ) И момент отрисовки, чтобы вызвать что-то типа: FrPrn:DrawPage()
|
|
|
Ответов - 166
, стр:
1
2
3
4
5
6
7
8
9
All
[только новые]
|
|