AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi VST TVirtualStringTree Grafiken in Zelle zeichnen, Loop
Thema durchsuchen
Ansicht
Themen-Optionen

VST TVirtualStringTree Grafiken in Zelle zeichnen, Loop

Ein Thema von Pichel · begonnen am 7. Apr 2006
Antwort Antwort
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#1

VST TVirtualStringTree Grafiken in Zelle zeichnen, Loop

  Alt 7. Apr 2006, 06:57
Hi.

Hatte ein mich irre machendes Problem mit dem VirtualStringTree für welches ich auch hier im Forum sowie direkt im softGem-Forum keine Hilfe fand.
Da ich aber denke Sinn eines Forums ist auch Lösungen anderen bereit zu stellen (zum anderen wenn ich es vergessen sollte finde ich es nun hier im Forum selber wieder ) hier nun meine Problembeschreibung und Lösung.

Ich wollte einfach "nur" im VirtualStringTree (btw: absolut genial!) in einer Zelle mehrer Grafiken per Draw aus einer Imageliste zeichnen.
Nun war es egal wo ich das plazierte (onBeforeCellPaint, onAfterCellPaint und andere Events versuchte) es kam immer zu einen nicht endenden Loop.

Das Problem war, das ich im Event den DrawingStyle der auch im VST eingetragenen ImageList von dsNormal auf dsTransparent änderte und dann per ImageList.draw zeichnete und nachher wieder zurückstellt.
Dies veranlasst scheinbar VST immer wieder dazur den komplette Tree neu zu zeichnen und somit Loop.

Delphi-Quellcode:
procedure TaForm.tvFilterAfterCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellRect: TRect);
var R : TRect;
    s,
    value : String;
    i : Integer;
begin
  if (tvFilter.GetNodeLevel(Node) = 0) then begin
    with TargetCanvas do begin
      if (Column = 2) then begin
        R := CellRect;
        FillRect(R);
        s := tvFilter.Text[Node, Column];
// ilFilter16.DrawingStyle := dsTransparent; // nie ändern, sonst Loop im Treeview!
        for i := 7 downto 1 do begin
          value := copy(s,1,pred(pos('/',s))); delete(s,1,pos('/',s));
          ilFilter16.Draw(TargetCanvas, R.Left, R.Top, i, True);
          inc(R.Left, ilFilter16.Width + 2);
          textout(R.Left, R.Top, value);
          inc(R.Left, TextWidth(value) + 2);
        end;
// ilFilter16.DrawingStyle := dsNormal; // nie ändern, sonst Loop im Treeview!
      end;
    end;
  end;
end;
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz