Einzelnen Beitrag anzeigen

BetaBot

Registriert seit: 6. Mai 2007
35 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Stringrid: Nach dem Scrollen sind Zellen nicht gefärbt

  Alt 2. Aug 2009, 08: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
  Mit Zitat antworten Zitat