d7和xe7都試過了,epson tm-t58串口列印機,裝不裝驅動也都試過了。
問題:
1、comport列印數字英文都沒有問題,漢字會亂碼 xe7 win7x86
procedure TForm1.Button4Click(Sender: TObject);
begin
ComPort1.Close;
ComPort1.Open;
end;
procedure TForm1.Button9Click(Sender: TObject);
var
s:string;
begin
ComPort1.ClearBuffer(true,true);
s := memo1.Text;
ComPort1.WriteStr(s);
end;
procedure TForm1.Button10Click(Sender: TObject);
begin
ComPort1.Close;
end;
2、兩個控制元件列印的時候都是一行一頓的,不如列印機自己列印自己引數時"刷"一下就出來。咋整啊。
(列印自己引數:關掉電源,按住進紙鍵開機)
uj5u.com熱心網友回復:
要么采取epson自己的列印指令,要么采取成熟的列印控制元件,實施列印。
uj5u.com熱心網友回復:
看cport的原始碼(我是4.0的),writestr()是不支持unicodestring的,只是把unicode的低位元組取出來,高位元組舍去了。不過,列印機一般也不認的你這樣的直接串口寫的字串吧,難道不用編碼?
function TCustomComPort.WriteStrAsync(var Str: string; var AsyncPtr: PAsync): Integer;
var sa : Ansistring; var i:integer;
begin
if Length(Str) > 0 then
begin
setlength(sa,length(str));
{$IFDEF Unicode}
if length(sa)>0 then
begin
for i := 1 to length(str) do sa[i] := ansichar(byte(str[i]));
move(sa[1],str[1],length(sa));
end;
{$ENDIF}
Result := WriteAsync(Str[1], Length(Str), AsyncPtr)
end
else
Result := 0;
end;
// perform synchronous write operation
function TCustomComPort.WriteStr(Str: string): Integer;
var
AsyncPtr: PAsync;
begin
InitAsync(AsyncPtr);
try
WriteStrAsync(Str, AsyncPtr);
Result := WaitForAsync(AsyncPtr);
finally
DoneAsync(AsyncPtr);
end;
end;
uj5u.com熱心網友回復:
一般列印機都可以使用tprinter類來列印,不管是列印影像還是文字,直接在canvas上畫,當然針式列印機不太清楚uj5u.com熱心網友回復:
在印象中,列印機只能識別ASCII碼,你向列印機發送指今應該發送的是ASCII碼所以,你需要先弄清楚列印的機制及流程吧!
1.列印機啟動指令
2.系統文本編碼轉換為列印機編碼
3.結束列印指令
按照樓主的描述,列印機能識別英文字符,我推測樓主就差將文本轉換為標準的ANSI碼這一步,在XE7中應該就是ANSISTRING
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/59133.html
標籤:網絡通信/分布式開發
