Druckerauflösung festlegen [gelöst]
Druckerauflösung festlegen [gelöst]
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?
Oder muss man da wieder mit PrinterPageWidth() / PrinterPageHeight rumtun, dass man trotz verschiedenen Druckern (Auflösungen) die gleiche Ausgabegröße hat?
Zuletzt geändert von Thomas am 06.02.2008 22:28, insgesamt 1-mal geändert.
v6.00
- steelbasic
- Beiträge: 63
- Registriert: 02.09.2004 19:41
- Wohnort: Niedersachsen
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.
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.
Viele Grüße
Hein Blöd
Hein Blöd
hier mal der Code von Shardik aus folgendem Link http://www.purebasic.fr/german/viewtopi ... 65&start=8 :
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?
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
Wie krieg ich die im PrintRequester() (bzw. im "Erweitert-Dialog) ausgewählten Auflösungen zurück?
Zuletzt geändert von Thomas am 07.02.2008 16:02, insgesamt 4-mal geändert.
v6.00
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.Thomas hat geschrieben: problem glöst!
ich weis jetzt, wie man jetzt genau mit mm druckt^^ (auch von den Ecken aus)
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.
SorryShardik 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.

ich wollte mich keinesfalls mit "fremden Federn schmücken" und ich seh's auch ein ... (habs auch schon geändert)
wollte ich auch noch nachholen, hatte bloß gestern Abend keine lust mehr ...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.
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
v6.00