Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Drucker wechseln/ändern (https://www.delphipraxis.net/107691-drucker-wechseln-aendern.html)

Fritz01 31. Jan 2008 22:24


Drucker wechseln/ändern
 
Hallo,
habe da wieder mal . . .
In einer ComboBox sind alle unter Windows installietern Drucker mit
Delphi-Quellcode:
cbDrucker.Items.Assign(Printer.Printers);
aufgelistet. Der StandardDrucker ist mit
Delphi-Quellcode:
cbDrucker.ItemIndex := Printer.PrinterIndex;
als aktueller Drucker aktiv.
Nun kommt mein Problem. Ich möchte zum Drucken einen anderen Drucker benutzen.
Der Wechsel soll, wie ich in der DP gelesen habe, mit einem Zweizeiler zu erledigen sein.
Delphi-Quellcode:
procedure Tfrm1.cbDruckerClick(Sender: TObject);
begin
  Printer.PrinterIndex := -1;              
  sAktuellerDrucker := Printer.Printers.[Printer.PrinterIndex];
end;
Somit soll ‚sAktuellerDrucker’ der nun aktive Drucker sein. Wie beschreibe ich ‚sAktuellerDrucker’ in der btnClick Procedure?
Ich habe keine Idee mehr.
Gruß
Fritz

Die Muhkuh 31. Jan 2008 22:37

Re: Drucker wechseln/ändern
 
Delphi-Quellcode:
sAktuellerDrucker: TPrinter
eventuell

Dani 31. Jan 2008 22:49

Re: Drucker wechseln/ändern
 
Delphi-Quellcode:
Printer.PrinterIndex := EinIndex;
und dann ganz normal mit dem Printer-Singleton weiterarbeiten.

Beispiel:

Delphi-Quellcode:
//Combobox mit verfügbaren Druckern befüllen
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Assign(Printer.Printers);
end;

//Auswahl übernehmen
procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  Printer.PrinterIndex := ComboBox1.ItemIndex;
end;

//Testdokument drucken
procedure TForm1.Button1Click(Sender: TObject);
var P: TPrinter;
begin
  if ComboBox1.ItemIndex <> -1 then begin
      P := Printer;
      P.BeginDoc;
      try
        P.Canvas.Font.Size := 32;
        P.Canvas.TextOut(100, 100, 'Hallo, Welt!');
      finally
        P.EndDoc;
      end;
  end else begin
    MessageDlg('Nix ausgewählt!', mtError, [mbOK], 0);
  end;
end;

Hansa 31. Jan 2008 23:00

Re: Drucker wechseln/ändern
 
Warum immer nur den "Windows-Standard" benutzen ? Der ist vielfach eher kontraproduktiv. Auf diversen Forms will ich den Drucker ändern. Aber wie ?

Annahme ist hierbei, dass der Drucker nicht nur für eine einzelne Seite umgestellt werden soll. Der Drucker soll also verwendet werden, ohne den Windows-Standarddrucker umzubiegen. Schreibe den also in eine INI-Datei. Ungefähr so :

Delphi-Quellcode:
procedure Tfrm.btnDruckerClick(Sender: TObject);
var Ini : TIniFile;
begin
  inherited;
  Ini := TIniFile.Create (ExtractFilePath (ParamStr (0)) + 'XY.INI');;
  if dlgDrucker.Execute then begin
    if MessageBox(Self.Handle, 'Drucker standardmäßig für Programm benutzen ?',
                  'Information', MB_ICONINFORMATION or MB_YESNOCANCEL) = idYes then begin
      DruckerName := Printer.Printers [Printer.PrinterIndex];
      Ini.WriteString('Standardvorgaben','Windows - Drucker',DruckerName);
      showmessage ('aktiver Drucker ab jetzt : ' + DruckerName);
    end;
  end;
  Ini.Free;
end;
Es geht um einen Button, der einen PrinterDialog öffnet, um die Auswahl eines Druckers zu ermöglichen. Dieser wird dann einmalig benutzt. Der User hat aber die Alternative, den Drucker auch als Standard für das eigene Programm zu betrachten. Sofern das gewünscht wird, wird der gewünschte Drucker eben in INI-Datei vorgemerkt. Hat er seine 20 Seiten auf dem "nicht - normalen" Drucker ausgedruckt, dann muss er sich eben die Mühe machen, den wieder umzustellen.

P.S.: für andere Programme (Word etc.) hat sich nichts geändert in Richtung Standarddrucker !

Fritz01 1. Feb 2008 13:48

Re: Drucker wechseln/ändern
 
Hallo,
danke für die Antworten.
So hatte ich es ja auch gemacht.
Delphi-Quellcode:
procedure TfrmHaupt.cbDruckerClick(Sender: TObject);
begin
  Printer.PrinterIndex := -1;                 //  PrinterIndex auf Standardwert setzen
  Printer.PrinterIndex := cbDrucker.ItemIndex; //  Neuer Drucker
end;
Zurzeit ist der AdobePDF-Drucker als WindowsStandard festgelegt.
In der ComboBox wird der neue Drucker angezeigt, gedruckt wird aber immer auf dem Drucker der mit den WindowsEinstellungen als StandardDrucker gewählt wurde, also AdobePDF. Obwohl ich auf HP DeskJet umgestellt habe öffnet sich bei Click auf Drucken ein Fenster mit der Frage wo die PDF Datei gespeichert werden soll.

Nun habe ich die OnClick Procedure auch bei OnSelect eingetragen. Jetzt öffnet sich das Fenster mit der PDF Abfrage sofort nach Druckerwechsel.
Für den in der ComboBox gezeigten Drucker kann ich über die DruckerEigenschaften die entsprechenden Eigenschaften ansehen. Der gewählte Drucker wird aber nicht zum Drucken benutzt.
Gedruckt wird mit Rave. Könnte das eventuell an den Rave Einstellungen liegen? Wenn ja dann wo? Ich kann da nichts finden, habe es versucht.
Fritz

merlin17 1. Feb 2008 13:50

Re: Drucker wechseln/ändern
 
Fritz,

suche hier einmal nach RpDevice und RpDev.selectPrinter <g>


:-) thomas, TeamNevrona

Fritz01 1. Feb 2008 16:33

Re: Drucker wechseln/ändern
 
@merlin17,
ja, das war's!!
Danke für den SuchTipp. Nun geht auch die Druckerauswahl. Hier die Lösung:
RpDevice in uses einbinden und:
Delphi-Quellcode:
procedure TfrmHaupt.cbDruckerClick(Sender: TObject);
begin
  Printer.PrinterIndex := -1;  //  PrinterIndex auf Standardwert setzen
           //  neuer Drucker für RaveAnwendungen
  RpDev.SelectPrinter(cbDrucker.Items[cbDrucker.ItemIndex], true);
end;
Der Windows-StandardDrucker wird dadurch nicht geändert.
Nochmal danke für alle Antworten und ein schönes Wochenende
Fritz


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz