Du mußt (wie im Beispiel) das zu zeichnende Rechteck (rect) aud die gesamte Zeile erweitern.
Das ist nicht das Problem, das Problem ist, wenn das Grid zu klein ist und gescrollt wird , dann gibt es beim Selbstzeichnen Probleme.
Außerdem mußt du wenn du in Zelle [0,1] über den rand was zeichnest, verhindern, das du in Zelle [1,1] wieder was reinschreibst.
ansatzweise kannst dus so machen:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
stringgrid1.Cells[0,1] := 'Ich bin über alle Spalten in Zeile 2 zu sehen';
stringgrid1.Cells[0,0] := 'test';
stringgrid1.Cells[2,2] := 'test 2';
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with Sender as Tstringgrid do
begin
if (arow=1) then
begin
//das zu zeichnende Rechteck auf die gesamte Zeile erweitern
rect:=classes.rect(0,rect.top,GridWidth,rect.Bottom);
//Hintergrund
canvas.Brush.Color := fixedcolor;
canvas.FillRect(rect);
frame3d(canvas,rect,clBtnHighlight,clBtnShadow,1);
//text (immer aus Cells [0,1] holen
canvas.textout(rect.Left+2,rect.top+2,cells[0,1]);
end;
//keine weiteren fixierten Zellen selbst zeichnen
if gdfixed in state then exit;
//normale zellen
//Hintergrund
canvas.FillRect(rect);
//text
canvas.textout(rect.Left+2,rect.top+2,cells[aCol,Arow]);
end;
end;
Was du vorhast ist möglich, wenn dus perfekt machen willst, mußt Du aber nochwas tun
Mfg Frank