А для TPrintera должны быть установлены драйвера принтера в системе? Просто данный аппарат подключен к com порту. И нет драйверов. Пробовал пример приведенный выше по ссылке. Вроде печатает только вместо русских буков иероглифы.
| Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; const ComPort = 'COM1'; var Form1 : TForm1; ComFile : THandle; ReadAr : array[1..255] of byte; BytesWritten : DWORD; BytesRead : DWORD ;
implementation
{$R *.dfm}
procedure WriteCyrillic(Str:String); var i : Integer; s : AnsiString; nWrite : Cardinal; begin for i := 1 to Length(Str) do begin Case Str[i] of 'А' : s := s + #$80; 'Б' : s := s + #$81; 'В' : s := s + #$82; 'Г' : s := s + #$83; 'Д' : s := s + #$84; 'Е' : s := s + #$85; 'Ж' : s := s + #$86; 'З' : s := s + #$87; 'И' : s := s + #$88; 'Й' : s := s + #$89; 'К' : s := s + #$8A; 'Л' : s := s + #$8B; 'М' : s := s + #$8C; 'Н' : s := s + #$8D; 'О' : s := s + #$8E; 'П' : s := s + #$8F; 'Р' : s := s + #$90; 'С' : s := s + #$91; 'Т' : s := s + #$92; 'У' : s := s + #$93; 'Ф' : s := s + #$94; 'Х' : s := s + #$95; 'Ц' : s := s + #$96; 'Ч' : s := s + #$97; 'Ш' : s := s + #$98; 'Щ' : s := s + #$99; 'Ъ' : s := s + #$9A; 'Ы' : s := s + #$9B; 'Ь' : s := s + #$9C; 'Э' : s := s + #$9D; 'Ю' : s := s + #$9E; 'Я' : s := s + #$9F; 'а' : s := s + #$A0; 'б' : s := s + #$A1; 'в' : s := s + #$A2; 'г' : s := s + #$A3; 'д' : s := s + #$A4; 'е' : s := s + #$A5; 'ж' : s := s + #$A6; 'з' : s := s + #$A7; 'и' : s := s + #$A8; 'й' : s := s + #$A9; 'к' : s := s + #$AA; 'л' : s := s + #$AB; 'м' : s := s + #$AC; 'н' : s := s + #$AD; 'о' : s := s + #$AE; 'п' : s := s + #$AF; 'р' : s := s + #$E0; 'с' : s := s + #$E1; 'т' : s := s + #$E2; 'у' : s := s + #$E3; 'ф' : s := s + #$E4; 'х' : s := s + #$E5; 'ц' : s := s + #$E6; 'ч' : s := s + #$E7; 'ш' : s := s + #$E8; 'щ' : s := s + #$E9; 'ъ' : s := s + #$EA; 'ы' : s := s + #$EB; 'ь' : s := s + #$EC; 'э' : s := s + #$ED; 'ю' : s := s + #$EE; 'я' : s := s + #$EF; 'Ё' : s := s + #$F0; 'ё' : s := s + #$F1; else s := s + Str[i]; end; end; WriteFile(ComFile, Pointer(s)^, Length(s), nWrite, nil); end;
// OpenCOMPort function OpenCOMPort: Boolean; var DeviceName: array[0..80] of Char; begin StrPCopy(DeviceName, ComPort); ComFile := CreateFile(DeviceName, GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if ComFile = INVALID_HANDLE_VALUE then Result := False else Result := True; end; // SetupCOMPort function SetupCOMPort: Boolean; const RxBufferSize = 256; TxBufferSize = 256; var DCB: TDCB; CommTimeouts: TCommTimeouts; begin Result := True; if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then Result := False;
if not GetCommState(ComFile, DCB) then Result := False; DCB.BaudRate:=9600; DCB.ByteSize:=8; DCB.Parity:=NoParity; DCB.StopBits:=ONESTOPBIT; DCB.Flags:=DTR_CONTROL_ENABLE; if not SetCommState(ComFile, DCB) then Result := False; GetCommTimeouts(ComFile, CommTimeouts); with CommTimeouts do begin ReadIntervalTimeout :=MAXDWORD; ReadTotalTimeoutMultiplier := 0; ReadTotalTimeoutConstant := 0; WriteTotalTimeoutMultiplier := 0; WriteTotalTimeoutConstant := 0; end;
if not SetCommTimeouts(ComFile, CommTimeouts) then Result := False; end; // CloseCOMPort procedure CloseCOMPort; begin CloseHandle(ComFile); end;
procedure TForm1.Button1Click(Sender: TObject); const Init : array[1..2] of Byte = ($1B,$40); Center : array[1..3] of Byte = ($1B,$61,$01); FontSize : array[1..3] of Byte = ($1B,$21,20); PrintFeed : array[1..3] of Byte = ($1B,$64,$03); Lang : array[1..3] of Byte = ($1B, $74, $17); //ESC t n Select character code table //но я не знаю какой параметр сюда передавать вместо n // А может эта команда и не нужна вовсе CutAlligment : array[1..4] of Byte = ($1D,$F8,$65,$03); Cut : array[1..2] of Byte = ($1B,$69); var Text : PAnsiChar; nWrite : DWord; begin
if OpenCOMPort then begin Memo1.Lines.Add('Порт открыт');
if SetupCOMPort then begin Memo1.Lines.Add('Порт настроен');
WriteFile(ComFile, Init, SizeOf(Init), BytesWritten, nil);
// Center WriteFile(ComFile, Center, SizeOf(Center), BytesWritten, nil); // FontSize WriteFile(ComFile, FontSize, SizeOf(FontSize), BytesWritten, nil);
//Lang WriteFile(ComFile, Lang1, SizeOf(Lang1), BytesWritten, nil);
// Text WriteCyrillic(Memo1.Text);
// Preent and Feed WriteFile(ComFile, PrintFeed, SizeOf(PrintFeed), BytesWritten, nil);
// Cut alligment WriteFile(ComFile, CutAlligment, SizeOf(CutAlligment), BytesWritten, nil);
// Cut WriteFile(ComFile, Cut, SizeOf(Cut), BytesWritten, nil); // закрываем порт CloseHandle(ComFile);
end else begin Memo1.Lines.Add('Не удалось настроить порт'); end; end else begin Memo1.Lines.Add('Не удалось открыть порт'); end; end;
end.
|
|