TDBGrid、完全な行選択、および常にフォーカスを当てていない場合でも常に選択を表示して完全にオーナー描画する場合は、非推奨のイベントOnDrawDataCell
と新しいイベントDrawColumnCell
を選択しました。後者はこの試してみてください。TDBGrid.DefaultDrawingがfalseの場合、Full Row Selected TDBGridの適切なオーナー描画を行うにはどうすればよいですか?
procedure TDbGridTestForm.mygridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if gdSelected in State then begin
// mygrid.DrawCellHighlight(Rect, State, Col, Row);
mygrid.Canvas.Brush.Color := clHighlight;
mygrid.Canvas.Font.Color := clHighlightText;
mygrid.Canvas.FillRect(Rect);
end;
mygrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
そして、何狂気私を運転しているフォーカス指標である(ハイライトカラーと長方形を集中)がDefaultDrawColumnCellコードによって描かれた、と私は私が代わりにDrawCellHighlight起動する必要があると確信していません私が上でやっているFillRectハックをやっているのです。
DefaultDrawingをオンにすると、グリッド(奇数フォントペイントの問題)が1つ発生し、それをオフにすると別のグリッドセット(gdSelectedでもハイライトなし)が表示されます。
DBGrids.pas DefaultDrawColumnCell
のコードは、テキストのペイント以外は何もしません。あなたがすべての描画コードを自分で引き継ぐならば、明らかに、あなたはより多くのことをするはずです。ただし、Grids.pasに組み込まれているハイライト描画コード(DBGrids.pasが依存する)は、このコンテキストから呼び出されるようには設計されていません。私はDrawCellHighlight
を直接呼び出すべきか(上でコメントアウトされているか)、ColとRowの値を計算しなければならないか、あるいは手動でさまざまなケースを扱う独自の複雑なバージョンのTCustomGrid.DrawCellHighlightを書くべきかどうかはわかりません。
確かにこれはとても単純で明白ですが、私はそれを見落としています。私はDefaultDrawingをオフにしておかなければならないので、私はオーナーの描画イベントから完全にペイントしなければならず、テーマサービスが利用できないときに実行できなければならず、テーマサービスが利用可能なときに使用する必要があります。だから、私はTCustomGrid.DrawCellHighlightを直接呼び出す必要があります(そして私にはわからない)、または私はそれを完全に再実装する必要があります。
十分に合理的に見えること。 –
@Mike W、行の背景色を変更するにはどうすればよいですか? – Ganesh
tHackGrid(mygrid).Canvas.Brush.Color:= clRed; //作業していない!! – Ganesh