掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
フォントスタイルにItalicを使っても、重なった部分を描くようにするには? (ID:38000)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Taka さん ありがとうございます。 試してみましたが、教えてもらったぶんでは、文字描画の開始位置がもともとの描画開始位置から右にずれてしまいます。 そこで、DT_centerをDT_leftにしたら、描画開始位置はもともとのものとそろいました。 これは、DT_NOCLIPを追加した場合と同じように描けたので、この方法もよいと思います。 ありがとうございました。 KHE00221 さん ありがとうございます。 KHE00221さんはいろいろ作っていて、とてもすごいと思いました。 また分からないことがあったら、たずねたいなと思いました。 よろしくお願いします。 ---------------------------------------------------- procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var r,i, W, H: integer; S: string; DRect: TRect; Flg:Cardinal ; StartX:integer; begin StartX:=x; canvas.MoveTo(startx,0 ); canvas.LineTo(startx,height ); S:='あいうえおかきくけこ'; Canvas.Brush.Style:= bsClear; Canvas.font.size:=20; Canvas.font.style:=[fsItalic]; //①教えてもらったぶん for i := 0 to trunc(length(S)/2)-1 do begin w:=canvas.TextWidth(copy(S,i*2+1,2)); h:=canvas.TextHeight(copy(S,i*2+1,2)); Drect.Left:=x; Drect.top:=y; Drect.Right :=x+w+ Canvas.TextWidth(' '); Drect.Bottom :=y+h; flg:=DT_center + DT_SINGLELINE + DT_VCENTER; DrawText(Canvas.Handle, pchar(copy(S,i*2+1,2)), -1, DRect, flg ); x:=x+w; end; canvas.MoveTo(x,0 ); canvas.LineTo(x,height ); //②もともとのぶん x:=StartX; y:=y+h; for i := 0 to trunc(length(S)/2)-1 do begin w:=canvas.TextWidth(copy(S,i*2+1,2)); h:=canvas.TextHeight(copy(S,i*2+1,2)); Drect.Left:=x; Drect.top:=y; Drect.Right :=x+w;//+ Canvas.TextWidth(' '); Drect.Bottom :=y+h; flg:=DT_center + DT_SINGLELINE + DT_VCENTER; DrawText(Canvas.Handle, pchar(copy(S,i*2+1,2)), -1, DRect, flg ); x:=x+w; end; //③おしえてもらったものをDT_LEFTにしたぶん x:=StartX; y:=y+h; for i := 0 to trunc(length(S)/2)-1 do begin w:=canvas.TextWidth(copy(S,i*2+1,2)); h:=canvas.TextHeight(copy(S,i*2+1,2)); Drect.Left:=x; Drect.top:=y; Drect.Right :=x+w+ Canvas.TextWidth(' '); Drect.Bottom :=y+h; flg:=DT_left + DT_SINGLELINE + DT_VCENTER; DrawText(Canvas.Handle, pchar(copy(S,i*2+1,2)), -1, DRect, flg ); x:=x+w; end; //④もともとのにDT_NOCLIPを追加したぶん x:=StartX; y:=y+h; for i := 0 to trunc(length(S)/2)-1 do begin w:=canvas.TextWidth(copy(S,i*2+1,2)); h:=canvas.TextHeight(copy(S,i*2+1,2)); Drect.Left:=x; Drect.top:=y; Drect.Right :=x+w;//+ Canvas.TextWidth(' '); Drect.Bottom :=y+h; flg:=DT_center + DT_SINGLELINE + DT_VCENTER + DT_NOCLIP ; DrawText(Canvas.Handle, pchar(copy(S,i*2+1,2)), -1, DRect, flg ); x:=x+w; end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.