PDF Vorschau im Hybrid-Modus

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
edvpr
Rookie
Rookie
Beiträge: 8
Registriert: Di, 08. Nov 2011 11:16
Wohnort: 47623 Kevelaer

PDF Vorschau im Hybrid-Modus

Beitrag von edvpr »

Hallo,
ich werde noch eine Weile im Hybrid-Modus arbeiten müssen.
Dabei habe ich folgendes Problem:
In einem Formular (noch mit @... say und @..get erstellt) kann ich per Tastendruck oder Mausklick einen Datensatz vor oder zurückspringen und bekomme diesen angezeigt.
Zu jedem Datensatz gehört eine PDF-Datei, die ich als Miniatur im Formular ausgeben möchte. Also muss beim skip auch ein neues PDF angezeigt werden.
Hierzu habe ich mir Edgar Borgers XppPDF angesehen.
Aber 1.) kommt es im XbpCrt-Fenster zum Fehler "Parameter hat falschen Typ"
2.) Sieht es mir so aus, als wenn ich jedes PDF erst per Mausklick schließen muss, bevor ich weiterarbeiten kann.

Wer hat hat eine Idee?

Gruß
Peter Rosenkranz
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PDF Vorschau im Hybrid-Modus

Beitrag von brandelh »

Wenn du den PDF Reader nutzt, muss dieser geschlossen sein bevor er neue PDFs anzeigt.
Es gibt andere Reader, aber ich meine die verhalten sich in diesem Punkt alle gleich.

Wenn Edgars Klasse auf einen Presentationspace rendern kann, kannst du dir ein zusätzliches Dialogfenster (XbpCrt oder XbpDialog) erstellen,
das (compiliert mit GUI = YES) den Inhalt auf das Fenster rendert.
QuickPDF kann das auf jeden Fall (HBPrintPDF als Zugriffsklasse) und Edgar nutzt deren DLL.

Ansonsten könntest du noch das jeweils aktive Fenster schließen (über den Namen des Titels, suche nach Fenster oder Programm schließen).
Und das nächste nach einer kurzen Pause aufrufen. Allerdings wird das Blättern so sehr langsam, eventuell ist es besser
nur den Namen, Größe, Datum automatisch anzuzeigen und den Rest per Benutzeraktion (Funktionstaste etc.) ...
Aber 1.) kommt es im XbpCrt-Fenster zum Fehler "Parameter hat falschen Typ"
Bitte immer mit dem Code nennen, dann kann man eher helfen ;-)
Eventuell liefert SetAppWindow() nil zurück ?
Gruß
Hubert
edvpr
Rookie
Rookie
Beiträge: 8
Registriert: Di, 08. Nov 2011 11:16
Wohnort: 47623 Kevelaer

Re: PDF Vorschau im Hybrid-Modus

Beitrag von edvpr »

Ich habe nun erst einmal nach dem "Parameter hat falschen Typ" gesucht und bin teilweise fündig geworden.

Code: Alles auswählen

PROCEDURE Test
LOCAL oPDF
SetAppWindow() :setTitle ("Kalkulation")
cls
@ 5,5 say "Test"
use artick
oPdf := XbpPDF():New() // Initializes the PDF object
oPdf:Create( ) // Creates the ViP object
oPdf:View( "Demo.PDF" ,20,.F.,,,{600,10},{500,400},.F.) // Views the loaded PDF on screen
oPdf: Destroy()
return
führt zu folgendem Fehler:

------------------------------------------------------------------------------
FEHLERPROTOKOLL von "E:\XBase neu\PRFAKT.EXE" Datum: 31.10.2012 08:24:33

Xbase++ Version : Xbase++ (R) Version 1.90.355
Betriebssystem : Windows 7 06.01 Build 07601 Service Pack 1
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE:
-> VALTYPE: N VALUE: 52
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: J
oError:cargo : NIL
oError:description : Parameter hat falschen Typ
oError:filename :
oError:genCode : 2
oError:operation : < > - <52>
oError:osCode : 0
oError:severity : 2
oError:subCode : 3
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Aufgerufen von XBPPDF:VIEW(6133)
Aufgerufen von TEST(13)
Aufgerufen von MENUDISPATCHER(397)
Aufgerufen von (B)CREATEMENUSYSTEM(148)
Aufgerufen von MAIN(72)


Aber: Rufe ich eine andere Datenbank auf, wird dieser Fehler nicht provoziert.
Erst wenn ich die Ursache hierfür gefunden habe, kann ich weiter Lösungsansätze verfolgen.

Gruß
Peter
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PDF Vorschau im Hybrid-Modus

Beitrag von brandelh »

Ich vermute, dass
Aufgerufen von TEST(13) der Zeile oPdf:View( "Demo.PDF" ,20,.F.,,,{600,10},{500,400},.F.) // Views the loaded PDF on screen entspricht,
dann wäre Aufgerufen von XBPPDF:VIEW(6133) innerhalb der XbpPDF Klasse !

Ich habe jetzt keine Dokumentation von XbpPDF zur Hand, aber vermutlich fehlt ein Parameter oder es wurde ein Komma zuviel angegeben ;-)
Auf die Datei selbst wird aber gar nicht zugegriffen, also sollte diese keinen Einfluß haben ...

PS: es ist nützlich bei Fragen zu Fehlermeldungen die Zeile zu markieren, die der Zeilennummer entspricht die erwähnt wird.
Im Browser haben Sie nämlich keine Zeilennummer. Ebenso sollte man Funktionen mit Parameterbeschreibung zitieren, wenn
die Funktion von einer Zusatzbibliothek ist.
Gruß
Hubert
edvpr
Rookie
Rookie
Beiträge: 8
Registriert: Di, 08. Nov 2011 11:16
Wohnort: 47623 Kevelaer

Re: PDF Vorschau im Hybrid-Modus

Beitrag von edvpr »

Mit der Programmzeile liegst Du richtig.

Aber was passiert da.
Und vor allem, warum nur dann, wenn vor dem Erstellen des XbpPDF-Obejekts die Datenbank Artick.DBF samt DBT geöffnet wird, selbst dann, wenn die Datenbank keinen Datensatz enthält?
Warum darf ich eine beliebige andere Datenbank öffnen, und der Fehler tritt nicht auf?
Daher glaube ich nicht, dass ein Parameter nicht richtig angegeben ist.

Aber hier noch der Auszug aus der Dokumentation:

3.2 View & Print
3.2.1 Intro
This class was created to fill a need to Xbase++ users around the world, as noted by the many
threads existing in the Xbase News Group about viewing and printing PDF files from Xbase++
applications.
This is a very simple class with very little effort in terms of programming, of course implementing
it will require code changes, but the benefits are worth it.
An example of a simple programwould be :
PROCEDUREMAIN
pdf := PdfViP():New() // Initializes the PDF object
pdf:Create( ) // Creates the ViP object
pdf:View( "Demo.PDF" ) // Views the loaded PDF on screen
pdf:Print( "Demo.PDF" ) // Prints the file to any windows printer
pdf:Destroy() // Terminates and release resources
return
3.2.2 View
View( cFileName, [nZoom], [lMaximize], [oParent], [oOwner], [aPos], [aSize],
[lModal], [lNoPrint], [nIPag] ) => Show's the previous loaded file on the screen.
cFileName (character) : full filename of PDF file (including path, if not in current folder)
nZoom (numerical) : the initial zoom setting for viewing the pdf, any number higher than 0,
100 is 100 %, default is 100%.
lMaximize (logical) : show in full screenmode (default), or normalwindow
oParent (object) : is the parent dialog for the preview window, default is AppDesktop
42 XbasePDF Class
Softsupply Informatica, 2006
oOwner (object) : is the owner dialog for the preview window, default is AppWindow
aPos (array) : position for the preview window, default is owner center
aSize (array) : Size of preview window, default is owner size
lModal (logic) : Opens the preview window in Modal mode, in this case oParent must be
AppDesktop
lNoPrint (logic) :Don't display the "Print" button in the preview window
nIPag (numeric) : Initial page number to display, defaults to 1.


Wobei ich im Bespiel PdfViP() nicht verstehe, weil das Linken wegen des Fehlens dieser Funktion abbricht.
Die LIB ist aber eingebunden (sonst würde der Rest ja auch nicht gehen).

Gruß
Peter
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PDF Vorschau im Hybrid-Modus

Beitrag von brandelh »

edvpr hat geschrieben: Und vor allem, warum nur dann, wenn vor dem Erstellen des XbpPDF-Obejekts die Datenbank Artick.DBF samt DBT geöffnet wird,
selbst dann, wenn die Datenbank keinen Datensatz enthält?
Warum darf ich eine beliebige andere Datenbank öffnen, und der Fehler tritt nicht auf?
die einzige Erklärung die mir dazu einfällt ist, dass in XbpPDF intern eine PRIVATE / PUBLIC Variable genutzt wird, die den gleichen Namen wie eines deiner Datenbankfelder besitzt.
Ein FELDNAME geht vor einem MEMVAR Namen und somit knallt es, denn das Feld ist wohl von einem anderen Typ als erwartet ;-)

Du kannst ja mal nach "verdächtigen" Namen suchen und die Felder eines nach dem anderen weglassen bis der Fehler nicht mehr auftritt.
Wenn es so ist, könnte man eventuell beim compilieren mit dem Parameter /v den Fehler ausgleichen, ob das aber auch bei DLLs geht weiß ich nicht.

In diesem Falle sollte Edgar die MEMVAR als Instanzvariable oder LOCAL declarieren und alles wäre OK.
/v Nicht deklarierte Variablen als MEMVAR behandeln
Der Compiler behandelt nichtdeklarierte Variablen ohne vorangestellten Aliasnamen standardmäßig als Feldvariablen. Durch den Schalter /v referenziert der Compiler die undeklarierten Variablen als dynamische Speichervariablen. Dadurch bekommen diese Variablen den Aliasnamen MEMVAR->.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: PDF Vorschau im Hybrid-Modus

Beitrag von Jan »

Edgar programmiert fast ausschließlich mit PUBLICs.

Ansonsten kann ich nur empfehlen, Edgar anzumailen. Er ist immer sehr schnell sehr hilfreich. Aber daran denken: Der sitzt in Brasilien, da gibt es also eine enorme Zeitverschiebung.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PDF Vorschau im Hybrid-Modus

Beitrag von brandelh »

Edgar programmiert fast ausschließlich mit PUBLICs.
Für Bibliotheken insbesondere in DLL Form ein absolutes NO GO :!:

Zur Hilfe bei Parametern schreibe ich das gerne so, schließlich hat man nicht immer alle Parameter im Kopf ;-)

Code: Alles auswählen

View( cFileName, [nZoom], [lMaximize], [oParent], [oOwner], [aPos] , [aSize] , [lModal], [lNoPrint] , [nIPag] ) => Show's the previous loaded file on the screen.
View( "Demo.PDF",  20   ,     .F.    ,          ,         ,{600,10},{500,400},  .F.  ) // Views the loaded PDF on screen
die Parameter seinen ok zu sein, wobei die Funktion AppWindow() als default für oOwner nicht im Handbuch steht, wahrscheinlich meint er aber SetAppWindow() ... auch OK.
oParent (object) : is the parent dialog for the preview window, default is AppDesktop <= das kenne ich AppDesktop()
oOwner (object) : is the owner dialog for the preview window, default is AppWindow <= das gibt es nicht, muss eine Programmfunktion sein ... oder SetAppWindow()
Gruß
Hubert
edvpr
Rookie
Rookie
Beiträge: 8
Registriert: Di, 08. Nov 2011 11:16
Wohnort: 47623 Kevelaer

Re: PDF Vorschau im Hybrid-Modus

Beitrag von edvpr »

Bevor ich 86 Datenbankfelder einzeln lösche, habe ich erst einmal die komplette Datenbank aus dem Code herausgenommen und stoße nun auf ein ganz anderes Problem:

Code: Alles auswählen

oDialog := XbpDialog():new( ,,{600,10},{500,400})
oDialog : create()

oPdf := XbpPDF():New() // Initializes the PDF object
oPdf:Create( ) // Creates the ViP object
oPdf:View( "Demo.PDF" ,20,.F.,oDialog,,{0,0},{500,400},.F.) // Views the loaded PDF on screen
oPdf: Destroy()

oDialog: Destroy()
Warum ich das Dialog-Objekt sofort wieder zerstöre?
Weil ich wissen will, ob ich es zerstören kann.
Kann ich aber nicht, weil ich die Vorschau erst per Mausklick schließen muss.
Das widerspricht meinem Gedanken, in der Datenbank zu Blättern.
Verrenne ich mich irgendwo?
Gruß
Peter
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: PDF Vorschau im Hybrid-Modus

Beitrag von brandelh »

Wenn das Fenster einen BUTTON zum Beenden hat und sonst nichts in der Anleitung steht, scheint das so vorgesehen zu sein.
Grundsätzlich kann dir das aber EDGAR am Besten beantworten ;-)
Im Prinzip bräuchtest du eine Funktion, die auf ein XbpStatic() den Inhalt rendert (QuickPDF kann sowas prinzipiell und Edgar nutzt diese).
Im MDI-Beispiel wird sowas mit bitmaps gezeigt.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: PDF Vorschau im Hybrid-Modus

Beitrag von AUGE_OHR »

edvpr hat geschrieben:Kann ich aber nicht, weil ich die Vorschau erst per Mausklick schließen muss.
ist das ein "Button" oder "X" rechts-oben ?
per Windows API kann man auch an "externe" Fenster / Childs ein WM_CLOSE oder WM_QUIT senden

wenn es ein Xbase++ Fenster ist "sollte" es auf

Code: Alles auswählen

PostAppEvent(xbeP_Close,,,oPdf)
oder
PostAppEvent(xbeP_Quit,,,oPdf)
reagieren.
edvpr hat geschrieben:Das widerspricht meinem Gedanken, in der Datenbank zu Blättern.
Verrenne ich mich irgendwo?
"blättern" ... Liste -> Browse -> o:stable / o:stableBlock

solange du "navigierst" im Browse würde ich keine weiter Anzeige vornehmen. Erst wenn er "stabil" ist erfolgt eine Aktion.
ob es "Sinn" macht PDF "so" anzuzeigen lasse ich mal offen ... reicht nicht ein Thumbnail vom PDF ?
gruss by OHR
Jimmy
edvpr
Rookie
Rookie
Beiträge: 8
Registriert: Di, 08. Nov 2011 11:16
Wohnort: 47623 Kevelaer

Re: PDF Vorschau im Hybrid-Modus

Beitrag von edvpr »

Vielen Dank für eure Antworten.
Ich hatte zwischendrin Eiligeres zu tun.

@brandelh:
Die MDI-Demo tut genau, was ich will: beim Blättern ein Bild anzeigen. Leider liegen meine Zeichnungen als PDF vor.
Beim Versuch, EDGAR über die im Manual von XppPDF angegebene Adresse anzumailen schlug leider fehl. Da bräuchte ich mal eine gültige Adresse.
@AUGE_OHR:
Natürlich suche ich den Satz mit Browse. Nicht auszudenken, was passiert, wenn der Anwender erfährt, dass man hier schon ein Bildchen zeigen könnte.
Doch wenn es dann der falsche Artikel ist, soll geblättert werden, weil dann die Infos beim Browsen nicht ausreichen.
Und ein 20% Thumbnail reicht hier aus. Bei Bedarf kann dann eine Vollansicht mit einem Button gestartet werden.

PostAppEvent () werde ich morgen ausprobieren.

Gruß
Peter
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: PDF Vorschau im Hybrid-Modus

Beitrag von Jan »

edvpr hat geschrieben:Da bräuchte ich mal eine gültige Adresse.
edgar@borger.com.br

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten