掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
2重表示をなくすには? (ID:40555)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>ただ、私のところでは、上1/3が白、下2/3がグレーの >グラデーションがかかったようになっています。 >ですので、1画面にデフォルトのままの表と >DrawCellで描画したのが混在しています。 >やはり、難しいんでしょうね。 質問者は StringGridのDrawingStyleプロパティをgdsThemed(デフォルト)にしているので、 DrawCellで自前のグラデーション描画をしているStringGridと デフォルト描画をしている StringGridを 一つの画面(Form)に並べて配置した場合に 両者の見た目が違ってしまって 困るということなのかな? D2010を持ってないので、ネットで D2010のStringGridが 実際どのように描画されている のかを調べたら、DrawingStyleプロパティをgdsGradinetに変更した場合には 固定セルが 普通のグラデーションで描画されるけど、DrawingStyleをgdsThemedのままにしてあると、 確かに1/3くらいを境として上部分が白、下部分はグレーのグラデーションで描画され ているように見える。 なので、デフォルトのgdsThemedの見た目と同じようにDrawCellで固定セルを描画するには ひと手間余計にかける必要があるけど、難しくはない。 もしかして、もう無理と思って諦めてしまった? それとも、すでに自力で解決した? procedure ThemedFillRect(Canvas: TCanvas; Rect: TRect); var R: TRect; Border: Integer; begin Border := (Rect.Bottom - Rect.Top) div 3; R := Rect; inc(R.Top, Border); GradientFillCanvas(Canvas, $FDF7F6, $DCD1D0, R, gdVertical); R := Rect; R.Bottom := R.Top + Border; Canvas.Brush.Color := $FFFFFE; Canvas.Brush.Style := bsSolid; Canvas.FillRect(R); Canvas.Brush.Style := bsClear; end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin with (Sender as TStringGrid) do begin if (gdFixed in State) then begin // DrawingStyleに応じて固定セルの塗り方を変える case DrawingStyle of gdsThemed : ThemedFillRect(Canvas, Rect); gdsGradient: GradientFillCanvas(Canvas, GradientStartColor, GradientEndColor, Rect, gdVertical); end; DrawText(Canvas.Handle, PChar(Cells[ACol,ARow]), -1, Rect, DT_SINGLELINE or DT_VCENTER or DT_RIGHT); end else begin end; end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.