On-line: i3t4j6, Haz, SergKis, гостей 4. Всего: 7 [подробнее..]
АвторСообщение





Пост N: 132
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 18.11.09 13:59. Заголовок: PDF файлы


Григорий подскажи, нет ли в MiniGUI инструмента просмотра PDF файлов?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 20 [только новые]


модератор




Пост N: 1099
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 18.11.09 15:39. Заголовок: Сергей Р пишет: нет..


Сергей Р пишет:

 цитата:
нет ли в MiniGUI инструмента просмотра PDF файлов?


Есть
См. рабочий пример в папке samples\Advanced\PDFReader
Внимание: для работы примера требуется установленный acrobat reader 7.0 или выше.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 133
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 18.11.09 16:53. Заголовок: Спасибо Григорий, се..


Спасибо Григорий, сейчас посмотрю.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 134
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 20.11.09 13:29. Заголовок: Все бы хорошо, но по..


Все бы хорошо, но после второго вызова функции просмотра PDF файла получаю ошибку:

DOGOVOR - oбнapужeнa oшибкa. Пpилoжeниe будeт зaкpытo.
Пpинocим извинeния зa нeудoбcтвa.

Дополнительные сведения:

Пoдпиcь oшибки
AppName dogovor.exe AppVer 1.1.1.2 ModName: unknown
ModVer 0.0.0.0 Offset: 76b03864


В чем подвох?
P.S. Акробат 8.0 стандарт.

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




Пост N: 1101
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 21.11.09 21:37. Заголовок: Сергей Р пишет: пос..


Сергей Р пишет:

 цитата:
после второго вызова функции просмотра PDF файла получаю ошибку


Сергей
Обратите внимание на освобождение ресурсов, которое в приведенном примере выполняется так
...
ON RELEASE fCloseActivex()




Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 135
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 24.11.09 15:26. Заголовок: Григорий, вот пример..


Григорий, вот пример, где вылезает ошибка. Тупо взял 2 файла из примера в MiniGUI, вызываю из окна и получаю ошибку
w.pdf возьми любой.
Windows XP Prof SP3
MiniGUI 1.6 Extended Edition (Build 67) - 2009.05.14
Harbour в поставке MiniGUI

В чем подвох?

#include "minigui.ch"
STAT oWActiveX
STAT oActiveX
Procedure Main
fPDF := "w.pdf"
DEFINE WINDOW Win_1 ;
AT 0,0 ;
WIDTH 400 ;
HEIGHT 400 ;
TITLE 'Demo' ;
MAIN

DEFINE MAIN MENU

POPUP "&Вызов"
MenuItem 'PDF' Action PDFReader(fPDF)
MenuItem 'Exit' Action Win_1.Release
END POPUP
END MENU

END WINDOW
ACTIVATE WINDOW Win_1
Return

DECLARE WINDOW FORMPDFReader

********************
FUNC PDFReader(fPDF)

SET NAVIGATION EXTENDED

DEFINE WINDOW FORMPDFREADER ;
AT 0, 0 ;
WIDTH 800 HEIGHT 550 ;
TITLE "PDF Reader" ;
ICON 'ADOBE.ICO' ;
ON INIT fOpenActivex(fPDF) ;
ON SIZE Ajust() ;
ON MAXIMIZE Ajust() ;
ON RELEASE fCloseActivex()

END WINDOW

FORMPDFREADER.Center()
FORMPDFREADER.Activate()

RETU NIL
********************
Static Procedure fOpenActivex(fPDF)
LOCAL cPDF

*cPDF := "Criar Email Sapo.pt.PDF"
cPDF := fPDF

IF FILE(cPDF)
oWActiveX := TActiveX():New(ThisWindow.Name, ;
"AcroPDF.PDF.1", ;
0, ;
0, ;
GetProperty(ThisWindow.Name, "width") - 02 * GetBorderWidth() - 1 , ;
GetProperty(ThisWindow.Name, "height") - 05 * GetBorderHeight() - ;
GetTitleHeight() - ;
GetMenuBarHeight() )

oActiveX := oWActiveX:Load()
oActiveX:LoadFile(cPDF)
ELSE
MsgStop("Отсканированный документ не найден")
FORMPDFREADER.Release()
ENDI

Return
********************
STAT FUNC fCloseActivex()

IF VALTYPE(oWActiveX) <> "U"
oWActiveX:Release()
ENDIF

RETU NIL
********************
Static Procedure ajust()

oWActiveX:Adjust()

Return
********************

#include "hbclass.ch"

#ifndef __XHARBOUR__
#xcommand TRY => bError := errorBlock( {|oError| break( oError ) } ) ;;
BEGIN SEQUENCE
#xcommand CATCH [<!oError!>] => errorBlock( bError ) ;;
RECOVER [USING <oError>] <-oError-> ;;
errorBlock( bError )
#endif

CLASS TActiveX
DATA oOle
DATA hWnd
DATA cWindowName
DATA cProgId
DATA nRow
DATA nCol
DATA nWidth
DATA nHeight
DATA nOldWinWidth
DATA nOldWinHeight
DATA bHide INIT .F.
METHOD New( cWindowName, cProgId , nRow , nCol , nWidth , nHeight )
METHOD Load()
METHOD ReSize( nRow , nCol , nWidth , nHeight )
METHOD Hide()
METHOD Show()
METHOD Release()
METHOD Refresh()
METHOD Adjust()
METHOD GetRow()
METHOD GetCol()
METHOD GetWidth()
METHOD GetHeight()
ENDCLASS

METHOD New( cWindowName , cProgId , nRow , nCol , nWidth , nHeight ) CLASS TActiveX
if( empty( nRow ) , nRow := 0 , )
if( empty( nCol ) , nCol := 0 , )
if( empty( nWidth ) , nWidth := GetProperty( cWindowName , "width" ) , )
if( empty( nHeight ) , nHeight := GetProperty( cWindowName , "Height" ) , )
::nRow := nRow
::nCol := nCol
::nWidth := nWidth
::nHeight := nHeight
::cWindowName := cWindowName
::cProgId := cProgId
::nOldWinWidth := GetProperty( cWindowName , "width" )
::nOldWinHeight := GetProperty( cWindowName , "Height" )
Return Self

METHOD Load() CLASS TActiveX
local oError, bError
local nHandle := GetFormHandle(::cWindowName)
local xObjeto
local OCX_Error := 0
AtlAxWinInit()
::hWnd := CreateWindowEx( nHandle, ::cProgId )
MoveWindow( ::hWnd , ::nCol , ::nRow , ::nWidth , ::nHeight , .t. )
xObjeto := AtlAxGetDisp( ::hWnd )
TRY
::oOle := CreateObject( xObjeto )
CATCH
MsgInfo( oError:description )
END
RETURN ::oOle

METHOD ReSize( nRow , nCol , nWidth , nHeight ) CLASS TActiveX
if !::bHide
MoveWindow( ::hWnd , nCol , nRow , nWidth , nHeight , .t. )
endif
::nRow := nRow
::nCol := nCol
::nWidth := nWidth
::nHeight := nHeight
::nOldWinWidth := GetProperty( ::cWindowName , "width" )
::nOldWinHeight := GetProperty( ::cWindowName , "Height" )
RETURN .T.

METHOD Adjust() CLASS TActiveX
Local nAuxRight , nAuxBottom
nAuxRight := ( ::nOldWinWidth - ( ::nWidth + ::nCol ) )
nAuxBottom := ( ::nOldWinHeight - ( ::nHeight + ::nRow ) )
MoveWindow( ::hWnd , ::nCol , ::nRow , GetProperty( ::cWindowName , "width" ) - ::nCol - nAuxRight , GetProperty( ::cWindowName , "height" ) - ::nRow - nAuxBottom , .t. )
::nWidth := GetProperty( ::cWindowName , "width" ) - ::nCol - nAuxRight
::nHeight := GetProperty( ::cWindowName , "height" ) - ::nRow - nAuxBottom
::nOldWinWidth := GetProperty( ::cWindowName , "width" )
::nOldWinHeight := GetProperty( ::cWindowName , "Height" )
RETURN .T.

METHOD GetRow() CLASS TActiveX
RETURN ::nRow

METHOD GetCol() CLASS TActiveX
RETURN ::nCol

METHOD GetWidth() CLASS TActiveX
RETURN ::nWidth

METHOD GetHeight() CLASS TActiveX
RETURN ::nHeight

METHOD Hide() CLASS TActiveX
MoveWindow( ::hWnd , 0 , 0 , 0 , 0 , .t. )
::bHide := .T.
RETURN .T.

METHOD Show() CLASS TActiveX
MoveWindow( ::hWnd , ::nCol , ::nRow , ::nWidth , ::nHeight , .t. )
::bHide := .F.
RETURN .T.

METHOD Release() CLASS TActiveX
DestroyWindow( ::hWnd )
AtlAxWinEnd()
RETURN .T.

METHOD Refresh() CLASS TActiveX
::Hide()
::Show()
RETURN .T.


#pragma BEGINDUMP

#include <windows.h>
#include <commctrl.h>
#include <hbapi.h>
#include <hbvm.h>
#include <hbstack.h>

typedef HRESULT ( WINAPI *LPAtlAxWinInit ) ( void );
typedef HRESULT ( WINAPI *LPAtlAxGetControl ) ( HWND hwnd, IUnknown** unk );

HMODULE hAtl = NULL;
LPAtlAxWinInit AtlAxWinInit;
LPAtlAxGetControl AtlAxGetControl;

static void _Ax_Init( void )
{
if( ! hAtl )
{
hAtl = LoadLibrary( "Atl.Dll" );
AtlAxWinInit = ( LPAtlAxWinInit ) GetProcAddress( hAtl, "AtlAxWinInit" );
AtlAxGetControl = ( LPAtlAxGetControl ) GetProcAddress( hAtl, "AtlAxGetControl" );
( AtlAxWinInit )();
}
}

HB_FUNC( ATLAXWININIT )
{
_Ax_Init();
}

HB_FUNC( ATLAXWINEND )
{
if( hAtl )
FreeLibrary( hAtl );
}

HB_FUNC( ATLAXGETDISP ) // hWnd -> pDisp
{
IUnknown *pUnk;
IDispatch *pDisp;
_Ax_Init();
AtlAxGetControl( (HWND)hb_parnl( 1 ), &pUnk );
pUnk->lpVtbl->QueryInterface( pUnk, &IID_IDispatch, ( void ** ) &pDisp );
hb_retnl( (LONG)pDisp );
}

HB_FUNC_STATIC( CREATEWINDOWEX ) // hWnd, cProgId -> hActiveXWnd
{
HWND hControl;
hControl = CreateWindowEx( 0, "AtlAxWin", hb_parc( 2 ),
WS_VISIBLE|WS_CHILD, 0, 0, 0, 0, (HWND)hb_parnl( 1 ), 0, 0, NULL );
hb_retnl( (LONG) hControl );
}

#pragma ENDDUMP


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 136
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 26.11.09 10:08. Заголовок: Люди помогите, работ..


Люди помогите, работа стоит. Что делать с этой байдой?
Поставить черный крест и забыть как страшный сон?

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




Пост N: 1108
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 26.11.09 11:17. Заголовок: Сергей Р пишет: Что..


Сергей Р пишет:

 цитата:
Что делать с этой байдой?


Сергей!
Есть альтернатива этому примеру - использовать demo4.prg из папки samples\Basic\ActiveX.

Скрытый текст

Этот пример гарантированно работает с Acrobat 7.0 (проверял на WinXP Home SP1).

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 137
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 26.11.09 11:27. Заголовок: Спасибо Григорий, ща..


Спасибо Григорий, щас попробую.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 138
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 26.11.09 13:58. Заголовок: Григорий выручай, пр..


Григорий выручай, при сборке выдает:
Unresolved external "_hb_ storvnl" referenced from ......
Не могу понять, какой библиотеки не хватает?

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




Пост N: 1110
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 26.11.09 14:26. Заголовок: Сергей Р пишет: как..


Сергей Р пишет:

 цитата:
какой библиотеки не хватает?


Дело не в библиотеке - надо просто обновить Харбор

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 139
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 26.11.09 14:39. Заголовок: Теперь выдает : Unre..


Теперь выдает :
Unresolved external '_hb_vmProcessSymbolsEx' referenced from ... и
Unresolved external '_dummy' ...


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




Пост N: 1111
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 26.11.09 15:13. Заголовок: Сергей Р пишет: Теп..


Сергей Р пишет:

 цитата:
Теперь выдает :


Не мучайся, а просто обновись до свежей сборки 77 и пробни на ней

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 140
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 26.11.09 15:34. Заголовок: Поставил 77 сборку. ..


Поставил 77 сборку. Те же две неразрешенные _hb_vmProcessSymbolsEx и _dummy.


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




Пост N: 1112
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 26.11.09 15:51. Заголовок: Сергей Р пишет: две..


Сергей Р пишет:

 цитата:
две неразрешенные _hb_vmProcessSymbolsEx и _dummy


Значит, остался в проекте код, который НЕ был откомпилирован обновленным Харбором (в виде OBJ или пользовательской библиотеки).
Нужно пересобрать ВСЕ исходники

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 141
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 26.11.09 16:08. Заголовок: Спасибо Григорий, по..


Спасибо Григорий, помогло. Дальше буду разбиться почему не показывает файл.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 142
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 27.11.09 15:35. Заголовок: Григорий, напомни по..


Григорий, напомни пожалуста какой функцией узнать полный путь к файлу в текущей директории. Досовская dirname() режет длинные имена.

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




Пост N: 1113
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 27.11.09 16:18. Заголовок: Сергей Р пишет: как..


Сергей Р пишет:

 цитата:
какой функцией узнать полный путь к файлу в текущей директории


Попробуй
cPath := DISKNAME()+':\'+Curdir()



Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 143
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 27.11.09 16:49. Заголовок: Путь получается тако..


Путь получается такой:
C:\DOCUME~1\SERGST~1\0016~1\CF8F~1\007
что не есть хорошо.
Тоже самое как и dirname()

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




Пост N: 1114
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 27.11.09 17:21. Заголовок: Сергей Р пишет: Тож..


Сергей Р пишет:

 цитата:
Тоже самое как и dirname()


Хорошо
Тогда так
cCurDir := GetCurrentFolder()


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 144
Зарегистрирован: 02.02.06
ссылка на сообщение  Отправлено: 30.11.09 13:09. Заголовок: Спасибо Григорий. Фу..


Спасибо Григорий. Функция работает замечательно.
Но у меня получилась какая-то байда.
Если делаю сборку через Compile.Bat, то
C:\Documents and Settings\sergstack\Paбoчий cтoл
а если собираю через xMate, то
C:\DOCUME~1\SERGST~1\0016~1
Где-то не хватает каких-то параметров при сборке что ли.


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 79
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет