Registriert seit: 6. Mai 2007
35 Beiträge
Turbo Delphi für Win32
|
Re: Stringrid: Nach dem Scrollen sind Zellen nicht gefärbt
2. Aug 2009, 09:51
Guten Morgen Frank,
hier ein Ausschnitt aus dem Code des OnDrawCell - Ereignisses, indem meiner Meinung nach der Fehler liegen muss - Begründung folgt...
Delphi-Quellcode:
(* Die zellenübergreifenden Beschriftungen *)
Canvas.Brush.Color := mylblue;
Canvas.Pen.Color := mylblue;
Canvas.Font.Style := [fsbold];
Canvas.Font.Color := clwhite;
If (arow = 0) or (arow = 9) then
begin
Myrect := Classes.Rect(0,ARow*(DefaultRowHeight+GridLineWidth),4*defaultColWidth+4*GridlineWidth,(ARow+1)*(DefaultRowHeight+GridLineWidth));
Canvas.Rectangle(MyRect.Left,MyRect.Top,MyRect.Right-1,MyRect.Bottom+1);
DrawText(Canvas.Handle,PChar(Cells[0,ARow]),-1,
Myrect,
DT_SingleLine or DT_Center or DT_VCENTER);
end else
If (arow = 1) or (ARow = 10) then
begin
Case acol of
0,1 :
begin
Myrect := Classes.Rect(0,ARow*(DefaultRowHeight+GridLineWidth),2*defaultColWidth,(ARow+1)*(DefaultRowHeight+GridLineWidth));
Canvas.Rectangle(MyRect.Left,MyRect.Top,MyRect.Right+1,MyRect.Bottom+1);
DrawText(Canvas.Handle,PChar(Cells[0,Arow]),-1,
Myrect,
DT_SingleLine or DT_Center or DT_VCENTER);
end;
2,3 :
begin
Myrect := Classes.Rect(2*defaultColWidth+2*GridlineWidth,ARow*(DefaultRowHeight+GridLineWidth),4*defaultColWidth+4*GridlineWidth,(ARow+1)* DefaultRowHeight+GridLineWidth));
Canvas.Rectangle(MyRect.Left,MyRect.Top,MyRect.Right-1,MyRect.Bottom);
DrawText(Canvas.Handle,PChar(Cells[2,ARow]),-1,
Myrect,
DT_SingleLine or DT_Center or DT_VCENTER);
end;
End;
end;
Begründung: Er zeichnet wie gesagt alles korrekt, aber sobald gescrollt wird und nur die erste Zeile aus dem Bild verschwindet und ich dann mit dem "Focus - Rechteck" über das Grid wandere (Maus oder Tastatur) zerlegt es meine Farbtruktur völlig, hier werden Zellen weiß, dann wieder blau bei Click usw.
Meine Lösung: Ich habe jetzt die farbigen Zellen für die Selektion in OnSelectCell gesperrt und zeichne die Zellen einzeln. Zellenübergreifende Begriffe stelle ich mit Textout dar und so funktioniert es bisher.
Wenn du trotzdem eine Idee hast, was es sein könnte, bin ich dankbar, zumal ich die Funktionsweise eines Stringgrids gern besser verstehen würde, z.B. was wird beim Scrollen ausgelöst?
MfG, Silvio
|