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

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


Category

  김영대(2003-03-07 10:31:41, Hit : 3961, Vote : 1465
 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.





691   [일반/컴포넌트] QReport 를 bmp 로 변환하기  김영대 2003/03/07 3368 884
690   [일반/컴포넌트] QReport에서 출력된 자료를 Text화일로 저장  김영대 2003/03/04 4797 1296
689   [데이터베이스] Query.RecordCount = -1  김영대 2003/03/07 5328 1237
688   [데이터베이스] Query한 결과를 수정하기...  김영대 2003/03/07 5054 1229
687   [알고리즘] Quick Sort algorithm  김영대 2003/03/06 3365 966
686   [일반/컴포넌트] QuickReport에서 프린터 바꾸어서 출력하기  김영대 2003/03/06 6654 1626
685   [네트웍/인터넷] Read/Write to COM Port  김영대 2003/03/07 5253 1255
684   [시스템] reboot 95/98/NT  김영대 2003/03/07 4705 1334
683   [윈도우즈 API] reboot Windows  김영대 2003/03/07 4046 1172
682   [데이터베이스] Record Lock 검사  김영대 2003/03/07 4454 1168
681   [데이터베이스] Record number for SQL Query in DBGrid #1  김영대 2003/03/05 4855 1120
680   [데이터베이스] Record number for SQL Query in DBGrid #2  김영대 2003/03/05 4762 1165
679   [시스템] Redirecting DOS Application Output  김영대 2003/03/06 4982 1258
678   [COM/OLE] Registering *.tlb files without Delphi  김영대 2003/03/06 6907 1173
677   [윈도우즈 API] Resize 가능한 Caption Bar 없는 폼 만들기  김영대 2003/03/05 4980 1108
676   [네트웍/인터넷] RFC: Request for Comments  김영대 2003/03/05 7950 2085
675   [일반/컴포넌트] RichEdit 2.0 줄간격 조정  김영대 2005/02/11 8988 1449
674   [일반/컴포넌트] RichEdit 에 tab 설정하기  김영대 2003/03/07 4498 1182
673   [일반/컴포넌트] RichEdit 에 URL link 만들기  김영대 2004/08/04 6234 1469
672   [일반/컴포넌트] RichEdit 에서 문자(열)를 찾아 글자속성 바꾸기  김영대 2003/03/06 4948 1243
671   [일반/컴포넌트] RichEdit 에서 커서를 처음, 마지막으로 보내기  김영대 2003/03/06 7231 1543
670   [일반/컴포넌트] RichEdit 의 내용을 Bitmap 으로 만들기  김영대 2003/03/06 3515 911
  [일반/컴포넌트] RichEdit 의 내용을 Bitmap 으로 만들기 2  김영대 2003/03/07 3961 1465
668   [일반/컴포넌트] RichEdit 의 마우스 커서 아래의 글자 구하기  김영대 2004/07/27 4908 1134
667   [일반/컴포넌트] RichEdit 화면에 보여지는 첫번째/마지막 행번호  김영대 2003/03/07 5674 1482
666   [윈도우즈 API] RichEdit에 입력한 문장의 실제 높이 구하기  김영대 2003/03/06 5258 1471
665   [일반/컴포넌트] RichEdit에서 HTML 태그를 다른색으로 표시하기  김영대 2003/03/07 5920 1317
664   [윈도우즈 API] RichEdit에서 URL을 HyperLink 로 표시하기  김영대 2003/03/31 5775 1332
663   [일반/컴포넌트] RichEdit의 왼쪽에 여유(margin) 두기  김영대 2003/03/05 6196 1693
662   [일반/컴포넌트] RichEdit의 특정 위치의 글자 속성 바꾸기  김영대 2003/03/05 6522 1738
661   [시스템] ROM-BIOS 정보 읽기  김영대 2003/03/07 5567 1326
660   [네트웍/인터넷] RS232 통신  김영대 2003/03/07 7197 1889
659   [일반/컴포넌트] Ruler 콤포넌트(레포트 디자인,에디터에서 사용가능)  김영대 2003/03/05 4020 1077
658   [데이터베이스] Save DBGrid To Excel  김영대 2003/03/06 7409 2114
657   [일반/컴포넌트] ScrollBox 에 배경그림 넣기  김영대 2003/03/14 4146 1116
656   [일반/컴포넌트] Search and Select  김영대 2004/08/03 6060 1667
655   [네트웍/인터넷] Sending Raw IP Packets  김영대 2003/03/07 6867 1806
654   [네트웍/인터넷] Serial Port 사용하기  김영대 2003/03/07 7071 1818
653   [시스템] Shareware 프로그램 만들기 - 사용횟수 제한  김영대 2003/03/05 6147 1632
652   [알고리즘] Shell Sort algorithm  김영대 2003/03/06 5984 1811

[1][2][3][4][5][6][7] 8 [9][10]..[25] [다음 10개]
 

Copyright 1999-2024 Zeroboard / skin by zero