자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi 라벨프린터인쇄시 델7에서는 잘나오는데 XE7에서는 글자가 짤립니다
2016.05.02 11:33
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
B-452라벨프린터로 인쇄합니다 델파이7에서는 한글 영문 순자 모두 이상없이 나오는데 XE7으로 실행하면 '한글'만나오고 '-ABC-1234' 는 인쇄가 안됩니다 원인은 유니코드때문이라 추측하고 이것저것많이 해봤지만 해결을 못하여 문의드립니다
unit barcode7;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
function FnMiniBarcodePrint(v_Prodknm : AnsiString) : boolean;
function GetHangul452(HanData: AnsiString): AnsiString;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
FnMiniBarcodePrint('한글-ABC-1234'); // 한글인쇄 영문인쇄
end;
function TForm1.FnMiniBarcodePrint(v_Prodknm: AnsiString): boolean;
var OutFile : TextFile; //로 변수를 잡고서
sPrn : AnsiString ; //바코드 프린팅 명령어를 넣어주고
begin
sPrn := '{D0230,0550,0200|}';
sPrn := sPrn + '{C|}'; //버퍼크리어
sPrn := sPrn + '{AY;+00,0|}'; //+09->헤드온도
sPrn := sPrn + '{PC001;0050,0121,2,2,51,00,B|}'; //51->한글폰트 //한글인쇄
sPrn := sPrn + '{RC001;' + GetHangul452(v_Prodknm) + '|}';
sPrn := sPrn + '{XS;I,0001,0002C5100|}';
ShowMessage(GetHangul452(v_Prodknm));
try
AssignFile(OutFile, 'LPT1');
Rewrite(OutFile);
Writeln(OutFile, sPrn);
CloseFile(OutFile);
Result := true;
except
CloseFile(OutFile);
Result := false;
end;
end;
function TForm1.GetHangul452(HanData: AnsiString): AnsiString;
var
hData: AnsiString;
tData: Ansistring;
tData01: AnsiString;
hOrd01 : integer;
StrPos: integer;
ExitWhile: integer;
HanChar : array[0..5] of AnsiChar;
begin
hData := Trim(HanData);
tData := '';
StrPos := 1;
ExitWhile := 1;
while (ExitWhile <> 0) do
begin
strpcopy(HanChar,copy(hData, StrPos, 2));
hOrd01 := ord(HanChar[0]);
if copy(hData, StrPos, 1) > #128 Then
begin
tData01 := copy(Trim(hData), StrPos, 2);
StrPos := StrPos + 2;
end
else
begin
if copy(hData, StrPos, 1) = #32 Then
tData01 := chr(163) + chr(160);
tData01 := chr(163) + chr(hOrd01+128);
StrPos := StrPos + 1;
end;
tData := tData + tData01;
if Length(hData) < StrPos then
begin
ExitWhile := 0;
end;
end;
Result := tData;
end;
end.
Delphi 라벨프린터인쇄시 델7에서는 잘나오는데 XE7에서는 글자가 짤립니다
2016.05.02 11:33
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
B-452라벨프린터로 인쇄합니다 델파이7에서는 한글 영문 순자 모두 이상없이 나오는데 XE7으로 실행하면 '한글'만나오고 '-ABC-1234' 는 인쇄가 안됩니다 원인은 유니코드때문이라 추측하고 이것저것많이 해봤지만 해결을 못하여 문의드립니다
unit barcode7;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
function FnMiniBarcodePrint(v_Prodknm : AnsiString) : boolean;
function GetHangul452(HanData: AnsiString): AnsiString;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
FnMiniBarcodePrint('한글-ABC-1234'); // 한글인쇄 영문인쇄
end;
function TForm1.FnMiniBarcodePrint(v_Prodknm: AnsiString): boolean;
var OutFile : TextFile; //로 변수를 잡고서
sPrn : AnsiString ; //바코드 프린팅 명령어를 넣어주고
begin
sPrn := '{D0230,0550,0200|}';
sPrn := sPrn + '{C|}'; //버퍼크리어
sPrn := sPrn + '{AY;+00,0|}'; //+09->헤드온도
sPrn := sPrn + '{PC001;0050,0121,2,2,51,00,B|}'; //51->한글폰트 //한글인쇄
sPrn := sPrn + '{RC001;' + GetHangul452(v_Prodknm) + '|}';
sPrn := sPrn + '{XS;I,0001,0002C5100|}';
ShowMessage(GetHangul452(v_Prodknm));
try
AssignFile(OutFile, 'LPT1');
Rewrite(OutFile);
Writeln(OutFile, sPrn);
CloseFile(OutFile);
Result := true;
except
CloseFile(OutFile);
Result := false;
end;
end;
function TForm1.GetHangul452(HanData: AnsiString): AnsiString;
var
hData: AnsiString;
tData: Ansistring;
tData01: AnsiString;
hOrd01 : integer;
StrPos: integer;
ExitWhile: integer;
HanChar : array[0..5] of AnsiChar;
begin
hData := Trim(HanData);
tData := '';
StrPos := 1;
ExitWhile := 1;
while (ExitWhile <> 0) do
begin
strpcopy(HanChar,copy(hData, StrPos, 2));
hOrd01 := ord(HanChar[0]);
if copy(hData, StrPos, 1) > #128 Then
begin
tData01 := copy(Trim(hData), StrPos, 2);
StrPos := StrPos + 2;
end
else
begin
if copy(hData, StrPos, 1) = #32 Then
tData01 := chr(163) + chr(160);
tData01 := chr(163) + chr(hOrd01+128);
StrPos := StrPos + 1;
end;
tData := tData + tData01;
if Length(hData) < StrPos then
begin
ExitWhile := 0;
end;
end;
Result := tData;
end;
end.
델파이7과 XE7에서 유니코드 기반 문자열이라는 차이가 있습니다.
위 코드 중 Copy, Length 등을 잘 살펴보시기 바랍니다. 다음 링크의 문서가 도움이 되실것입니다.
http://tech.devgear.co.kr/?mid=delphi_news&page=10&document_srl=405017