Q&A

  • èêëÕÑÏÎÎ 이런 문자를 인쇄하려하는데요..
tntEdit1.text에는 spécial Vérité èêëÕÑÏÎÎ 문자가 들어 있습니다.
화면에 정상적으로 출력되고요.

With Printer Do
begin
  beginDoc;
  Canvas.TextOut(20,  20, tntEdit1.Text);
  endDoc;
end;

이렇게 출력을 해보면 일반 알파벳으로 인쇄가 됩니다.  이미지 컴퍼넌트에 TextOut을 해봐도 알파벳으로
나오네요.. 인쇄할 방법이 없을까요?  Canvas의 폰트 설정을 Times New Roman 로 해도 안됩니다.

똑같은 코드표의 здравствуйте  이런 문자는 인쇄가 되는데 위의 문자가 않되네요.

위의 문자는   윈도우 시작>모든프로그램>보조프로그램>시스템도구>문자표
에서 Times New Roman  폰트에 들어있는 문자입니다.

3  COMMENTS
  • Profile
    이강석 2010.02.06 02:57
    흠..언어팩을 설치하셔야 할듯한데요...어떤 나라인지는 몰라도..
  • Profile
    최순경 2010.02.06 21:12
    unit Unit1;

    //이미지에 에디트 문자를 표시한 다음 이미지 자체를 인쇄하는 방법입니다.
    //인쇄는 직접해보았는데 글자 그대로 표시됩니다.

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, Printers, StdCtrls, ExtCtrls;

    type
    TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    tntEdit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    tntEdit1.Font.Name := 'Times New Roman';
    tntEdit1.Font.Size := 9; // 9로 인쇄해보니 글자크기가 조금 작네요.
    tntEdit1.Text := 'spécial Vérité èêëÕÑÏÎÎ';
    end;

    // 인쇄 루틴
    function PrintImage(aGraphic: TGraphic): Boolean;
    var
    R : TRect;
    begin
    Result:= True;
    try
    Printer.BeginDoc; // 인쇄 시작
    try
    R.Top := Trunc((20 / 25.4) * 96 * 6.00); // 20 = 위쪽여백
    R.Left := Trunc((15 / 25.4) * 96 * 6.00); // 15 = 좌측여백
    R.Right := R.Left + Trunc( aGraphic.Width * 6.2);
    R.Bottom:= R.Top + Trunc( aGraphic.Height * 6.2);
    Printer.Canvas.StretchDraw(R, aGraphic);
    finally
    Printer.EndDoc; // 인쇄 종료
    end;
    except // 인쇄중 에러가 생기면 이리로 빠져 나온다.
    Result:= False;
    end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Image1.Stretch:= False;

    // 25.4 은 1인치 2.54 cm 의 10배를 의미, 96 곱한것은 인치당 픽셀수
    // Image1.Top := 50;
    // Image1.Left:= 50;
    Image1.Width := Trunc(((197 - 15 - 15) / 25.4) * 96); // 197: A4용지 가로크기, -15: 좌측여백, -15: 우측여백
    Image1.Height:= Trunc(((254 - 20 - 15) / 25.4) * 96); // 254: A4용지 세로크기, -20: 위쪽여백, -15: 아래여백

    // 아래 2개의 코드는 이미지 크기가 변경되었을 경우에 꼭 동기화 해줘야 되는 코드
    Image1.Picture.Bitmap.Width := Image1.Width;
    Image1.Picture.Bitmap.Height:= Image1.Height;

    // Image1에 텍스트 표시
    Image1.Canvas.TextOut(10,10, tntEdit1.Text);

    // 인쇄 실행
    if not PrintImage( Image1.Picture.Graphic) then
    begin
    ShowMessage( '인쇄중 에러 발생' );
    end;
    end;

    end.
  • Profile
    cell 2010.02.09 00:15
    답변 감사합니다... 자체해결했습니다.
    TextOut이 String형으로 데이터를 넘겨 그러네요.. 이부분을 WideString형으로 넘겨서 처리되도록 변경하니 잘됩니다.