| |
|
|
Thomas Freier | Versuche gerade mit Uwe Pascals ocx-Beispielen [...] den Acrobat Reader einzubinden. Geht, aber z.Z. nur mit der Version 5.1 [...] Verschiedene Hinweise, die besagen, dass die pdf.ocx ausreiche. Konnte ich noch nicht nachvollziehen. Das eigentliche Problem ist, wenn fremde Fenster über dem Beispiel verschoben werden, bleiben mal mehr oder weniger graue Bereiche erhalten. Ich bekomme einfach keinen automatischen refresh hin. Vom Blue Screen bis zum Einfrieren des PCs beim Ausprobieren mit den hier gefunden Beispielen alles gehabt. KompilierenMarkierenSeparieren $H Windows.ph
$H ocx2.ph
$I ocx2.inc
Windowstyle 538
var hParent& = @Create(Window, 0, OCX-Test, 1,1,%maxx-38,%maxy-38)
usermessages 16
var File$=loadfile$(Bitte Bild wählen,*.pdf)
casenot len(File$):end
ocxInit()
declare Control&
var Object&=ocxCreate({CA8A9780-280D-11CF-A24D-444553540000}, hParent&,1,1,(%maxx-90),(%maxy-78),$50800000,addr(Control&))
ocxMethod(Object&,LoadFile,*+File$)
ocxMethod(Object&,setShowToolbar,0)
ocxMethod(Object&,setShowScrollbars,1)
ocxMethod(Object&,setZoom,300)
while 1
GetMessage
waitinput
case %umessage=16:break
@Showwindow(%hwnd,0)
endwhile
ocxRelease(Object&)
destroywindow(Control&)
ocxDeInit()
|
|
|
| |
|
|
|
| Nur um die Fehlerfindung etwas vorran zu bringen wuerde ich unbedingt hierfuer erstmal auf loadFile verzichten, weil genau dieses mir ziemlich viel herumzuwuehlen scheint.
Und dann ist da leider(!) noch das XProfan11-OCX-Package-Problem wegen der nicht immer gleichbleibenden Adressen von Variablen. |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hallo Thomas!
Ganz auf die Schnelle: KompilierenMarkierenSeparieren Nicht sehr elegant wegen GetMessage ; besser wäre wohl SubClassing. Werde ich nacher mal testen.
@iF: ocx + XProfan11: Ich arbeite daran (ich weiß, das sage ich jedesmal :notme
SeeYou Pascal |
|
|
| |
|
|
|
| Uwe Pascal Niemeier
@iF: ocx + XProfan11: Ich arbeite daran (ich weiß, das sage ich jedesmal :notme
Ich glaub Dir das aufs Wort, kenne ich das ja von mir das manche scheinbar garnicht so schwierigen Dinge sich aber dann doch einfach laenger hinziehen.
Versuchst das umzuschreiben auf z.B. globalalloc-Speicher-Adressen?
Wenn ich helfen kann! |
|
|
| |
|
|
|
Thomas Freier | Hallo Pascal,
die Lösung sieht schon besser aus. Danach habe ich gesucht und nicht gefunden. Hatten wir das nicht schon damals mit der Adress-RTF und dem übergelegten Bild in der Ansicht? Optimal ist es von meiner Seite noch nicht, da ich ein Fenster als Lineal auf das vorhandene lege. Dieses aber beim zeilenweisen Verschieben immer den Focus hat (der Stift bleibt drauf). Mal sehen ob ich in einer Schleife mit Timer den WM_PAINT alle paar Millisekunden auslöse. Ein größeres Problem habe ich bei der Umschaltung vom Hand- in den Textauswahl-Modus. Per Tastatur ist es kein Problem aber über SendKey(%,%). Muß das irgendwie über ocxGet oder ocxPut oder .... erfolgen? Ausschnitt: KompilierenMarkierenSeparierenWindowstyle 82
var hChild& = @Create(Window, hParent&, , 0, 0, (%maxx-60), 38)
while 1
GetMessage
case %message=15:~RedrawWindow(Control&,0,0,$485)--WM_PAINT
case %umessage=16:break
If (%message=$201) & GetFocus(hChild&)
UseCursor 5
SendMessage(hChild&,$112,$F012,0)
UseCursor 0
G2l hParent&
SetWindowPos %HWnd = 0,@G2ly() - 660,38;0
SetFocus(Object&)
~InvalidateRect(%hwnd, 0, 0)
~UpdateWindow(%hwnd)
endif
If GetFocus(icon5&)
@SetActiveWindow(Control&)
SendKey(0,$A4) Alt
SendKey(0,$56) V = Textauswahl
SendKey(0,$56)
EndIf
@Showwindow(%HWND,0)
~RedrawWindow(Control&,0,0,$485)
endwhile
|
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hi Leute!
iF
Versuchst das umzuschreiben auf z.B. globalalloc-Speicher-Adressen?
Soweit bin ich noch garnicht Aber: Die Objekte selbst werden ja von Windows bereitgestellt ; außer da, wo Parameter übergeben werden, gibts nicht viel umzuschreiben. Habe aber schon gemerkt, daß XProfan 11 empfindlicher auf Speicher/Zugriffsfehler reagiert als die 10er. Werde dafür wohl back to the roots gehen müssen.
@ Thomas: Mail müßte inzwischen eingetroffen sein. In der pdf.ocx scheint die gewünschte Funktion jedenfalls nicht drin zu sein. Und das Problem mit der AcroRd32.dll ist, daß das die darin enthaltenen Objekte/Interfaces nicht unter Windows registriert sind. Es muß irgendeine Möglichkeit geben, zur Laufzeit da ranzukommen...
SeeYou Pascal |
|
|
| |
|
|
|
Thomas Freier | Bin ein Stück weiter gekommen. Das Lineal wird eine extra Lineal.exe. Fest hänge ich dabei, einen markierten Text in die Zwischenablage für die Sprachausgabe zu kopieren. Die *.prf läuft nur mit XProfan 10. Die exe getestet mit Acrobat Reader 5, 8 und 9. Die Änderung der Werkzeuge ist versionsabhängig und kann mit Rechtsklick eigestellt werden. |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hallo Thomas!
Was deine Probleme mit der Fernsteuerung des Adobe-Controls betrifft: Dieses Control besteht seinerseits aus einer ganzen Reihe von verschachtelten Fenstern; ein einfaches SendString oder SendKey ans Handle des Controls reicht da nicht. Zuvor muß ermittelt werden, wecher Teil des eingebetteten Adobe-Fensters genau angesprochen werden soll: KompilierenMarkierenSeparierenwindow 10,10-755,500
usermessages 16
$H Windows.ph
$H ocx2.ph
$I ocx2.inc
ocxInit()
declare Control&,PageView&
var Object&=ocxCreate(AcroPDF.PDF,%hwnd,10,10,350,350,$50840000,addr(Control&))
var Edit&=create(multiedit,%hwnd,,385,10,350,350)
var Copy&=create(button,%hwnd,>>>,350,380,50,20)
ocxMethod(Object&,loadfile,*C:TEXT.pdf)******* Pfad bitte anpassen! *****
proc EnumChildProc-----------------EnumChildProc
parameters wnd&
if gettext$(wnd&)=AVPageView--kann versionsabhängig sein!
PageView&=wnd&
return 0
endif
return 1
endproc-----------------------------------------
settimer 200---AVPageView wird erst bei laden der PDF erstellt
whileloop 0,9--Darum warten und mehrmals nachfragen
waitinput
~EnumChildWindows(Control&,procaddr(EnumChildProc,2),0)
case PageView&:break
endwhile
killtimer
while 1
waitinput
case %umessage=16:break
if clicked(Copy&)
setfocus(PageView&)
sendstring(PageView&,^c)---STRG + c
settext Edit&,getclip$()
endif
endwhile
ocxRelease(Object&)
destroywindow(Control&)
ocxDeInit()
Getestet unter Adobe Reader 8 und 9. BTW: Version 9 bleibt nach Ende des Profan-Progs auch nicht mehr im Speicher hängen
HTH Pascal |
|
|
| |
|
|
|
Thomas Freier | Danke Pascal! Damit sind wir ja mit deiner ocx den unter VB und Delphi gefundenen Beispielen meilenweit voraus. Werde nun auch den Reader 9 einsetzen. Beim 8er war noch interessant: wurde ein Text markiert und der Mauszeiger blieb überm Text, öffnete sich nach kurzer Zeit ein Tooltip und wurde dieser angesteuert, erschien ein Button zum Kopieren in die Zwischenablage. Den Acrobat 9 habe ich getestet (der braucht 2000 MB!) und keine der gesuchten ocx-Funktionen gefunden. Vielleicht hat die 30 Tage Version Einschränkungen. Ärgerlich ist, dass Adobe je nach Reader Version unterschiedliche Tastaturbefehle für ein und die selbe Funktion hat. |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hi Thomas!
Das wichtigste Objekt, daß der Acrobat mitbringt, heißt AcroExch.App Such mal mit dem OLE/COM Interface Generator im Bereich ProgID
Im Web findet man oft Demos wie dies:
Dim AcroExchApp As Object Set AcroExchApp = CreateObject(AcroExch.App) AcroExchApp.Show
(Am Besten mal danach googeln) Weiß aber nicht, ob dieses CreateObject mit der bei ocx verwendeten Funktion identisch/kompatibel ist.
Damit sind wir ja mit deiner ocx den unter VB und Delphi gefundenen Beispielen meilenweit voraus.
So muß das ja auch sein
SeeYou Pascal |
|
|
| |
|
|