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、两个控件打印的时候都是一行一顿的,不如打印机自己打印自己参数时"刷"一下就出来。咋整啊。
(打印自己参数:关掉电源,按住进纸键开机)

解决方案 »

  1.   

    要么采取epson自己的打印指令,
    要么采取成熟的打印控件,实施打印。 
      

  2.   

    看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;
      

  3.   

    一般打印机都可以使用tprinter类来打印,不管是打印图像还是文字,直接在canvas上画,当然针式打印机不太清楚
      

  4.   

    在印象中,打印机只能识别ASCII码,你向打印机发送指今应该发送的是ASCII码所以,你需要先弄清楚打印的机制及流程吧!
    1.打印机启动指令
    2.系统文本编码转换为打印机编码
    3.结束打印指令按照楼主的描述,打印机能识别英文字符,我推测楼主就差将文本转换为标准的ANSI码这一步,在XE7中应该就是ANSISTRING