Deutsch
Forum

ocx und pdf

 

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()
 
Gruß Thomas
Windows XP SP2, XProfan X2
19.01.2009  
 



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.
 
19.01.2009  
 




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
 
20.01.2009  
 



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!
 
20.01.2009  
 




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:
KompilierenMarkierenSeparieren
Windowstyle 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

 
Gruß Thomas
Windows XP SP2, XProfan X2
20.01.2009  
 




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
 
20.01.2009  
 




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.

337 kB
Hochgeladen:22.01.2009
Ladeanzahl126
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
22.01.2009  
 




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:
KompilierenMarkierenSeparieren
window 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
 
23.01.2009  
 




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.
 
Gruß Thomas
Windows XP SP2, XProfan X2
24.01.2009  
 




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
 
24.01.2009  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.167 Betrachtungen

Unbenanntvor 0 min.
H.Brill25.11.2023
Uwe Lang20.06.2023
Sebald Grandjean11.11.2018
Peter Max Müller22.11.2017
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie