On-line: tnsr2, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
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;
- новые и обновленные старые примеры (как обычно ).




Спасибо: 0 
Профиль
Ответов - 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

Спасибо: 0 
Профиль
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 естественно.

Спасибо: 0 
Профиль
gfilatov
модератор




Пост N: 968
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 18.03.09 13:02. Заголовок: Опубликован 64-й релиз Расширенной версии библиотеки MiniGUI


Новый релиз библиотеки выложил по адресу:

http://minigui.mylivepage.ru/file/?fileid=6882

а также, как обычно, на сервере http://hmgextended.com по адресу:

http://hmgextended.com/files/CONTRIB/hmg-1.6-64-setup.zip

Также обновил с учетом последних изменений полную сборку IDE
на сайте http://minigui.mylivepage.ru по адресу:

http://minigui.mylivepage.ru/file/?fileid=6881

Что нового в IDE:
- исправление ошибок (как обычно );
- значительно ускорена загрузка больших форм за счет ее оптимизации;
- добавлена возможность компиляции проектов с помощью MinGW (я не проверял).



Спасибо: 0 
Профиль
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


Спасибо: 0 
Профиль
gustow
постоянный участник




Пост N: 73
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 18.03.09 15:10. Заголовок: gfilatov пишет: про..


gfilatov пишет:

 цитата:
проверьте, установлен ли у Вас MDAC 2.8 SP1


Да оно мне как-то (пока) "и даром не надь!.. и с деньгами не надь!.." ((с) м/ф "Волшебное кольцо" - по "Архангельским новеллам") :)

Просто проверял "на дурака" (для описания - "что вижу, о том пою") :)

Хорошо бы прежде чем пытаться открывать - как-то проверить: а оно у клиента на машинке есть? И коли нет - "по-человечески" сказать: мол, обойдесся...

Спасибо: 0 
Профиль
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)



Спасибо: 0 
Профиль
gustow
постоянный участник




Пост N: 76
Зарегистрирован: 06.02.07
ссылка на сообщение  Отправлено: 18.03.09 16:00. Заголовок: gfilatov пишет: Нет..


gfilatov пишет:

 цитата:
Нет проблем - добавьте в самом начале Procedure Main


Я про пример, который идет в сборке (там бы поправить)... или я уж перфекционизмом мучаюсь?.. :) (хотя, наверно, маловато будет "новичков" с "устаревшей" Win98 - но хочется, чтобы уж все или работало "везде" - или говорило внятно, почему не работает [чтоб новичка непонятными вылетами не пугать])

И... Григорий, не пора ли новую ветку открывать ("часть IV")? Или рановато? А то эта начинается с анонса аж 48-го билда... :)

Спасибо: 0 
Профиль
gfilatov
модератор




Пост N: 972
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 18.03.09 16:20. Заголовок: gustow пишет: Я про..


gustow пишет:

 цитата:
Я про пример, который идет в сборке (там бы поправить)...


Сделаю в следующей сборке

gustow пишет:

 цитата:
не пора ли новую ветку открывать ("часть IV")? Или рановато?


Ждем-с, пока эта ветка получит хотя бы четыре звезды в форуме

Спасибо: 0 
Профиль
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)


Спасибо: 0 
Профиль
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)
---------------------------


Спасибо: 0 
Профиль
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
- обновлены некоторые старые примеры (как обычно ).



Спасибо: 0 
Профиль
Sergey Spirin
постоянный участник


Пост N: 244
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 15.04.09 19:49. Заголовок: Григорий, здравствуй..


Григорий, здравствуйте,

Не могли бы Вы в двух словах рассказать о вот этом:

- поддержка пользовательских компонентов (заимствована из оффициального релиза);

Это реализовано в полном объеме?

Интересно, что сейчас тестируют Xailer2, в котором ждут, похоже, аналогичную функциональность. У некоторых пользователей Xailer "витает" идея User Preview Фаста как обычного контрола.... Хочу понять, это применимо только к Xailer или может использоваться каким-то образом шире.



Спасибо: 0 
Профиль
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> ;;






Спасибо: 0 
Профиль
Sergey Spirin
постоянный участник


Пост N: 245
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 16.04.09 09:49. Заголовок: Ок. Спасибо. То есть..


Ок. Спасибо. То есть, создание дополнительных компонентов-контролов возможно. Тогда у меня такой вопрос:

Что необходимо было бы от FrsystH.dll, чтобы реализовать контрол-предпросмотр? Например, достаточно ли будет таких методов:

SetHDC() - передать хэндл графического контекста контрола.
DrawPage() - нарисовать страницу на этом контексте.

Этого достаточно?

Спасибо: 0 
Профиль
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 )

Спасибо: 0 
Профиль
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?

Спасибо.






Спасибо: 0 
Профиль
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

Спасибо: 0 
Профиль
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? То есть, выводящий графический примитив, но скроллируемый.





Спасибо: 0 
Профиль
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 ) передаются только имя контрола и его родительского окна, но возможно передавать любой список параметров, а также имя требуемого метода для выполнения (в этом примере не используется). Затем вся обработка происходит в этой пользовательской функции

Спасибо: 0 
Профиль
Sergey Spirin
постоянный участник


Пост N: 248
Зарегистрирован: 25.12.07
ссылка на сообщение  Отправлено: 16.04.09 16:59. Заголовок: gfilatov пишет: Вот..


gfilatov пишет:

 цитата:
Вот реальный пример подключения



Ok. Насколько я понимаю, это добавление метода... К тому же, работа gridprint(), кажется, не визуальна, нет отрисовок.. Меня все-таки интересует именно новый контрол со скроллируемой поверхностью для рисования на ней. Хочется понять момент инициализации этого контрола, чтобы вызвать что-то типа:

FrPrn:SetDC( Control:hDC )

И момент отрисовки, чтобы вызвать что-то типа:

FrPrn:DrawPage()



Спасибо: 0 
Профиль
Ответов - 166 , стр: 1 2 3 4 5 6 7 8 9 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 661
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет