AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi VirtualStringTree Item selektieren Problem beim Zeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree Item selektieren Problem beim Zeichnen

Ein Thema von RandomDD · begonnen am 19. Aug 2016 · letzter Beitrag vom 22. Aug 2016
Antwort Antwort
RandomDD

Registriert seit: 11. Aug 2016
42 Beiträge
 
#1

VirtualStringTree Item selektieren Problem beim Zeichnen

  Alt 19. Aug 2016, 13:33
Ich habe mir dieses Beispiel (erste Antwort) angeguckt und es gefällt mir sehr
http://stackoverflow.com/questions/2...-the-same-node

Delphi-Quellcode:
implementation

type
  PNodeRec = ^TNodeRec;
  TNodeRec = record
    Name: WideString;
    Count: Integer;
    IsBold: Boolean;
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Node: PVirtualNode;
  NodeRec: PNodeRec;
  I: Integer;
begin
  VirtualStringTree1.TreeOptions.StringOptions :=
    VirtualStringTree1.TreeOptions.StringOptions + [toShowStaticText];
  VirtualStringTree1.NodeDataSize := Sizeof(TNodeRec);
  // Populate some data
  for I := 1 to 10 do
  begin
    Node := VirtualStringTree1.AddChild(nil);
    NodeRec := VirtualStringTree1.GetNodeData(Node);
    Initialize(NodeRec^);
    NodeRec.Name := 'Node' + IntToStr(I);
    NodeRec.Count := I;
    NodeRec.IsBold := I mod 2 = 0;
  end;
end;

procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  NodeRec: PNodeRec;
begin
  NodeRec := PNodeRec(TVirtualStringTree(Sender).GetNodeData(Node));
  if TextType = ttNormal then
    CellText := NodeRec^.Name
  else // ttStatic
    CellText := Format('(%d)', [NodeRec^.Count]);
end;

procedure TForm1.VirtualStringTree1PaintText(Sender: TBaseVirtualTree;
  const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  TextType: TVSTTextType);
var
  NodeRec: PNodeRec;
begin
  NodeRec := PNodeRec(TVirtualStringTree(Sender).GetNodeData(Node));
  if TextType = ttNormal then
  begin
    if NodeRec^.IsBold then
      TargetCanvas.Font.Style := TargetCanvas.Font.Style + [fsBold];
  end
  else // ttStatic
    TargetCanvas.Font.Color := clRed;
end;
Es gibt nur ein Problem. Wenn man jetzt auf ein Item klickt, wird es nicht mehr selektiert-gezeichnet.
Wie zeichne ich ein Item, dass es selektiert aussieht?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: VirtualStringTree Item selektieren Problem beim Zeichnen

  Alt 19. Aug 2016, 13:47
Wie zeichne ich ein Item, dass es selektiert aussieht?
So das es selektiert ausssieht.

was verstehst Du denn darunter? Blauer Hintergrund, orangene Schriftfarbe?
Dann trag es entsprechend ein.
Da ich virtualstringtree nicht so genau kenne, wäre es u.U. hilfreich sich einmal die onClick Routine anzusehen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
RandomDD

Registriert seit: 11. Aug 2016
42 Beiträge
 
#3

AW: VirtualStringTree Item selektieren Problem beim Zeichnen

  Alt 19. Aug 2016, 13:49
Kenne mich leider auch nicht so gut damit aus. Aber OnClick kann man dafür nicht benutzen soweit ich weiß.
ich dachte hiermit funktioniert es, tut es aber nicht.

Delphi-Quellcode:
procedure TForm1.VSTBeforeCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
 Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
begin
 // Variante 1 - funktioniert nicht
 // if TVirtualStringTree(Sender).Selected[Node] then
 // begin
 // TargetCanvas.Brush.Color := TVirtualStringTree(Sender).Colors.FocusedSelectionColor;
 // TargetCanvas.FillRect(CellRect);
 // end;

 // Variante 2 - funktioniert nicht
 // if TVirtualStringTree(Sender).FocusedNode = Node then // - FigVam
 // begin
 // TVirtualStringTree(Sender).Selected[Node] := True;
 // TargetCanvas.Brush.Color := $00FF0000;
 // TargetCanvas.FillRect(CellRect);
 // end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: VirtualStringTree Item selektieren Problem beim Zeichnen

  Alt 19. Aug 2016, 13:53
Wenn Du eine VirtualStringTree1PaintText hast und die wird nach VSTBeforeCellPaint ausgeführt, dann kannst Du Dir die VSTBeforeCellPaint auch schenken, wenn du in beiden Routinen das Gleiche machst.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: VirtualStringTree Item selektieren Problem beim Zeichnen

  Alt 19. Aug 2016, 18:45
Hast du denn auch in den TreeOptions.PaintOptions den Schalter toHideSelection und toAlwaysHideSelection ausgeschaltet? Andernfalls wird keine Selection gezeichnet. Die sind zwar standardmäßig aus, aber ich weiß ja nicht, was du alles ausprobiert hast.

Du solltest auch das toShowStaticText rausnehmen. Was bezweckst du überhaupt damit? Du schränkst dich dadurch nur unnötig ein. So wie ich es weiß (und so steht es auch in der Hilfe) kann man StaticText nicht selektieren. Ob es daran jetzt schlussendlich liegt kann ich dir nicht sagen. Habe gerade kein Delphi zur Hand.

Zitat von VirtualStringTree Help:
Static text: All text that you return when TextType is ttStatic will be displayed right beside the normal text (or left to it if the column's BidiMode is not bdLeftToRight, i.e. the column has right-to-left layout). Static text is used only for informational purposes; it cannot be selected or dragged and if the column is not wide enough to show all text it will not be shortened with an ellipsis (...) as normal text. The string tree will only query for static text if the StringOptions (see TreeOptions) include toShowStaticText. This is off by default.

[...]


Description
Use other resources like the news group or the Delphi Gems message board to find a description.

MembersDescription
ttNormalnormal label of the node, this is also the text which can be edited
ttStaticstatic (non-editable) text after the normal text
Wenn ich das OnPaintText Event bei mir implementiere ist es so (wenn ich mich jetzt nicht absolut täusche), dass nur die Eigenschaften des Textes verändert werden wenn man im TargetCanvas.Font.XXX etwas ändert. Das Rect in dem gezeichnet wird muss man nicht mehr füllen oder sonst was machen. Alternativ zum OnPaintText Event gibt es auch noch das OnDrawText Event in dem der Parameter DefaultDraw auf false gesetzt werden kann. Dann muss man aber alles selbst machen.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: VirtualStringTree Item selektieren Problem beim Zeichnen

  Alt 22. Aug 2016, 12:57
Es wäre mal interessant zu wissen ob das nun funktioniert oder ob du den Fehler selbstständig gefunden hast. Nicht nur für mich interessant, sondern bestimmt auch für alle anderen die auch mal vor diesem Problem mit dem VST stehen.
  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 20:25 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