![]() |
Spalten zusammenfassen im Drawgrid
Hallo,
ich zeichne in einem Drawgrid selber, bekomme das was ich will aber nicht so richtig hin. Vielleicht hat wer einen Tip. Ein Drawgrid hat eine fixe Column. Die danach folgenden Columns stellen jeweils einen Tag im Jahr dar und können gescrollt werden. Die erste Row soll als Titelspalte, unabhängig vom scrollen jeweils die Jahreszahl enthalten. Folgenden Code verwende ich:
Delphi-Quellcode:
Paintjahr ist eine Routine in onDrawCell
procedure PaintJahr;
begin n := Grd.LeftCol + Grd.VisibleColCount; // n enthält die am weitesten rechts stehende Spalte if (acol = n) or (acol = Grd.LeftCol) then // nur in erster und letzter Spalte zeichnen begin Grd.Canvas.Font.Size := FontHeight; r := Grd.CellRect(Grd.LeftCol, 0); // erste sichtbare Spalte Rect := Grd.CellRect(n,0); // letzte sichtbare Spalte Rect.Left := r.Left; Grd.Canvas.FillRect(Rect); w := YearOf(d); Grd.Canvas.TextOut(rect.Left + 2, Rect.Top + 2, inttostr(w)); end; end; procedure TGantCtrl.GrdDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); Beim nach rechts scrollen verschwindet der Texteintrag und beim nach links scrollen kommt diese mehrfach. Hat wer einen Tip? Mit Gruß Peter |
Re: Spalten zusammenfassen im Drawgrid
Ich möchte das Thema noch mal hochbringen.
Mit nachfolgender Funktion möchte ich im Draw-Grid Zeilen verbinden. In der jeweils am weitesten links stehenden Zelle soll der Titel stehen. Ich mache das mit folgenden Code:
Delphi-Quellcode:
Aus dem Ereignis ondrawcell des TDrawgrid verhält sich der Code beim Scrollen völlig unlogisch.
procedure TForm2.PaintTitle;
var r1 : TRect; r2 : TRect; begin r1 := DrawGrid1.CellRect(DrawGrid1.LeftCol ,1); r2 := DrawGrid1.CellRect(DrawGrid1.LeftCol + DrawGrid1.VisibleColCount,1); r2.Left := r1.Left; DrawGrid1.Canvas.Brush.Color := cllime; DrawGrid1.Canvas.FillRect(r2); Drawgrid1.Canvas.TextOut(r1.Left+2,r1.Top+2,'Hallo'); end; Wie es aussieht zeichnet das Drawgrid erst und verschiebt dann den Bereich beim scrollen. Starte ich jedoch einen Timer und rufe die Procedure außerhalb von ondrawcell auf, dann funktioniert es wie gewünscht. Hat wer einen Tip wie ich das hinbekomme oder kann mir eine andere Componente empfehlen, mit der das geht. Sämtliche Einträge im Grid sind farbige Flächen (Gant-Diagramm) Mit Gruß Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz