Druckerauflösung festlegen [gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Druckerauflösung festlegen [gelöst]

Beitrag 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?
Zuletzt geändert von Thomas am 06.02.2008 22:28, insgesamt 1-mal geändert.
v6.00
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

in "nativ"-Pb musst du wohl rumtun

ansonsten gibt's dass codearchiv mit ein paar demos

und hierauf folgende antworten natürlich :)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
steelbasic
Beiträge: 63
Registriert: 02.09.2004 19:41
Wohnort: Niedersachsen

Beitrag 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.
Viele Grüße
Hein Blöd
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

ok, thx :D
v6.00
Benutzeravatar
N00B
Beiträge: 122
Registriert: 11.07.2007 22:28

Beitrag 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 ;-)

Bild
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

ok, thx
v6.00
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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?
Zuletzt geändert von Thomas am 07.02.2008 16:02, insgesamt 4-mal geändert.
v6.00
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag von Thomas »

problem glöst!

ich weis jetzt, wie man jetzt genau mit mm druckt^^ (auch von den Ecken aus)
v6.00
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag 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.
Benutzeravatar
Thomas
Beiträge: 893
Registriert: 06.07.2006 19:24
Wohnort: Regensburg
Kontaktdaten:

Beitrag 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 :oops: ,
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
v6.00
Antworten