XbpPresSpace - pageSize, viewPort, origin ?

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von georg »

Guten Abend -


mal wieder ein Alaska-Beispiel und eine Reihe fragen dazu. Das PreView-Beispiel erlaubt es, in einem XbpStatic() eine Druckvorschau zu realisieren.

Das klappt deshalb so gut, weil das Vorschau-Objekt das gleiche Seitenverhältnis hat wie die (theoretisch) zu druckende Seite.

Was nun, wenn ich ein quadratisches Vorschau-Objekt haben will, in dem eine DIN A4-Seite dargestellt wird? (Klar, ich muss dann in die eine oder andere Richtung scrollen, aber das nimmt man in dem Fall in Kauf.)

Also etwa so:

Code: Alles auswählen

PPPPPPPP-------------
PPPPPPPP-------------
PPPPPPPP-------------
PPPPPPPP-------------
---------------------
---------------------
---------------------
---------------------
---------------------
---------------------
Die Striche sollen die Seite darstellen, die P den sichbaren Ausschnitt.

Wie realisiert man so etwas?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von Martin Altmann »

Hallo Georg,
das ist doch mit dem Zoomfaktor in dem Beispiel realisiert.
Ich habe hier auch eine Anpassung veröffentlicht - beliebig viele Seiten, anspringbar und einzeln/komplett druckbar.
Hier :arrow: http://www.xbaseforum.de/viewtopic.php? ... d=a#p36025

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von georg »

Guten Morgen, Martin -


werde ich mir gerne anschauen, allerdings muss ich da wohl erst einmal ein wenig "umbauen", da ich XClass nicht einsetze.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von Martin Altmann »

Moin Georg,
ersetze ds durch Xbp, dann kannst du den Compiler anschmeißen. Dann meckert er nur noch einzelne Methoden oder iVars an - diese Zeilen dann einfach löschen. Sollte erst Mal klappen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von DelUser01 »

Hallo Georg

wie Martin schon schreibt kann man das mit dem Zoomfaktor aus dem Alaska-Beispiel heraus realisieren.
Habe meine Print-Vorschau vor einiger Zeit auch daraus weiterentwickelt. Nur das mit dem Verschieben des vergrößerten Bereichs (Balken oder Maus) habe ich nicht - ob das machbar ist? Könnte mir aber vorstellen dass man das anders machen muss. Mit dem Beispiel-Ansatz wäre es vermutlich zu langsam. Das müsste irgendwie "virtuell" gehen - wie in einem Bilder-Viewer.
XClass verwende ich dabei nicht.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von georg »

Hallo,


also ich komme mit dem Zoom-Beispiel in Bezug auf mein Problem nicht klar.

Solange das Verhältnis des XbpPreview-Objektes und des "Papiers" 1:1 ist, passt alles. Aber das XbpPreview-Objekt soll z.B. quadratisch sein und das "Papier" trotzdem DIN A4. Zumindest in meinen Versuchen hat das nicht funktioniert.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von Martin Altmann »

Hallo Georg,
anbei mein überarbeitetes prg - sollte sich jetzt auch ohne XClass++ compilieren lassen.
In Main wird das Dialogfenster gebaut und in FormatPage der Aufbau der Vorschau. Das ist das (auf meine Erweiterung angepasste) Beispiel, das Alaska mitliefert.
Bei mir bleibt das Seitenverhältnis erhalten - man kann aber vergrößern und dann den sichtbaren Ausschnitt verschieben.
Wenn Du mit einem entsprechend kleinen Fenster und großen Standard-Zoomfaktor experimentierst, solltest Du dem schon recht nahe kommen.

Viele Grüße,
Martin
Dateianhänge
Preview.zip
(8.49 KiB) 229-mal heruntergeladen
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von Martin Altmann »

Das Seitenverhältnis im DIN-Format ist immer 1:2^0,5 (1 zu Wurzel aus 2). Du musst also beim Zoomfaktor für Breite und Höhe einen entsprechend unterschiedlichen Faktor anwenden, der dem entgegengesetzt ist. Allerdings natürlich im umgekehrtem Verhältnis ;-)

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
DelUser01

Re: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von DelUser01 »

Hallo Martin

aber wie willst Du den gezoomten Bereich verschieben?
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16501
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von Martin Altmann »

:?: Roland,
ich verstehe deine Frage nicht. Dafür gibt es doch die Bildlaufleisten rechts und unten.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
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: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von AUGE_OHR »

DelUser01 hat geschrieben: Mo, 02. Okt 2017 1:12 aber wie willst Du den gezoomten Bereich verschieben?
mit dem Finger ... wie auch ZOOM ;-)

im Alaska Beispiel gibt es ja Scrollbars welche die Method SetOrigin(x,y) aufruft.
das "malen" passiert im

Code: Alles auswählen

::oView:drawingArea:paint := {|| ::drawPage() }
Touch und Maus arbeiten ähnlich.

verschieben :
LbDown -> aOldPos / move / LbUp -> aNewPos
damit kann ich nun den X und Y Scrollbar ansteuern

zoom:
am einfachsten mit

Code: Alles auswählen

      ::DrawingArea:wheel := {|aPos, aWheel, oSelf| ::_Zoom(aPos, aWheel, oSelf) }
      ::wheel := {|aPos, aWheel, oSelf| ::_Zoom(aPos, aWheel, oSelf) }
nun kann man per Maus-Wheel + Ctrl

Code: Alles auswählen

      IF nKey = MK_CONTROL
         IF nWheel >= 360                        // 65416
            nWheel := -120
         ENDIF
         ::_Zoom(aPos, {nKey,nWheel}, ::DrawingArea )
oder mit 2 Finger -> spreizen um ein ZOOM auszuführen.

... und wer es per API mit ot4xb machen will

Code: Alles auswählen

CLASS DXE_Dialog FROM XbpDialog

   ::hWnd := ::GetHWnd()

#IFDEF Use_Pablo
   ot4xb_SubclassWindow( ::hWnd, Self)

INLINE METHOD WndProc( hWnd , nMsg , wp , lp )
LOCAL aPos   := {0,0}
LOCAL nWheel := 0
LOCAL nKey   := 0

   // here Mouse Wheel Event
   ELSEIF nMsg == WM_MOUSEWHEEL
      nKey   := LoWord(wP)
      nWheel := HiWord(wP)

      aPos[1]:= LoWord(lp)
      aPos[2]:= HiWord(lp)

      IF nKey = MK_CONTROL
         IF nWheel >= 360                        // 65416
            nWheel := -120
         ENDIF
         ::_Zoom(aPos, {nKey,nWheel}, ::DrawingArea )
      ENDIF
   ENDIF
RETURN

#ELSE
   ::DrawingArea:wheel := {|aPos, aWheel, oSelf| ::_Zoom(aPos, aWheel, oSelf) }
   ::wheel := {|aPos, aWheel, oSelf| ::_Zoom(aPos, aWheel, oSelf) }
#ENDIF
gruss by OHR
Jimmy
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: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von brandelh »

Bei meiner Druckerklasse gibt es eine Datei (HBPRINTD.PRG), die als Druckerauswahl (mit/ohne Druckvorschau) dient,
da kannst du sehen wie ich die einzelnen Gra-Funktionen nutze um einmal zu drucken und einmal für die Vorschau (je nach oPS).
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: XbpPresSpace - pageSize, viewPort, origin ?

Beitrag von georg »

Hallo,


erst einmal vielen Dank, zuerst an Martin für die Bereitstellung dieser gut ausgearbeiteten Klasse, sowie die ganzen Hinweise. Ich habe mir die ganzen Methoden, die rund um :zoom() aufgerufen werden, mal angeschaut und habe wieder ein wenig mehr verstanden.

Mal sehen, ob ich das umsetzen kann. Wenn nicht - melde ich mich :D
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten