zu verwendeten Drucker setzen?



  • Zu früh gefreut 😞

    Ich konnte jetzt folgendes Phänomen feststellen:
    Wenn ich meinen Labeldrucker vor dem Drucken als Standartdrucker festlege, druckt er die Labels wie gehabt korrekt.
    Wenn ich aber einen anderen Drucker als Standartdrucker definiert habe und über den Druckerdialog (und meinem Code) den Labeldrucker als Ausgabegerät wähle:

    //Drucker-Dialog aufrufen und Drucker wählen
    PD1->Execute();
    //Drucker-Index ermitteln
    int indexP = Printer()->PrinterIndex;
    //gewählten Drucker per Index setzen
    Printer()->PrinterIndex = indexP;
    

    ...wird das Etikett nicht vollständig gedruckt. Nur die erste Zeile und danach nix mehr 😕

    Torsten



  • torsten_156 schrieb:

    Zu früh gefreut 😞

    //Drucker-Dialog aufrufen und Drucker wählen
    PD1->Execute();
    //Drucker-Index ermitteln
    int indexP = Printer()->PrinterIndex;
    //gewählten Drucker per Index setzen
    Printer()->PrinterIndex = indexP;
    

    Das sieht komisch aus... eigentlich machst du ja nichts anderes, als

    Print()->PrinterIndex = Print()->PrinterIndex;
    


  • Wenn man's genau nimmt, stimmt 😮 Demnach reicht es dann wohl aus, wenn man über den PrinterDialog den zu verwendenden Drucker auswählt. Dann kann ich mir den Code ja schenken. Allerdings druckt mein Programm so auf den Drucker, den ich ausgewählt habe 🕶

    Ich werde morgen mal prüfen was gedruckt wird, wenn ich nur den PrinterDialog zur Auswahl nutze...

    Gruß
    Torsten 🕶



  • So, ich habe jetzt nochmal geprüft, ob es einen Unterschied macht, wenn ich den oben beschriebenen Code weg lasse und nur den Drucker über den PrinterDialog auswähle. Ich habe festgestellt, dass mein Etikett nur korrekt gedruckt wird, wenn der Drucker als "Standartdrucker" definiert ist. 😮
    Das würde jetzt für mich bedeuten, dass ich den über den PrinterDialog ausgewählten Drucker per Code als "Standartdrucker" definiere und nach erfolgtem Druck diese Einstellung wieder rückgängig mache.

    Nur wie stelle ich das an???

    Gruß
    Torsten



  • Nein, das kann so (generell) nicht stimmen. In dem Fall, wo ich den Drucker per Dialog auswähle druckt das Programm auch auf dem Drucker.
    Den Windows Standarddrucker kannst du über die Win32 API Funktion SetDefaultPrinter setzen.

    Edit:
    Wie druckst du denn überhaupt?



  • Ich drucke wie folgt:

    //drucken...
    int x=0;
    int vSize, vAnzahl;
    
    	  if(!Printer()->Printing)
    	  {
    		Printer()->BeginDoc();
    
    		while (x < DS)
    			{
    			Werte_setzen(x);
    			LB1->Selected[x]=true;
    			vAnzahl = vKurztext.Length();
    				if (vAnzahl <= 29)
    				{
    					vSize = 8;
    				}
    
    				if (vAnzahl >29 && vAnzahl <=35)
    				{
    					vSize = 7;
    				}
    
    				if (vAnzahl > 35)
    				{
    					vSize = 6;
    				}
    
    			Print_Etikett(vKurztext,vLagerplatz,vMB,vHB,vMatNr,vSize);
    
    			x++;
    			Printer()->NewPage();
    			LB1->Selected[x-1]=false;
    			}//while
    		  Printer()->EndDoc();
    		}//if
    
    else
    {
    	MessageDlg("Es ist ein Fehler aufgetreten.",mtError ,TMsgDlgButtons() << mbOK,0);
    	Close();
    }
    

    Das liefert mir auf dem Standartdrucker auch immer das korrekte Ergebnis. Leider nur da.
    Jetzt wollte ich mal den Standartdrucker setzen und habe es so versucht:

    bool gesetzt = SetDefaultPrinter("\\maraprt01\marp227C");
    

    Nur leider bekomme ich immer ein false zurück. Aber auch keine Fehlermeldung...?



  • Achtung, doppelte Backslashes beachten. Der Druckername wird so mit Sicherheit nicht akzeptiert. Ein Blick in die MSDN hätte dir auch verraten, dass du über die Funktion GetLastError detaillierte Fehlerinformationen abfragen kannst.
    Was passiert denn, wenn du SetDefaultPrinter einen Eintrag aus der Liste Printer()->Printers übergibst?



  • ok, das mit GetLastError werde ich versuchen. Den Druckernamen, den ich mit doppelBackslash angegeben habe, stammt aus Printer->Printers. Auch wenn ich nur den Druckername ohne \\maraapp\ angebe, funktioniert es nicht.Gruß



  • DocShoe meint, daß du die Backslashs selber escapen mußt, also z.B.

    "\\\\maraprt01\\marp227C"
    


  • Th69 schrieb:

    DocShoe meint, daß du die Backslashs selber escapen mußt, also z.B.

    "\\\\maraprt01\\marp227C"
    

    So, geanu das mit den \\\...\.. hat gefehlt. So nimmt er jetzt auch den Drucker.

    Ich gehe nun wie folgt vor:
    1. Standartdrucker mit

    GetDefaultPrinter()
    

    sichern
    2. Zebra-Drucker mit

    SetDefaultPrinter()
    

    setzen
    3. Etikett drucken
    4. Gesicherten Standartdrucker wieder mit

    SetDefaultPrinter()
    

    setzen

    Vielen Dank für eure Hilfe 👍
    Torsten


Anmelden zum Antworten