[Delphi] QR wyruk na drukarce innej niż domyślna

0

Witam,

Do komputera mam podłączone 2 drukarki. Ponieważ część dorkumentw muszę drukować na apierze samokpiującym, jedna z nich jest igłowa.
Domyślnie jednak używana jest drukarka laserowa.
No i teraz pojawia się problem, bo ja potrzebuję aby pewne raporty QR były drukowana zawsze na igłówce.
Na delphi.about.com znalazłem taki kodzik:

procedure SetDefaultPrinter(PrinterName: String);
var
   I: Integer;
   Device : PChar;
   Driver : Pchar;
   Port   : Pchar;
   HdeviceMode: Thandle;
begin
 Printer.PrinterIndex := -1;  
 //Save for use later Defaultprintername
 //is a global variable. 
 DefaultPrinterName :=
   Printer.Printers[Printer.PrinterIndex];
 with Printer.printers do begin
 //Count is a printers property
  for I := 0 to Count-1 do begin
   if PrinterDevice(Objects[I]).Device :=
     PrinterName then begin	
	  Printername := Printer.printers[I];
      Device := PChar(TprinterDevice
	       (objects[I]).Device);
      Driver := Pchar(TprinterDevice
	       (objects[I]).Driver);
      Port   := Pchar(TprinterDevice
	       (objects[I]).Port);
      StrCat(Device, ',');
      StrCat(Device, Driver );
      StrCat(Device, Port );
      WriteProfile('windows', 'device', Device );
      StrCopy( Device, 'windows' );
      SendMesssage(HWND_BROADCAST, WM_WINICHANGE,
	               0, Longint(@Device));
      HDeviceMode := 0;
	end;
   end;
 end;
end;

No i proba kompilacji wywala mi błąd:
Undeclared identifer PrinterDevice
i
Undeclared identifer TprinterDevice

Nigdy nie korzystałem jeszcze z klasy TQRPrinter a w helpie nic na ten temat nie ma :-(
Może ktoś z was miał już taki problem.
Używam D7 Prof.

0

Nie bardzo mam teraz czas Twój kod analizować, więc wklejam coś co działa mi od kilku lat...

// tu sobie pobieram NAZWĘ drukarki z tabeli konfiguracyjnej
ServiceDruk.pDane.Params[0].AsInteger := 50;
ServiceDruk.pDane.Open;


for i := 0 to printer.Printers.Count -1 do
begin
if printer.Printers[i] = ServiceDruk.pDane.FieldByName('value1').AsString then // w tej linii porównuje po prostu nazwy drukarek z tą która jest w konfigu
  begin
   
  // a tutaj podstawiam drukarki do pszczególnych raportów
  WynikA4.PrinterSettings.PrinterIndex := i;
  WynikA5.PrinterSettings.PrinterIndex := i;
  test.PrinterSettings.PrinterIndex := i;
  end;
end;

Może mało eleganckie, ale działa prawie bez zarzutu... pisze 'prawie', bo problem pojawia się tylko w sytuacji, kiedy już po przypisaniu drukarki do raportu ktoś doda nową drukarkę ;) Jeśli masz pewność że nikt nie grzebie w drukarkach wpisz od razu numerek indexu drukarek...

Oczywiście zakładam, że w uses masz dopisane printers.. ;)

Teraz jednak przeszedłem na nowszą wersje Delphi więc z konieczności używam RaveReports... pare postów niżej masz moje poszukiwania rozwiązania podobnego problemu...

0

O to mi właśnie wystarczy.
Dzięki.
Heh, ten twój temat znalazłem wcześniej tylko nie potrafiłem zaczaić o co chodzi.
Teraz już widzę, że roblem był banalny :-)

Dzięki raz jeszcze.

0

Wszystko jest trudne, póki nie stanie się łatwe... ;)

0
Za Horyzontem napisał(a)
for i := 0 to printer.Printers.Count -1 do
begin
if printer.Printers[i] = ServiceDruk.pDane.FieldByName('value1').AsString then // w tej linii porównuje po prostu nazwy drukarek z tą która jest w konfigu
  begin
   
  // a tutaj podstawiam drukarki do pszczególnych raportów
  WynikA4.PrinterSettings.PrinterIndex := i;
  WynikA5.PrinterSettings.PrinterIndex := i;
  test.PrinterSettings.PrinterIndex := i;
  end;
end;
i := printer.Printers.IndexOf(ServiceDruk.pDane.FieldByName('value1').AsString);
if i > -1 then
begin
  //rób co chcesz, zapewne wystarczy zmienić aktualną drukarkę na tą znalezioną przez
  printer.PrinterIndex := i;
end
else begin
  //nie ma drukarki o takiej nazwie, może przypisać domyślną
end;

nie to, żebym się czepiał ale szukanie forem w TStrings ... W dodatku jak już znajdzie to szuka dalej ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1