Добавлено спустя 2 часа 9 минут 39 секунд:
Более современный вариант:
- Код: Выделить всё
uses lconvencoding, Printers, OSPrinters;
...
var
written: Integer;
procedure Print(s: String);
begin
s := UTF8ToCP866(s);
Printer.Write(s,Length(s),written); \\здесь ошибка - см. пост ниже.
end;
begin
if not PrintDialog1.Execute then Exit;
Printer.RawMode:=True;
Printer.BeginDoc;
Print(Memo1.Text);
Printer.EndDoc;
end;
и надо пропатчить в \lazarus\components\printers\win32\winprinters.inc
- Код: Выделить всё
function TWinPrinter.Write(const Buffer; Count: Integer;
var Written: Integer): Boolean;
begin
CheckRawMode(True);
// result := WritePrinter(FPrinterHandle,@Buffer, Count, pdword(@Written));
result := WritePrinter(FPrinterHandle, Pointer(Buffer), Count, pdword(@Written)); - мой баг - не надо патчить!
end;