Drucker dauerhaft wählen

Anfängerfragen zum Programmieren mit PureBasic.
Gerold61
Beiträge: 12
Registriert: 09.01.2010 12:05
Computerausstattung: WIN 10
PureBasic 7.52 für Windows (x64 64-bit)
Wohnort: Cuxhaven

Drucker dauerhaft wählen

Beitrag 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.
PureBasic 4.4
XP SP3
INTEL CORE QUAD
2 GB
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: Drucker dauerhaft wählen

Beitrag 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
Gerold61
Beiträge: 12
Registriert: 09.01.2010 12:05
Computerausstattung: WIN 10
PureBasic 7.52 für Windows (x64 64-bit)
Wohnort: Cuxhaven

Re: Drucker dauerhaft wählen

Beitrag 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.
PureBasic 4.4
XP SP3
INTEL CORE QUAD
2 GB
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: Drucker dauerhaft wählen

Beitrag von X360 Andy »

Grad falschrum :D

Code: Alles auswählen

X = PrintRequester()
Gerold61
Beiträge: 12
Registriert: 09.01.2010 12:05
Computerausstattung: WIN 10
PureBasic 7.52 für Windows (x64 64-bit)
Wohnort: Cuxhaven

Re: Drucker dauerhaft wählen

Beitrag 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.
PureBasic 4.4
XP SP3
INTEL CORE QUAD
2 GB
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Drucker dauerhaft wählen

Beitrag 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
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Gerold61
Beiträge: 12
Registriert: 09.01.2010 12:05
Computerausstattung: WIN 10
PureBasic 7.52 für Windows (x64 64-bit)
Wohnort: Cuxhaven

Re: Drucker dauerhaft wählen

Beitrag 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.
PureBasic 4.4
XP SP3
INTEL CORE QUAD
2 GB
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Drucker dauerhaft wählen

Beitrag 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
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Drucker dauerhaft wählen

Beitrag von DarkDragon »

Ja es gibt keinen Befehl SetPrinter mit dem du die Einstellungen wieder herholen kannst, es geht also nicht.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Drucker dauerhaft wählen

Beitrag 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
Antworten