Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Spalten zusammenfassen im Drawgrid (https://www.delphipraxis.net/151510-spalten-zusammenfassen-im-drawgrid.html)

hanspeter 20. Mai 2010 16:16


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:
 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;
Paintjahr ist eine Routine in onDrawCell

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

hanspeter 25. Mai 2010 10:52

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:
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;
Aus dem Ereignis ondrawcell des TDrawgrid verhält sich der Code beim Scrollen völlig unlogisch.
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