Hallo zusammen,
ich setzte den Standardrucker von Windows mit folgendem Code:
Code:
procedure TForm1.MySetDefaultPrinter2(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.Strings[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;
Dies klappt auch wunderbar und in der Systemsteuerung--> Drucker ist der Standarddrucker geändert.
Wenn ich anschliessend gleich folgenden Code starte erhalte ich immer eine Fehlermeldung, dass kein Drucker installiert ist.
Code:
shellexecute (application.Handle,'print',PChar('C:\Test\Test.doc'),nil,nil,SW_SHOWNORMAL);
Der Auschschnitt im Code sieht folgendermassen aus:
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
MySetDefaultPrinter2('FreePDF XP');
shellexecute (application.Handle,'print',PChar('C:\Test\Test.doc'),nil,nil,SW_SHOWNORMAL);
end;
Weiss jemand wiso diese Fehlermeldung auftaucht??
PS: Wenn der Drucker durch Delphi gewechselt wurde und in einem beliebigen anderen Programm drucken möchte, geschiedt dies erfolgreich auf dem neuen Standarddrucker.
greez eagle