掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TRichEditの情報をCanvasに描画したい (ID:46617)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
みなさんありがとうございます。 USES にRICHEDIT追加しました。 なんとか動きました。 Mr.XRAY氏のソースをお借りして、自分なりに使えるようにしました。 TImageと書いていましたが、実はフェイクで、TStringGridのOnDrawCellに記入していたのです。 以下の手続きにStringGridのセルのキャンバスとRect情報を入れたら望み通りになりました。 一部理解しきれてない部分もありますが、これでいけそうです。 //============================================================================= // RichEditの内容を描画 // X1 : 描画領域の左端X座標値 // X2 : 描画領域の右端X座標値 // Y1 : 描画領域の上端Y座標値 // Y2 : 描画領域の下端Y座標値 // RichEdit : TRichEdit //============================================================================= procedure Tfrm.RichEditDraw(Canvas:TCanvas;X1,X2,Y1,Y2: Integer; Rich: TRichEdit); var Range : TFormatRange; SaveMap : Integer; begin //Rangeを0(null)で埋める FillChar(Range, SizeOf(TFormatRange), #0); //出力先デバイスのハンドル Range.hdc := Canvas.Handle; //書式設定するデバイスのハンドル Range.hdcTarget := Range.hdc; //描画領域の指定 Range.rc.Left := MiliToPixcel(X1); Range.rc.Right := MiliToPixcel(X2); Range.rc.Top := MiliToPixcel(Y1); Range.rc.Bottom := MiliToPixcel(Y2); Range.rcPage := Range.rc; //テキストの最初から Range.chrg.cpMin := 0; //最後まで(-1で自動計算)/ Range.chrg.cpMax := -1; //マップモードMM_TEXTにして前のマップモードをSaveMapに保存 SaveMap := SetMapMode(Range.hdc, MM_TEXT); //バッファのフラッシュ} SendMessage(Rich.Handle, EM_FORMATRANGE, 0, 0); try //実際の印刷 SendMessage(Rich.Handle, EM_FORMATRANGE, 1, Longint(Addr(Range))); finally //バッファのフラッシュ SendMessage(Rich.Handle, EM_FORMATRANGE, 0, 0); //マップモードを元に戻す SetMapMode(Range.hdc, SaveMap); //TPrev(plPrev1).ScaleInitialize(Canvas, False); end; end; function TfrmMessage.MiliToPixel(V: Integer): Integer; var DC: HDC; dpi:Integer; begin DC := GetDC(0); dpi := GetDeviceCaps(DC,LOGPIXELSX);//96 ReleaseDC(0, DC); Result := Trunc(V * 1440 / dpi);//15で丁度いい end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.