喫茶XRAYトップページ

[スレッド全体
]

[9940] Re2:TStringGridのセルの塗り潰し返信 削除
2016/5/16 (月) 17:57:44 Mr.XRAY
▼ 福士さん

> となっています。つまりXE2以降でDefaultDrawing=Trueかつ*スタイル(テーマ)有効*だと
> 左4pixelがDrawCell=OnDrawCellの対象外になる、ということのようです。
> なんでこんな風になっているのかはよくわかりません。


ははぁ〜,なるほど,ソースコードまでは確認しませんでした.
XE でテーマ関係の描画で,マージンがないと問題でもあったのかも...
で,やってみました.領域の左端を - 4 にしたのが図の下の図です.
コードは以下です.
-5 にすると,左側のセルを選択した時に 1 px (?) 右のセルの背景に欠損が
生じるようです.
これから ML にレス書いてみます.

//  動作確認 Windows 7 U64(SP1) + Delphi XE7

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if ACol = 2 then begin
    Rect.Left := Rect.Left - 4;
    StringGrid1.Canvas.Brush.Style := bsSolid;
    StringGrid1.Canvas.Brush.Color := RGB(0, 150, 0);
    StringGrid1.Canvas.FillRect(Rect);
  end;
end;



[9941] Re3:TStringGridのセルの塗り潰し返信 削除
2016/5/16 (月) 18:06:57 Mr.XRAY
> で,やってみました.領域の左端を - 4 にしたのが図の下の図です.
> コードは以下です.
> -5 にすると,左側のセルを選択した時に 1 px (?) 右のセルの背景に欠損が
> 生じるようです.


このスレッドをご覧の方に注意を.
左端の位置を調整することで,Delphi XE と同じぐらいにはなりましたが,
これによって,他の描画に影響があるかも知れません.


[9948] Re3:TStringGridのセルの塗り潰し返信 削除
2016/5/16 (月) 21:19:02 Mr.XRAY
> で,やってみました.領域の左端を - 4 にしたのが図の下の図です.
> コードは以下です.


Delphi ML の書き込みの 10 px だと以下の図のような感じですね.
10 px はかなり目立ちます.


[9949] Re4:TStringGridのセルの塗り潰し返信 削除
2016/5/16 (月) 21:20:22 Mr.XRAY
> > で,やってみました.領域の左端を - 4 にしたのが図の下の図です.
> > コードは以下です.
>
> Delphi ML の書き込みの 10 px だと以下の図のような感じですね.
> 10 px はかなり目立ちます.


では昔はどうだったのか.Delphi 6 の場合です.
フォームに TStringGrid を配置して,前に示したイベントだけを実行した結果です.


[9950] Re4:TStringGridのセルの塗り潰し返信 削除
2016/5/16 (月) 22:38:27 igy
▼ Mr.XRAYさん
> Delphi ML の書き込みの 10 px だと以下の図のような感じですね.
> 10 px はかなり目立ちます.


Delphi 10.1 Berlinで試してみました。

私の場合、Delphi XE以前のバージョンもよく使うので、
以下のような感じで調整しています。

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
{$IFDEF CONDITIONALEXPRESSIONS}
  {$IF Declared(CompilerVersion) and (CompilerVersion >= 23.0)}
    Rect.Left := Rect.Left - 4;
  {$IFEND}
{$ENDIF}

  if ACol = 2 then begin
    StringGrid1.Canvas.Brush.Style := bsSolid;
    StringGrid1.Canvas.Brush.Color := RGB(0, 150, 0);
    StringGrid1.Canvas.FillRect(Rect);
  end;
end;


[9952] Re5:TStringGridのセルの塗り潰し返信 削除
2016/5/16 (月) 23:50:49 Mr.XRAY
▼ igyさん,サンクスです.

> Delphi 10.1 Berlinで試してみました。

なるほど.となると,Delphi ML の方の 10 px は左側のマージンが多いと
いう意味の表現ですね.きっと.
福士さんの調査結果の Delphi XE2 以降ということになりそうです.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82