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 RAVE 7.7 Printer einstellen (https://www.delphipraxis.net/151646-rave-7-7-printer-einstellen.html)

Kurt56 26. Mai 2010 17:51


RAVE 7.7 Printer einstellen
 
Kann es sein, daß in RAVE ein Fehler ist, oder bin ich einfach nur zu dumm?????

In Printer.printers; sind doch die dem System bekannten Drucker (auch Netzwerkdrucker) verzeichnet.

In der Dokumentation steht, daß es eine Funktion geben soll, die den Drucker setzen kann.

"Diese Methode setzt den aktuellen Drucker auf den ersten drucker in Printer.printers, der den angegebenen Substring in seinem Namen hat.
"ExactMatch" bestimmt weiterhin, ob eine genaue Übereinstimmung des Substrings mit dem Druckernamen vorliegen muß, oder nicht.
Wenn kein Drucker mit dem Namen (oder Namensteil) gefunden wurde, so wird der aktuelle Drucker nichte geändert und "false" zurück gegeben." (Von mir frei übersetzt, ich hoffe aber, dem Sinn gemäß richtig.)


function SelectPrinter(SubStr: string; ExactMatch: Boolean): Boolean;

--- demnach müßte folgender Code laufen: ----

Delphi-Quellcode:
RVProject1.Open;
if RvSystem1.BaseReport.SelectPrinter('\\Server1\HPLaser') then //<-- Ist der Netzwerkdrucker "\\Server1\HPLaser da?
   begin
   RvSystem1.DefaultDest:=rdPrinter;                            //wenn ja, sofort auf diesen Drucker drucken
   RvSystem1.SystemSetups := RvSystem1.SystemSetups - [ssAllowSetup];
   end
else
   begin
   RvSystem1.DefaultDest:=rdPreview;                            // wenn nein, Auswahl und Preview anzeigen
   RvSystem1.SystemSetups := RvSystem1.SystemSetups + [ssAllowSetup];
   end;
If RvProject1.Active then
   begin
   RvProject1.ExecuteReport('Buchungen');
   RVProject1.Close;
   end;
Delphi compiliert das auch ohne Meldung, aber zur Laufzeit bekomme ich eine Fehlermeldung:

EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 005b3358 in Modul 'Projekt1.Exe'.
Lesen von Adresse 00000025D' aufgetreten

Was zum Kuckuk mache ich falsch????
Kann mir jemand einen Rat geben?

Kurt56 26. Mai 2010 19:27

Re: RAVE 7.7 Printer einstellen
 
Es geht "nur" darum, für RAVE den Drucker zu belegen, gleochgültig was an dem Arbeitsplatz für ein Standard-Drucker eingestellt ist.

OB der bestimmte Netzwerkdrucker überhaupt vorhanden ist,
daß bekommt man auch mit

Delphi-Quellcode:
var i, Druckernummer : nteger;
begin
   listbox1.Clear;
   klar:=false;
   listbox1.Items := Printer.printers;
   for i := 0 to listbox1.Count - 1 do
      if listbox1.Items[i] = '\\Server1\HPLaser' then
         begin
         klar:=true;
         Druckernummer:=i;
         end;
end;
heraus.

Aber wie kann ich den Drucker in RAVE setzen?

rawi 26. Mai 2010 19:47

Re: RAVE 7.7 Printer einstellen
 
Hallo Kurt56,

Du musst das selectprinter ins onbeforeprint des RvSystem setzen.

Delphi-Quellcode:
procedure TForm1.RvSystem1BeforePrint(Sender: TObject);
begin
  if RvSystem1.BaseReport.SelectPrinter('fax') then
    showmessage('OK')
  else
    showmessage('false');

end;
gruß rawi

Kurt56 26. Mai 2010 20:48

Re: RAVE 7.7 Printer einstellen
 
Vielen Dank, rawi

Ich habe es jetzt so gelöst:


Delphi-Quellcode:
procedure TForm1.DruckButtonClick(Sender: TObject);
var i : integer;
    DruckerGefunden : boolean;
begin
   listbox1.Clear;
   DruckerGefunden:=false;
   listbox1.Items := Printer.printers;
   for i := 0 to listbox1.Count - 1 do
      if listbox1.Items[i] = '\\Server1\HPLaser' then
         begin
         DruckerGefunden:=true;
         end;
RVProject1.Open;
if DruckerGefunden then //<-- Ist der Netzwerkdrucker "\\Server1\HPLaser da? 
   begin
   RvSystem1.DefaultDest:=rdPrinter;                            //wenn ja, sofort auf diesen Drucker drucken
   RvSystem1.SystemSetups := RvSystem1.SystemSetups - [ssAllowSetup];
   end
else
   begin
   RvSystem1.DefaultDest:=rdPreview;                            // wenn nein, Auswahl und Preview anzeigen
   RvSystem1.SystemSetups := RvSystem1.SystemSetups + [ssAllowSetup];
   end;
If RvProject1.Active then
   begin
   RvProject1.ExecuteReport('Buchungen');
   RVProject1.Close;
   end;
end;

procedure TForm1.RvSystem1BeforePrint(Sender: TObject);
begin
  if not RvSystem1.BaseReport.SelectPrinter('\\Server1\HPLaser') then
    showmessage('Achtung: Fehler bei der Druckerzuweisung');
end;
So funktioniert es.
Danke nochmals, darauf wäre ich nie gekommen.
Gruß Kurt


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 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