それはDrawFocusRect
を使用して簡単に見えるかもしれませんが、あなたは、長方形以外のものを描画する必要がある場合は、先に読むことをお勧めします。
ペンスタイルpsDot
は、すべての2番目のピクセルが着色され、もう1つのピクセルがクリアされることを意味しません。あなたがそれについて考えると、解像度が高いほど、点線と灰色の固体f.exの違いを見るのが難しくなります。ピクセルを交互に変更する別のペンスタイルpsAlternate
があります。ドキュメントは言う:
psAlternate
ペンが他のすべてのピクセルを設定します。 (このスタイルは 化粧ペンにのみ適用されます)このスタイルは、 ExtCreatePen API関数で作成されたペンでのみ有効です。 (MS Windows SDKのドキュメントを参照してください。)これは、VCLとVCL.NETの両方の に適用されます。
ペンを定義し、最終的にそれは(拡大鏡が×10である)のように見えるもの
var
c: TCanvas;
oldpenh, newpenh: HPEN; // pen handles
lbrush: TLogBrush; // logical brush
...
c := pbx.Canvas; // pbx is a TPintBox, but can be anything with a canvas
lbrush.lbStyle := BS_SOLID;
lbrush.lbColor := clBlack;
lbrush.lbHatch := 0;
// create the pen
newpenh := ExtCreatePen(PS_COSMETIC or PS_ALTERNATE, 1, lbrush, 0, nil);
try
// select it
oldpenh := SelectObject(c.Handle, newpenh);
// use the pen
c.MoveTo(0, 0);
c.LineTo(0, pbx.Height - 1);
c.LineTo(pbx.Width - 1, pbx.Height - 1);
c.LineTo(pbx.Width - 1, 0);
c.LineTo(0, 0);
c.Ellipse(3, 3, pbx.width-3, pbx.Height-3);
// revert to the old pen
SelectObject(c.Handle, oldpenh);
finally
// delete the pen
DeleteObject(newpenh);
end;
に従い、として私たちはそれを使用する

、これをありがとう非常にうまくいく!しかし、ちょうど好奇心から:私のコードの結果に本当の点の代わりに小さなダッシュ(あなたの例のような)があるのはなぜですか? – user1580348