Seite 1 von 2

Drucker dauerhaft wählen

Verfasst: 09.01.2010 12:18
von Gerold61
Ich schreibe gerade mein erstes Prog in PB.
Die Drucker wahl über PrintRequester() ist mir bekannt.
Ich möchte aber im SETUP den Drucker nur einmal auswählen, so das bei einem erneuten Prg-Start die Druckerauswahl nicht wieder getroffen werden muß.
Der gewählte Drucker ist natürlich nicht der Standard Drucker.
Bisher ist für mich keine Lösung in Sicht.
Ein kleiner Tip wäre klasse.

Danke.

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 12:22
von X360 Andy
Eine "Config" datei anlegen und dort den Wert des Druckers reinschreiben, beim neustart dann einfach diesen Wert wieder auslesen.

Hilfe dazu File Lib bzw Preference Lib

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 12:33
von Gerold61
UPPS !

Die Antwort war wirklich ultra schnell. Danke.

Abspeichern und wieder laden, klar so hab ich mir das vorgestellt.....
aber welche Parameter sind das, PrintRequester() = "X" ?

So einfach ist es dann wohl doch nicht.

Sorry wenn die Frage zu simpel ist.

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 13:04
von X360 Andy
Grad falschrum :D

Code: Alles auswählen

X = PrintRequester()

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 13:14
von Gerold61
Da habe ich mich unklar ausgedrückt.
Wie ich den PrintRequester() Wert bekomme und speichere ist klar,
aber wie geht der umgekehrte Weg.

Gespeicherte Daten laden ist kein Problem, aber den PrintRequester() wieder auf z.B. 1 zu setzen.

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 13:51
von Kaeru Gaman
den "Requester" setzt du ja nicht auf irgendeinen wert, sondern du checkst VOR dem Aufruf, ob der Wert geändert werden soll.

also mal PseudoCode:

Code: Alles auswählen

If HoleNeueWerte = #True
  Werte = DingensRequester()
Else
  Werte = DateiAuslesen()
EndIf
den Printrequester kenn ich selber nicht...

Schau dir doch mal den selbstgestrickten von hjbremer an: http://www.purebasic.fr/german/viewtopi ... =8&t=21597

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 14:29
von Gerold61
Was ich möchte ist:

1. Bei der Installation des Prg im Setup einen Drucker auswählen, über PrintRequester().
2. Das Ergebnis speichern.
a= PrintRequester() -> speichern
3. Der Rechner wird neu gestartet, Prog wird aufgerufen, holt den gespeicherten Wert "a"
4. Übergibt den Wert, damit ist wieder der gleiche Drucker im Gebrauch.
5. Überprüfung ob a=PrintRequester() zum gleichen Ergebnis führt.
nein, PrintRequester() aufrufen
ja, alles ist gut, weiter im Prg

Punkt 4 ist mein Problem.
Der Drucker ist nicht und darf nicht der Standard Drucker sein, somit müßte ich bei jedem Prg start PrintRequester() ausführen. Das möchte ich vermeiden. Deshalb speichern -> einlesen und Wert übergeben.

Übergeben, aber wie ?
Da stehe ich und komm nicht weiter.

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 14:32
von ts-soft
Mit PureBasic kann man nur auf den DefaultPrinter drucken oder man ruft den PrintRequester auf.
Andere Möglichkeiten gibts es nativ nicht, macht also keinen Sinn das Ergebnis von PrintRequester
zu speichern, da man es nicht wiederverwenden kann.

Mit etwas API kommste doch noch ans Ziel, siehe hierzu ins CodeArchiv (http://www.purearea.net)
nach Printer_List.pb. Mit diesem Code kannste den DefaultPrinter setzen, also sicherst du den
Orginal-Default-Printer und setzt deinen Drucker als Default und machst das nach dem Drucken
rückgängig. Da nicht immer alle Drucker verfügbar sind sollte man sowas mit bedacht machen!

Als Einsteiger sollteste also erstmal die Finger von lassen und den PrinterRequester nutzen!

Gruß
Thomas

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 14:36
von DarkDragon
Ja es gibt keinen Befehl SetPrinter mit dem du die Einstellungen wieder herholen kannst, es geht also nicht.

Re: Drucker dauerhaft wählen

Verfasst: 09.01.2010 16:12
von ts-soft
Hier die Lösung:
(nicht unter Win9x anwendbar!)

Code: Alles auswählen

EnableExplicit

Prototype.s GetDefaultPrinter(Printer.s, *buffer)
Prototype.i SetDefaultPrinter(Printer.p-unicode)

Procedure.s GetDefaultPrinter()
  Protected DLL.i = OpenLibrary(#PB_Any, "winspool.drv")
  Protected _GetDefaultPrinter.GetDefaultPrinter
  Protected Size.i, Result.s
  
  If DLL
    CompilerIf #PB_Compiler_Unicode
      _GetDefaultPrinter = GetFunction(DLL, "GetDefaultPrinterW")
    CompilerElse
      _GetDefaultPrinter = GetFunction(DLL, "GetDefaultPrinterA")
    CompilerEndIf
    
    If _GetDefaultPrinter
      _GetDefaultPrinter(#NUL$, @Size)
      If Size
        Result = Space(Size)
        _GetDefaultPrinter(Result, @Size)
      EndIf
    EndIf
    CloseLibrary(DLL)
  EndIf
  
  ProcedureReturn Result
EndProcedure

Procedure.i SetDefaultPrinter(Printer.s)
  Protected DLL.i = OpenLibrary(#PB_Any, "winspool.drv")
  Protected _SetDefaultPrinter.Setdefaultprinter
  Protected Result.i
  
  If DLL
    _SetDefaultPrinter = GetFunction(DLL, "SetDefaultPrinterW")
    If _SetDefaultPrinter
      Result = _SetDefaultPrinter(Printer)
    EndIf
    CloseLibrary(DLL) 
  EndIf
  
  ProcedureReturn Result
EndProcedure

; erst den DefaultPrinter zwischenspeichern
Define.s DefaultPrinter = Getdefaultprinter()

; jetzt Deinen Drucker setzen (in diesem Beispiel den PDF-Drucker von Adobe)
If SetDefaultPrinter("Adobe PDF")
  
  ; hier drucken
  ; DefaultPrinter()
  ; StartPrinting(JobName$)
  ; ....
  ; StopPrinting()
  
  ; Drucker zurücksetzen
  SetDefaultPrinter(DefaultPrinter)
EndIf


Gruß
Thomas