Problem mit Beispiel Printer.pb

Anfängerfragen zum Programmieren mit PureBasic.
Rumpelstilzchen
Beiträge: 3
Registriert: 25.11.2005 19:43
Wohnort: Telfs/Tirol

Problem mit Beispiel Printer.pb

Beitrag von Rumpelstilzchen »

Wenn ich das Beispielprogramm "printer.pb" starte kommt die Fehlermeldung "There is no current 2D drawing object". Was mache ich falsch ? Gibt es sonst ein einfaches Beispiel für eine simple Ausdruckroutine ? Ich möchte lediglich einen reportartigen Textausdruck programmieren.
Dank für jede Hilfe,
Rumpelstilzchen
Die Summe der Bosheit bleibt immer gleich !
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Schau bitte mal ins CodeArchiv auf www.PureArea.net, da findest Du mehrere Beispiel-Codes zum Drucken.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Rumpelstilzchen
Beiträge: 3
Registriert: 25.11.2005 19:43
Wohnort: Telfs/Tirol

Beitrag von Rumpelstilzchen »

Danke Andre für den Hinweis, aber beim Versuch das Beispiel "Print_DPI_independent.pb" (Rui Carvalho) aus dem CodeArchiv zu starten kam nur die Fehlermeldung "LoadFont() can´t be called inside a StartDrawing()/StopDrawing() block." Und warum funktioniert das simple Programm "printer.pb" (aus dem Examples-Verzeichnis) nicht ?
Ich habe schon einige komplexe techn. Anwendungen mit PB programmiert und sonst keine Probleme, zu meinem Glück fehlt nur noch das Ausdrucken der Ergebnisse.
(PB 3.94, Windows XP Prof.)
Gruß, Rumpelstilzchen
Die Summe der Bosheit bleibt immer gleich !
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Weil man davon ausgehen muss, das das LoadFont() vor dem
Startdrawing aufgerufen werden darf :mrgreen:

PS: Das steht nicht in der Hilfe :wink: . Man muss halt improvisieren.

Aber André wird's bestimmt noch dort hineinsetzen, was hier korrigiert ist.
Natürlich muss man auch ein eigenes Bitmap hinzufügen (Name.BMP) und
den Namen und das Verzeichnis anpassen. :allright:

Code: Alles auswählen

; English forum:
; Author: Rui Carvalho
; Date: 01. March 2003

;***************************
;Super Printer - DPI indepent print
;by Rui Carvalho - 2003
;
;Part of GIA - Lift Management Software
;Freeware
;***************************

;rui-carvalho@bigfoot.com

Declare ycm(x.f)
Declare xcm(x.f)


;
;Original printer code by Fred
;

If PrintRequester()

If StartPrinting("PureBasic Test")
FontID.l=LoadFont(0, "Arial", ycm(0.4))
FontID1.l=LoadFont(0, "Arial", ycm(1))

If StartDrawing(PrinterOutput())

DrawingFont(FontID.l);4mm font size

Locate(xcm(15), xcm(5.5)); locate at 15cm by 5,5cm
DrawText("PureBasic Printer Test")

DrawingFont(FontID1); 1 cm font size

Locate(xcm(10), ycm(20))
DrawText("PureBasic Printer Test 2")

If LoadImage(0, "PureBasiclogo.bmp"); The logo bitmap is bigger
ResizeImage(0, xcm(6), ycm(2)) ; resize image for 6cm by 2cm
DrawImage(ImageID(), xcm(1), ycm(1)); draw image at 1cm by 1cm
Else
MessageRequester("", "2", 0)
EndIf

FrontColor(100, 100, 100)
Box(xcm(2), ycm(6), xcm(6), ycm(10)); draw a 4cm by 4cm square

StopDrawing()
EndIf

StopPrinting()
EndIf
EndIf



;**** the trick !!!! ****

Procedure xcm(x.f)

result = x * (PrinterPageWidth()/21) ; 21cm A4
ProcedureReturn result

EndProcedure


Procedure ycm(x.f)

result = x * (PrinterPageWidth()/29.7) ; 29,7cm A4
ProcedureReturn result

EndProcedure


;Tested with fineprintpdf in multiple DPI's
;and on Xerox DC440 laser printer
Bild
Win11 Pro 64-Bit, PB_6.11b1
Rumpelstilzchen
Beiträge: 3
Registriert: 25.11.2005 19:43
Wohnort: Telfs/Tirol

Druckprobleme

Beitrag von Rumpelstilzchen »

Danke Falko, es funktioniert.

Rumpelstilzchen
Die Summe der Bosheit bleibt immer gleich !
Antworten