Seite 1 von 2
Druckerauflösung festlegen [gelöst]
Verfasst: 04.02.2008 10:42
von Thomas
kann man die Auflösung beim Drucken in PB festlegen?
Oder muss man da wieder mit PrinterPageWidth() / PrinterPageHeight rumtun, dass man trotz verschiedenen Druckern (Auflösungen) die gleiche Ausgabegröße hat?
Verfasst: 04.02.2008 11:50
von bobobo
in "nativ"-Pb musst du wohl rumtun
ansonsten gibt's dass codearchiv mit ein paar demos
und hierauf folgende antworten natürlich

Verfasst: 05.02.2008 10:15
von steelbasic
Hallo Thomas
ein ähnliches Problem hatte ich vor ein paar Tagen auch.
Schau mal hier
http://www.purebasic.fr/german/viewtopic.php?t=15559
Beitrag vom 28.1.08 hier unter Anfänger
Funktioniert einwandfrei.
Verfasst: 05.02.2008 15:42
von Thomas
ok, thx

Verfasst: 05.02.2008 22:35
von N00B
Das Problem scheint ja gelöst zu sein, dann will ich mal anders helfen.
Hier hast den Selben Smiley den als Avatar benutzt, jedoch transparent

Verfasst: 06.02.2008 13:38
von Thomas
ok, thx
Verfasst: 06.02.2008 14:29
von Thomas
hier mal der Code von Shardik aus folgendem Link http://www.purebasic.fr/german/viewtopi ... 65&start=8 :
Code: Alles auswählen
EnableExplicit
NewList Printer.S()
Procedure.L GetInstalledPrinters()
Shared Printer.S()
Protected *Buffer
Protected BufferSize.L
Protected *Printer
Protected PrinterName.S
ClearList(Printer())
BufferSize = 8192
*Buffer = AllocateMemory(BufferSize)
*Printer = *Buffer
If GetProfileString_("Devices", 0, "", *Buffer, BufferSize)
PrinterName = PeekS(*Printer)
While Trim(PrinterName) <> ""
AddElement(Printer())
Printer() = Trim(PrinterName)
*Printer = *Printer + Len(PrinterName) + 1
PrinterName = PeekS(*Printer)
Wend
EndIf
FreeMemory(*Buffer)
ProcedureReturn CountList(Printer())
EndProcedure
Define DriverName.S
Define Info.S
Define WindowsVersion.L
Define PrinterDC.L
Define SelectedPrinter.S
Define WindowEvent.L
If OpenWindow(0, 0, 0, 160, 70, "Drucker-Auswahl", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
If CreateGadgetList(WindowID(0))
ComboBoxGadget(0, 10, 10, 140, 100)
ButtonGadget(1, 20, 40, 120, 20, "Auflösung anzeigen")
If GetInstalledPrinters() = 0
End
Else
ForEach Printer()
AddGadgetItem(0, -1, Printer())
Next
EndIf
SetGadgetState(0, 0)
Repeat
WindowEvent = WaitWindowEvent()
Select WindowEvent
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
If EventGadget() = 1
If EventType() = #PB_EventType_LeftClick
SelectedPrinter = GetGadgetText(0)
Break
EndIf
EndIf
EndSelect
ForEver
CloseWindow(0)
WindowsVersion = OSVersion()
If WindowsVersion <> #PB_OS_Windows_95 And WindowsVersion <> #PB_OS_Windows_98
DriverName = "WinSpool"
EndIf
PrinterDC = CreateDC_(@"WinSpool", @SelectedPrinter, 0, 0)
If PrinterDC
Info = "Drucker: " + SelectedPrinter + #CR$ + #CR$
Info + "Horizontale Auflösung = " + Str(GetDeviceCaps_(PrinterDC, #LOGPIXELSX)) + " DPI" + #CR$
Info + "Vertikale Auflösung = " + Str(GetDeviceCaps_(PrinterDC, #LOGPIXELSY)) + " DPI"
DeleteDC_(PrinterDC)
MessageRequester("Drucker-Auflösung", Info, #MB_ICONINFORMATION)
EndIf
EndIf
EndIf
die DruckerAuflösung dieses Codes bezieht sich ja nur auf die fest definierten Standartwerte der Druckoptionen ...
Wie krieg ich die im PrintRequester() (bzw. im "Erweitert-Dialog) ausgewählten Auflösungen zurück?
Verfasst: 06.02.2008 22:27
von Thomas
problem glöst!
ich weis jetzt, wie man jetzt genau mit mm druckt^^ (auch von den Ecken aus)
Verfasst: 07.02.2008 13:27
von Shardik
Thomas hat geschrieben:
problem glöst!
ich weis jetzt, wie man jetzt genau mit mm druckt^^ (auch von den Ecken aus)
Schön, daß Du Dein Problem gelöst hast. Vielleicht könntest Du ja einmal Deine gefundene Lösung veröffentlichen, damit auch andere davon profitieren.
Ansonsten hast Du nur ohne Nennung von Quelle und Autor mein Code-Beispiel aus einem vorherigen Posting (
http://www.purebasic.fr/german/viewtopi ... 65&start=8) ohne Änderung kopiert und noch einmal eingestellt. Dafür hätte eigentlich ein Link gereicht. So könnte man denken, daß Du Dich mit fremden Federn schmücken wolltest. Dies ist nicht das erste Mal, daß mir das auffällt und solltest Du so weiter machen, werde ich überdenken, meine weitere Mitarbeit und Hilfe in diesem Forum einzustellen, denn wenn Du wirklich so gut bist, kannst Du ja meinen Teil übernehmen...
Ich empfinde es als ein Gebot der Höflichkeit und Anerkennung, bei "geborgtem" Code auch einen Link zum Original-Posting zu setzen, zumal dies dem Leser ja auch noch zusätzliche Informationen aus den übrigen Beiträgen des angegebenen Threads liefert.
Verfasst: 07.02.2008 16:07
von Thomas
Shardik hat geschrieben:Ansonsten hast Du nur ohne Nennung von Quelle und Autor mein Code-Beispiel aus einem vorherigen Posting (
http://www.purebasic.fr/german/viewtopi ... 65&start=8) ohne Änderung kopiert und noch einmal eingestellt. Dafür hätte eigentlich ein Link gereicht. So könnte man denken, daß Du Dich mit fremden Federn schmücken wolltest. Dies ist nicht das erste Mal, daß mir das auffällt und solltest Du so weiter machen, werde ich überdenken, meine weitere Mitarbeit und Hilfe in diesem Forum einzustellen, denn wenn Du wirklich so gut bist, kannst Du ja meinen Teil übernehmen...
Ich empfinde es als ein Gebot der Höflichkeit und Anerkennung, bei "geborgtem" Code auch einen Link zum Original-Posting zu setzen, zumal dies dem Leser ja auch noch zusätzliche Informationen aus den übrigen Beiträgen des angegebenen Threads liefert.
Sorry

,
ich wollte mich keinesfalls mit "fremden Federn schmücken" und ich seh's auch ein ... (habs auch schon geändert)
Shardik hat geschrieben:Schön, daß Du Dein Problem gelöst hast. Vielleicht könntest Du ja einmal Deine gefundene Lösung veröffentlichen, damit auch andere davon profitieren.
wollte ich auch noch nachholen, hatte bloß gestern Abend keine lust mehr ...
Also, hier mal der Code, mit dem man in mm-Maßen drucken kann (und das ganze wirklich vom Blattrand gemessen):
Code: Alles auswählen
Global hDC.l
Procedure mmX(Value.f)
ProcedureReturn Value * (GetDeviceCaps_(hDC, #LOGPIXELSX) / 25.4) - GetDeviceCaps_(hDC, #PHYSICALOFFSETX)
EndProcedure
Procedure mmY(Value.f)
ProcedureReturn Value * (GetDeviceCaps_(hDC, #LOGPIXELSY) / 25.4) - GetDeviceCaps_(hDC, #PHYSICALOFFSETY)
EndProcedure
Procedure mmWidth(Value.f)
ProcedureReturn Value * (GetDeviceCaps_(hDC, #LOGPIXELSX) / 25.4)
EndProcedure
Procedure mmHeight(Value.f)
ProcedureReturn Value * (GetDeviceCaps_(hDC, #LOGPIXELSY) / 25.4)
EndProcedure
If PrintRequester()
If StartPrinting("Testdruck")
hDC = StartDrawing(PrinterOutput())
Box(mmX(20), mmY(20), mmWidth(20), mmHeight(20), RGB(0, 0, 255)) ;hier ein Testobjekt (2x2cm groß)
StopDrawing()
StopPrinting()
EndIf
EndIf
End