Ich habe ein bisschen weitergesucht und habe im QR-Tutorial auf
dsdt.info den Tipp gefunden, den Standard-Drucker zu ändern.
Hab ich also probiert:
Delphi-Quellcode:
procedure SetDefaultPrinter(PrinterName: string);
var
I: Integer;
Device: PChar;
Driver: PChar;
Port: PChar;
HdeviceMode: THandle;
aPrinter: TPrinter;
begin
Printer.PrinterIndex := -1;
GetMem(Device, 255);
GetMem(Driver, 255);
GetMem(Port, 255);
aPrinter := TPrinter.Create;
try
for I := 0 to Printer.Printers.Count - 1 do
begin
if Printer.Printers[i] = PrinterName then
begin
aprinter.PrinterIndex := i;
aPrinter.getprinter(device, driver, port, HdeviceMode);
StrCat(Device, ',');
StrCat(Device, Driver);
StrCat(Device, Port);
WriteProfileString('windows', 'device', Device);
StrCopy(Device, 'windows');
SendMessage(HWND_BROADCAST, WM_WININICHANGE,
0, Longint(@Device));
end;
end;
finally
aPrinter.Free;
end;
FreeMem(Device, 255);
FreeMem(Driver, 255);
FreeMem(Port, 255);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
PrintDialog1.Execute;
SetDefaultPrinter(Printer.Printers[Printer.PrinterIndex]);
QuickRep1.Preview;
end;
Mein HP-Deskjet-Drucker hat normalerweise den Index 3. Nach Aufruf von dem PrintDialog wird der Printer-Liste (Printer.Printers) temporär ein Eintrag zugefügt, nämlich "HP Deskjet 3600 Series
an USB 000003" (Index 6).
Nun versucht die Procedur SetDefaultPrinter den Drucker "HP Deskjet 3600 Series an USB 000003" als Standarddrucker zu setzen. Aber keine Chance für diese Procedur existiert nur der Drucker "HP Deskjet 3600 Series"!
Wie bekomme ich jetzt das "an USB 000003" weg?