AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

druckvorschau...

Ein Thema von heiopei · begonnen am 8. Okt 2005 · letzter Beitrag vom 21. Mai 2008
Antwort Antwort
heiopei
(Gast)

n/a Beiträge
 
#1

druckvorschau...

  Alt 8. Okt 2005, 12:08
hallo,

ich hab jetzt seit ca. einem jahr (relativ selten ) an einnem code gebastelt, der stringgrids ausdruckt. dabei werden aber auch zeilenumbrüche berücksichtigt, trennlinien gezeichnet und wenn nötig über mehere seiten gedruckt. so weit so gut - der code funktioniert jetzt fehlerfrei, aber...

jetzt möchte ich für das ganze auch noch eine druckvorschau haben, in der man das zu druckende anschauen kann (zoom und seitenauswahl!!!). also hab ich mir den quellcode von delphi kochbuch 6 mal angeschaut und mich da reingearbeitet. allerdings konnte ich damit nicht wirklich viel anfangen, da der ganze code nur für die darstellung von einer einzigen seite gedacht ist...

ich würde das problem gern so lösen:
- zeichnen auf ein canvas mit den selben einstellungen wie printer.canvas (schrift, breite, höhe...)
- und dieses dann im entspr. maßstab auf das windowsfenster ausgeben

allerdings hab ich da jetzt schon ewig rumprobiert, aber weiss ich komm nicht drauf, wie ich das machen soll!

hat da jemand evtl. schon erfahrungen gemacht oder kann mir irgendwelche lösungsvorschläge, -beispiele geben?

mfg,
heiopei

ps: wollte nicht mit quickrep /alrep arbeiten, da das viel zu umfangreich und in der exe zu groß ist, außerdem hat die darstellung von zellen mit mehr als einer zeile nicht richtig funktioniert...
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: druckvorschau...

  Alt 8. Okt 2005, 14:14
Hi,

eigentlich brauchst du gar nicht viel anders zu machen als das Kochbuch dir schon vorgibt.
Du erstellst einfach deine Druckmethode, die als Argument / Parameter einen Canvas bekommt, auf den gedruckt wird. Wenn du etwas ausdrucken möchtest, dann ist es natürlich der PrintCanvas, für eine Vorschau kannst du dann ein Bitmap.Canvas nehmen. Für jede Seite am einfachsten ein Bitmap verwenden und da wo du normalerweise dann halt einen Seitenumbruch im Druck produzierst erstellst du ein neues Bitmap und übergibst dessen Canvas zum Bedrucken.
Wenn du die Bitmaps auf die größe der Seite bringst, kannst du sie auch ganz einfach mit einem TImage anzeigen (stretch und proportional auf true ergeben dann dein Seiten Verhältnis)

Glaube man muss allerdings den Offset berücksichtigen, den du beim Seitendruck durch dein Druckermodell haben könntest. Musst du mal gucken.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#3

Re: druckvorschau...

  Alt 8. Okt 2005, 16:19
halb abend,

ja du hast recht, so hab ich mir das auch überlegt und teilweise schon ausgeführt - hab die druckprozedur einfach so umgeschrieben, dass sie auf das übergebene canvas schreibt. aber ich bekomm das mit den bitmaps nicht hin (die bitmaps so einstellen, als würde mann auf den drucker "zeichnen").
d.h. ich bin mir nicht sicher, welche werte ich als höhe und breite an das bitmap übergeben muss, und wie ich die im kochbuch angebenen api-funktionen anwenden muss (wenn überhaupt )

naja, ansonsten würd ich halt die bitmaps in ein variables array schreiben, oder ich schreibe ne prozedur, die nur eine best. seite druckt (hab ich auch schon geschrieben) - d.h. ersteinmal wird der ganze druck gezeichnet und dabei gezählt, wie viele seiten gedruckt werden müssen; danach wird das ganze wiederholt, allerdings nur bis zu der gesuchten seite (hoffe ihr versteht, was ich meine ). dann geb ich das ganze wie von dir beschrieben auf ein image aus.

ganz schön wäre es aber noch, wenn ich gar kein image bräuchte, sondern das zoomen nochmal extra über das bitmap drüberlaufen lassen kann und dieses dann zum schluss nur auf mein formular zeichne.
(die druckoffsets habe ich übrigens schon berücksichtigt!)

mfg,
heiopei
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#4

Re: druckvorschau...

  Alt 10. Okt 2005, 19:27
hallo,
naja da noch keiner was geschrieben hat...

also, da ich momentan ziemlich im dunkeln tappe und grad überhaupt nicht weiterkomme:

1. wie erstelle ich ein bitmap (nicht auf dem formular sichtbar), auf das ich mit canvas zeichnen kann
2. welche werte muss ich dem bitmap als breite und höhe zuweisen, dass das zeichnen auf dem bitmap genau
dem zeichnen auf dem drucker entspr. (evtl. auch noch canvas-"formatierung" mit apis)
3. was muss ich dann, machen, um das bitmap auf das formular zeichnen zu können (stretch-funktion,
canvas-"formatierung"...)

ich hab natürlich schon berücksichtigt, dass ich das bitmap bei jedem resize und repaint neu auf das formular zeichnen müsste...
ich würde ungern ein image verwenden - nur, wenn der programmieraufwand dadurch enorm verkürzt werden könnte (abgesehen von der stretch-funktion)!!!

mfg,
heiopei
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#5

Re: druckvorschau...

  Alt 12. Okt 2005, 12:52
hallo,
also da ich momentan wirklich nicht weiterkomme und das ganze bald fertig haben möchte, frag ich einfach stück für stück:

- ist es möglich, ein array mit mehreren bitmaps zu erstellen
(wenn nicht bleibe ich bei der jeweiligen neuzeichung, bzw. berechnung der gewünschten seite)
- wenn ich ein bitmap auf meinem formular erstelle (ihm das handle der form zuweise),
welche breite und höhe muss ich diesem zuweisen - width und height des druckercanvas(wenns das gibt);
oder die blatthöhe/breite * mm pro pixel...
- muss ich das bitmap mit irgendwelchen api-befehlen konvertieren, so dass die größenverhältnisse gleich
sind
- welche scale-funktion würdet ihr für die vergrößerung /verkleinerung empfehlen

hoffe ihr könnt mir helfen

heiopei
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: druckvorschau...

  Alt 12. Okt 2005, 22:17
Hallo,

da ich beim letzten Versuch zu Antworten nur 'nen Datenbankfehler hatte versuch ich's nochmal...
Zitat von heiopei:
- ist es möglich, ein array mit mehreren bitmaps zu erstellen
(wenn nicht bleibe ich bei der jeweiligen neuzeichung, bzw. berechnung der gewünschten seite)
Das geht natürlich: Bitmaps erstellen und in einer TObjectList verwalten
Zitat von heiopei:
- wenn ich ein bitmap auf meinem formular erstelle (ihm das handle der form zuweise),
welche breite und höhe muss ich diesem zuweisen - width und height des druckercanvas(wenns das gibt);
oder die blatthöhe/breite * mm pro pixel...
Ein Bitmap wird einfach erstellt (braucht kein Handle, braucht kein Formaular). Die Größe ist davon abhängig, wie Deine Vorschau aussieht.
Zitat von heiopei:
- muss ich das bitmap mit irgendwelchen api-befehlen konvertieren, so dass die größenverhältnisse gleich
sind
Nein
Zitat von heiopei:
- welche scale-funktion würdet ihr für die vergrößerung /verkleinerung empfehlen
Ich würde ganz anders rangehen. So wie ich Dich verstanden habe bestehen Deine Seiten nur aus Schrift und Graphik. Das lässt sich prima skalieren, wenn man die Seite in ein TMetafile schreibt. Dadurch muss man sich nicht mit Skalierungsfunktionen rumschlagen und die Schriften sehen immer gleich gut aus.
Außerdem würde ich nur die Seiten rendern, die gerade angezeigt werden. Anders mag zwar schenller sein, wenn ich aber nur die erste Seite sehen will und das Programm rendert erstmal 20 Seiten ist das ziemlich blöd. Hinzu kommt der Ressourcenverbrauch.

Ein Wort noch zum "Kochrezept": Leider ist das keine wirkliche Druckvorschau, da z. B. die Schriften nur in festen Einheiten skaliert werden können (GDI kenn kein 12,236 Punkt). Dadurch springt die Schrift beim Zoomen wild umher. Genau das vermeidet man mit 'nem Metafile.

Gruß
xaromz
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#7

Re: druckvorschau...

  Alt 21. Mai 2008, 09:34
könnte mir jemand mal den Quelltext aus dem Delphi 6 Kochbuch schicken oder hier posten???
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz