solution for "Printer selected is not valid", expecially for HP DeskJet printer

Correct Printers.pas unit at line 512 (D 5.01), such as bellow:

procedure TPrinter.SetState(Value: TPrinterState);
...........
    if Assigned(CreateHandleFunc) then
      with TPrinterDevice(Printers.Objects[PrinterIndex]) do
      begin
        DC := CreateHandleFunc(PChar(Driver), PChar(Device), PChar(Port),
DevMode);
        ............

change it to :

        DC := CreateHandleFunc(PChar(Driver), PChar(AnsiUpperCase(Device)),
PChar(Port), DevMode);

that's all.

---- Sunboy ----