名前 題名 ▼ 宮さん > ▼ ANDYさん > > ▼ 宮さん > > > > 参考までに私の場合、次のようにしています。 > > > ANDYさんありがとうございます。私のレベルは初級クラスですがらすぐには > どこに入れたらいいのか理解できませんが、 > 参考にしていろいろ挑戦してみます。できれば自動判別したいですね。 > > ちなみに私のコードはMR.XRAYさんの > http://mrxray.on.coocan.jp/Delphi/plSamples/index.htm > そのままです。それに四苦八苦して付け足したりして、 > 自分で何をやっているのか判らないで使っています。(plPrevを理解していない) > ベテランからみれば「なんじゃ?こりゃ!」だと思いますが。 > > 参考までにコードは下記の通りです。 > procedure TForm1.actTextPrintExecute(Sender: TObject); > begin > plPrev1.Title:=ExtractFileName(formMDI.ComboBox1.Text); //ページのタイトルとして印刷する > > //マージンセット > plPrev1.TopMargin :=StrToInt(EditUp.Text) *10; > plPrev1.BottomMargin :=StrToInt(EditBottom.Text) *10; > plPrev1.LeftMargin :=StrToInt(EditLeft.Text) *10; > plPrev1.RightMargin :=StrToInt(EditRight.Text)*10; > > > RichEditPrint( plPrev1.LeftMargin , > Ceil(plSetPrinter1.PaperWidth*254.0/plSetPrinter1.XResolution)-plPrev1.RightMargin, > plPrev1.TopMargin, > Ceil(plSetPrinter1.PaperHeight*254.0/plSetPrinter1.YResolution)-plPrev1.BottomMargin, > RichEdit1); > > plPrev1.ShowModal; > end; > //--------------------------------------------------------------描画ルーチン > > procedure TForm1.RichEditPrint(X1,X2,Y1,Y2: Integer; Rich: TRichEdit); > function MiliToTwips(V: Integer): Integer; > begin > Result:=Trunc(V*1440.0/254.0); > end; > var > Range : TFormatRange; > LastChar : Integer; > MaxLen : Integer; > OldMap : Integer; > begin > LastChar := 0; > MaxLen := Rich.GetTextLen; > Range.chrg.cpMin:=0; //テキストの最初から > > plPrev1.BeginDoc; > try > repeat //毎回Rangeにセット > //--------------------------------------------------------------ヘッ・#95;ー印刷 > plPrev1.FontHeight(MiliToTwips(5));//60); > plPrev1.TextOut((Ceil(plSetPrinter1.PaperWidth*254.0/plSetPrinter1.XResolution) div 3) > ,MiliToTwips(10) > ,ExtractFileName(formMDI.ComboBox1.Text)); > //--------------------------------------------------------------本文印刷 > > FillChar(Range, SizeOf(TFormatRange), 0); //Rangeを0(null)で埋める > Range.hdc := plPrev1.Canvas.Handle; //出力先デバイスのハンドル > Range.hdcTarget := Range.hdc; //書式設定するデバイスのハンドル > Range.rc.Left :=MiliToTwips(X1); //描画領域の指定(Twips単位) > Range.rc.Right :=MiliToTwips(X2); //最初の頁だけ印刷位置などを変更する場合は分岐処理する > Range.rc.Top :=MiliToTwips(Y1); //ミリ単位をピクセルに変換する > Range.rc.Bottom :=MiliToTwips(Y2); > Range.rcPage := Range.rc; //用紙1頁のサイズ//本当は用紙サイズをTwipsで指定すべき? > Range.chrg.cpMax:= -1; //最後まで(-1で自動計算) > OldMap := SetMapMode(Range.hdc,MM_TEXT); //マップモードMM_TEXTにして前のマップモードをSaveMapに保存 > SendMessage(Rich.Handle, EM_FORMATRANGE, 0, 0); //バッファのフラッシュ > try > Range.chrg.cpMin:=LastChar; //この頁の開始は前の最後の文字から > > LastChar:=SendMessage(Rich.Handle,EM_FORMATRANGE,1,Longint(@Range)); //実際の印刷 > if (LastChar<MaxLen) and (LastChar<>-1) then //まだ印刷すべきデータがある場合は改頁 > begin > plPrev1.NewPage; > end; > finally > SendMessage(Rich.Handle, EM_FORMATRANGE,0,0); //バッファのフラッシュ > SetMapMode(Range.hdc,OldMap); //マップモードを元に戻す > TPrev(plPrev1).ScaleInitialize(plPrev1.Canvas,False); //TplPrevでは0.1mmm単位に戻すということ > end; > until (LastChar >= MaxLen) or (LastChar = -1); > finally > plPrev1.EndDoc; > end; > end; > > //--------------------------------------------------------------フッター印刷 > procedure TForm1.plPrev1BeforeView(Sender: TObject; Page: Integer); > var > PageStr: String; > begin > //文字のサイズ > plPrev1.FontSize(10); > //頁番号の文字列を作成 > PageStr:=IntToStr(Page)+'/'+IntToStr(plPrev1.PageCount); > plPrev1.TextOut(Trunc((Ceil(plSetPrinter1.PaperWidth*254.0/plSetPrinter1.XResolution) div 2)) > ,Ceil(plSetPrinter1.PaperHeight*254.0/plSetPrinter1.YResolution)-80 > ,PageStr); > end; > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link