::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-07 10:31:41, Hit : 3774, Vote : 980
 RichEdit 의 내용을 Bitmap 으로 만들기 2

Yes, you can use the EM_FORMATRECT message to get the richedit to paint
its contents onto any canvas. Only take care to use TrueType fonts for
the control, with other fonts the scaling of the outout canvas will
sometimes not work properly. Here is an example:

unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

uses printers, richedit;
{$R *.DFM}


procedure TForm1.Button1Click(Sender: TObject);
var
  zoomfactor, xScale, yScale: Single;
  pagerect, outputrect  : TRect;
  fmtRange: TFormatRange;
begin
  zoomfactor := 0.5;
  xScale := Screen.PixelsPerInch / GetDeviceCaps( Printer.handle, LOGPIXELSX );
  yScale := Screen.PixelsPerInch / GetDeviceCaps( Printer.handle, LOGPIXELSY );
  // Size bitmap to 50% of size of a printer page and fill it white
  With image1.Picture.Bitmap Do
  Begin
    Width := Round( Printer.Pagewidth  * zoomfactor * xScale );
    Height:= Round( Printer.PageHeight * zoomfactor * yScale );
    With Canvas Do
    Begin
      Brush.Color := clWhite;
      Brush.Style := bsSolid;
      FillRect( Cliprect );
    End;
  End;

  // scale the bitmap canvas according to the zoomfactor
  With image1.Picture.Bitmap.Canvas Do
  Begin
    SetMapMode( handle, MM_ANISOTROPIC );
    SetWindowExtEx(handle,
                   Screen.PixelsPerInch, Screen.PixelsPerInch,
                   Nil);
    SetViewportExtEx(handle,
                   Round(Screen.PixelsPerInch * zoomfactor),
                   Round(Screen.PixelsPerInch * zoomfactor),
                   Nil);
  End;

  // set up a page rectangle for the rich edit control and
  // an output area inside, which gives us some margins. The
  // units here are twips (1/1440 inch).
  With image1.Picture.Bitmap Do
    pagerect := Rect( 0, 0,
                      Round(width * 1440 / Screen.PixelsPerInch / xScale),
                      Round(height * 1440 / Screen.PixelsPerInch / yScale) );
  outputrect := pagerect;
  InflateRect( outputrect, -720, -720 ); // 1/2 inch margin

  // set up the parameter record for EM_FORMATRANGE
  fillChar( fmtRange, sizeof(fmtrange), 0);
  With fmtRange Do
  Begin
    hDC := image1.Picture.Bitmap.Canvas.Handle;
    hdcTarget := hDC;
    rc := outputrect;
    rcPage := pagerect;
    chrg.cpMin := 0;
    chrg.cpMax := richedit1.GetTextLen-1;
  End;

  // format the text
  richedit1.Perform( EM_FORMATRANGE, 1, Longint(@fmtRange));
  // Free cached information
  richedit1.Perform( EM_FORMATRANGE, 0, 0);
end;

end.





491   [일반/컴포넌트] TRichEdit 의 선택된 영역만 인쇄하기  김영대 2003/03/07 4472 725
490   [시스템] CPU 종류 구하기  김영대 2003/03/07 4802 1194
489   [시스템] 사운드파일 없이 PC 스피커로 음악연주  김영대 2003/03/07 4637 923
488   [네트웍/인터넷] 프로그램으로 네트워크 드라이브 연결/해제  김영대 2003/03/07 6716 1250
487   [일반/컴포넌트] 윈도우즈 종료와 같은 그늘진 화면 만들기  김영대 2003/03/07 3138 840
486   [일반/컴포넌트] 아이콘 사이트  김영대 2003/03/07 3613 1067
485   [시스템] 윈도우즈 시스템 표준 폰트 구하기  김영대 2003/03/07 3019 850
484   [네트웍/인터넷] RS232 통신  김영대 2003/03/07 6916 1855
483   [일반/컴포넌트] 주어진 영역의 화면 캡처  김영대 2003/03/07 3558 1008
482   [일반/컴포넌트] 숫자를 영문 표기로 바꾸기  김영대 2003/03/07 4244 890
481   [일반/컴포넌트] 숫자를 한글 표기로 바꾸기  김영대 2003/03/07 3610 927
  [일반/컴포넌트] RichEdit 의 내용을 Bitmap 으로 만들기 2  김영대 2003/03/07 3774 980
479   [COM/OLE] MS-WORD 종료시키기  김영대 2003/03/07 2659 746
478   [윈도우즈 API] 시스템 사운드 연주하기  김영대 2003/03/07 4792 1297
477   [일반/컴포넌트] Algorithm to sort a TStringGrid #2  김영대 2003/03/07 4769 1201
476   [윈도우즈 API] 외부 프로그램의 좌표,상태 구하기  김영대 2003/03/07 3162 1014
475   [윈도우즈 API] 윈도우즈 Telnet 으로 호스트 접속하기  김영대 2003/03/07 4065 1117
474   [일반/컴포넌트] 특정한 폴더로 이동한 DOS 창 띄우기  김영대 2003/03/07 4107 1134
473   [시스템] DOS 명령어 실행하고 결과 받아오기  김영대 2003/03/07 6537 1548
472   [윈도우즈 API] NT의 현재 user가 administrative privilege 를 가지고 있는지?  김영대 2003/03/07 2982 812
471   [일반/컴포넌트] 두개의 StringGrid sync 마추기  김영대 2003/03/07 3696 1017
470   [일반/컴포넌트] 윈도우의 title bar 폰트 바꾸기  김영대 2003/03/07 3223 841
469   [네트웍/인터넷] 네트워크 공유 설정/해제 하기 (Windows 9x)  김영대 2003/03/07 4389 1078
468   [네트웍/인터넷] 네트워크 공유 정보 읽어오기 (WIndows 9x)  김영대 2003/03/07 3648 990
467   [일반/컴포넌트] 눌려진 키보드 키의 명칭 구하기  김영대 2003/03/07 7373 1437
466   [윈도우즈 API] Windows98 에서의 SetForegroundWindow  김영대 2003/03/07 5737 1489
465   [윈도우즈 API] Task bar 에 나타나지 않는 프로그램 만들기  김영대 2003/03/07 5147 1509
464   [COM/OLE] Outlook 사용하기  김영대 2003/03/07 3469 1090
463   [시스템] 지정한 drive가 CD-ROM 인지 검사하기  김영대 2003/03/07 6285 1649
462   [시스템] 어떤 어플리케이션이 시작 되는지 hook으로 알아내기  김영대 2003/03/07 5101 1519
461   [윈도우즈 API] 윈도우즈 탐색기의 아이콘 뽑아내서 사용하기  김영대 2003/03/07 6456 1888
460   [윈도우즈 API] System Images  김영대 2003/03/07 6303 1828
459   [윈도우즈 API] 컴퓨터/파일/폴더 찾기 화면 띄우기  김영대 2003/03/07 6156 1470
458   [일반/컴포넌트] Unix-format time 을 TDateTime 로 바꾸기  김영대 2003/03/07 4094 1121
457   [일반/컴포넌트] 실행시 component 를 Move/Resize 시키기  김영대 2003/03/07 3308 952
456   [일반/컴포넌트] TMemo 를 화면크기로 인쇄하기  김영대 2003/03/07 2768 696
455   [일반/컴포넌트] SpeedButton 에 OnMouseEnter/OnMouseExit 이벤트 넣기  김영대 2003/03/07 3943 1041
454   [윈도우즈 API] 키보드의 Scroll Lock 켜기/끄기  김영대 2003/03/07 4149 1135
453   [데이터베이스] table packing 하기  김영대 2003/03/07 3466 1004
452   [윈도우즈 API] reboot Windows  김영대 2003/03/07 3874 1120

[이전 10개] [1]..[11][12] 13 [14][15][16][17][18][19][20]..[25] [다음 10개]
 

Copyright 1999-2022 Zeroboard / skin by zero