度々すみません。STRINGGRIDについてよろしくお願いします。
タイトルのとおり、第1列を固定列にしているのですが、この列のみそれ以外のセルとフォントサイズを変えたいのです。
過去の書き込み、検索等調べたのですが分かりません。
よろしくお願いいたします。
if (StringGrid1.Col <= StringGrid1.FixedCols) then
with StringGrid1 do begin
Canvas.Font.Name := 'MS ゴシック'; // ←ここ追加
Canvas.FillRect(Rect);
S := Cells[ACol,ARow];
DrawText(Canvas.Handle, Pchar(S), Length(S), Rect, DT_SingleLine or DT_VCenter or DT_Center);
end;
あとは"固定列"の条件をつけてOKだと思います。
http://www.geocities.co.jp/SiliconValley-SanJose/2560/delphi4/graphics/TFont.htm
ん〜、前の書き込みから考えるに何か誤解しているような気がします。
(していなかったらごめんなさい。)
今回の場合、StringGridの標準描画をoff(DefaultDrawing=False)にして、
OnDrawCellに自前の描画ルーチンを書いてあげることで実現可能だと思います。
標準描画された後に文字を表示しているから2重に表示される。
FillRectで文字が表示された後に、ベタで塗りつぶしをしているから、
1つ目の文字が消去され、2回目の文字描画だけが残り
文字が1つになったように見える。
要するに、標準描画機能が邪魔なわけです。
DefaultDrawingをFalseにして
OnDrawCellイベントに、以下のプログラムを追加してみてください。
他の属性は考えてみてくださいね。
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with StringGrid1.Canvas do begin
// 条件による各種設定
if gdFixed in State then begin
// ========== 固定行設定
Brush.Color := StringGrid1.FixedColor;
// ========== 文字設定
Font := StringGrid1.Font;
Font.Name := 'MS ゴシック';
end else if (gdSelected in State) and Not(gdFocused in State) then begin
// ========== 選択状態でフォーカスがない場合の設定
Brush.Color := clHighLight;
// ========== 文字設定
Font := StringGrid1.Font;
Font.Color := clWindow;
end else begin
// ========== 通常状態・フォーカス状態の色
Brush.Color := StringGrid1.Color;
// ========== 文字設定
Font := StringGrid1.Font;
end;
// ========== 下地描画
FillRect(Rect);
// ========== 文字描画
InflateRect(Rect, -2, -2);
DrawText(Handle, PChar(StringGrid1.Cells[ACol, ARow]), -1, Rect,
DT_VCENTER or DT_CENTER or DT_SINGLELINE);
InflateRect(Rect, 2, 2);
// ========== 固定行影描画
if (gdFixed in State) and StringGrid1.Ctl3D then begin
Pen.Color := clBtnHighlight;
Polyline([Point(Rect.Left, Rect.Bottom - 1), Rect.TopLeft,
Point(Rect.Right, Rect.Top)]);
end;
// ========== フォーカス枠描画
if gdFocused in State then
DrawFocusRect(Rect);
end;
end;
まちだ様、moru様、早速のご教示ありがとうございます。
おかげで解決しました。
おっしゃるようにまったく誤解というか、判っていないというか、でした。
私はVB6からDELPHIに転向を試みている最中です。VB6はヘルプもサンプルコードが親切で、それなりのことが、それなりに出来てきたのですがDELPHIは、やはり構造をしっかり理解しないとなかなか進まないなーと実感しています。それでも、納期は待ってくれませんので、参考書を傍らに悪戦苦闘しています。
こんなことまでいちいち書き込むなよ!と言う声が聞こえそうですが、とにかくこのサイトが頼りです。
今後もどうぞよろしくお願いします。
ツイート | ![]() |