掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Stringgridのセル内複数行表示の色つけについて (ID:45770)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
procedure TForm1.FormCreate(Sender: TObject); begin StringGrid1.Cells[1,1] := 'A父Bと11母22'#13#10'妹33'#13#10'44弟'#13#10; //最後改行あり StringGrid1.Cells[2,1] := '父'#13#10'11母22'#13#10'妹'; //最後改行なし StringGrid1.Cells[3,1] := '父'#13#10'母'; StringGrid1.Cells[4,1] := '父母'; StringGrid1.ColWidths[1] := 100; StringGrid1.RowHeights[1] := 50; end; var Keys: array[0..3] of String = ('父','母','妹','弟'); FontColors: array[0..3] of TColor = (clRed,clBlue,clGreen,clYellow); procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var I,J,K: Integer; S1: String; DefaultColor: TColor; Text: String; BRect: TRect; begin if not ( gdFixed in state ) then begin DefaultColor := StringGrid1.Font.Color; StringGrid1.Canvas.Brush.Color := StringGrid1.Color; StringGrid1.Canvas.FillRect(Rect); Text := StringGrid1.Cells[ACol,ARow]; //全体文字 BRect := Rect; I := 1; while (I < Length (Text)) do begin K := -1; for J := Low ( Keys ) to High ( Keys ) do begin if Copy(Text,I,Length(Keys[J])) = Keys[J] then K := J; end; if ( K <> -1 ) then begin StringGrid1.Canvas.Font.Color := FontColors[K]; StringGrid1.Canvas.TextRect(BRect,BRect.Left,BRect.Top,Keys[K]); StringGrid1.Canvas.Font.Color := DefaultColor; BRect.Left := BRect.Left + StringGrid1.Canvas.TextWidth(Keys[K]); I := I + Length (keys[K]); end else begin if ( Copy(Text,I,2) = #13#10 ) then begin BRect.Left := Rect.Left; BRect.Top := BRect.Top + StringGrid1.Canvas.TextHeight('A'); //A は適当 Inc(I); end else begin S1 := Copy(Text,I,1); StringGrid1.Canvas.TextRect(BRect,BRect.Left,BRect.Top,S1); BRect.Left := BRect.Left + StringGrid1.Canvas.TextWidth(S1); end; Inc(I); end; end; StringGrid1.Canvas.Font.Color := DefaultColor; end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.