AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

VirtualStringTreeview

Ein Thema von stOrM · begonnen am 18. Jun 2008 · letzter Beitrag vom 24. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
424 Beiträge
 
Delphi 10 Seattle Architect
 
#1

VirtualStringTreeview

  Alt 18. Jun 2008, 15:11
Hallo, ich hab ein riesen Problem hier mit der VST von Mike Lischke...

Ich versuche seit 3 Tagen mehrere Columns auf ivsMultiline zu setzen jedoch ohne erfolg, bzw Teilerfolg, es wird nur die Column 0 auf multiline gesetzt was aber leider die falsche Column ist...

Ich muss gestehen ich hab nicht wirklich Plan von der Komponente so das ich dem Beispiel von generic folgte, also hab ich mehrere Klassen erstellt um eine art Gruppierung aufzubauen.

Die Columns die multiline sein sollen wären: Column 1, 7, 8 , 10 und 11, da diese sehr grossen Text aufnehmen müssen.

Die Klassen:

Delphi-Quellcode:
type
  TRwuaData = record
   wuaUpdateTitel : WideString;
   wuaUpdateDescription : WideString;
  end;
   PRwuaData = ^TRwuaData;

  TOPwuaData = class
  public
    wuaUpdateTitel : WideString;
    wuaUpdateSeverity : WideString;
    wuaUpdateDescription : WideString;
    wuaUpdateUninstallSteps : WideString;
    wuaUpdateReleaseNotes : Widestring;
    wuaUninstallNotes : Widestring;
    wuaIsBetaDownload : WideString;
    wuaSupportUrl : WideString;
    wuaKB : WideString;
    wuaLanguage : WideString;
    wuaEula : WideString;
    wuaIsUninstallable : WideString;
  end;

  TOwuaGroup = class(TOPwuaData)
  private
  public
  end;
OnGetText Ereignis:

Delphi-Quellcode:
procedure TwuaMain.vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
  var
    data: TOPwuaData;
begin
  data := TOPwuaData(vst.GetNodeData(node)^);
  case Column of
    0: celltext := data.wuaUpdateTitel;
    1: celltext := data.wuaUpdateDescription;
    2: celltext := data.wuaUpdateSeverity;
    3: celltext := data.wuaIsBetaDownload;
    4: celltext := data.wuaSupportUrl;
    5: celltext := data.wuaKB;
    6: celltext := data.wuaLanguage;
    7: celltext := data.wuaEula;
    8: celltext := data.wuaUpdateReleaseNotes;
    9: celltext := data.wuaIsUninstallable;
   10: celltext := data.wuaUninstallNotes;
   11: celltext := data.wuaUpdateUninstallSteps;
   end;
end;
Was nun kommt, da blick ich selber nicht genau durch was hier rein muss:

Delphi-Quellcode:
procedure TwuaMain.vstInitNode(Sender: TBaseVirtualTree; ParentNode,
  Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
  Column: TColumnIndex;
begin
 Node.Align := 20; // Alignment of expand/collapse button nearly at the top of the node.
 Column := vst.Header.Columns.Count; // just for testing
case Column of
  0: // nicht multiline
  begin
    vst.NodeHeight[Node] := 40;
    Include(InitialStates, ivsHasChildren);
  end;
  end;
  case Column of
  1,7,8,10,11: // soll multiline sein! seltsam ist, das immer nur Column 0 auf multiline steht ich weiss nicht warum!
  begin
    vst.NodeHeight[Node] := 120;
    Include(InitialStates, ivsMultiline);
    end;
  end;
end;
Init Childs:

Delphi-Quellcode:
procedure TwuaMain.vstInitChildren(Sender: TBaseVirtualTree;
  Node: PVirtualNode; var ChildCount: Cardinal);
begin
  ChildCount := 1;
end;
Folgendes scheint auch nicht wirklich richtig zu sein, weil wenn ich +21 nicht mache stimmt die höhe der Checkboxen im Root so gar nicht, die werden dann zur Hälfte abgeschnitten!

Delphi-Quellcode:
procedure TwuaMain.vstMeasureItem(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer);
begin
  if Sender.MultiLine[Node] then
  begin
    TargetCanvas.Font := Sender.Font;
    NodeHeight := vst.ComputeNodeHeight(TargetCanvas, Node, 0)+ 21;
  end
   else
    NodeHeight := 21;
end;
Hinzufügen der Nodes, wie folgt:

Delphi-Quellcode:
  group := TOwuaGroup.Create;
  group.wuaUpdateTitel := Upd.Title;
  group.wuaUpdateSeverity := 'Test';
  node:=vst.AddChild(nil, group);
  vst.CheckType[node] := ctCheckBox;
  vst.CheckState[node] := csCheckedNormal;

  data := TOPwuaData.Create;

// Column 1 really really long!
  data.wuaUpdateDescription := 'Hier soll ein ziemlich langer Text rein...........';
  node:=vst.AddChild(node, data);
Wär echt super falls mir dabei jemand helfen kann?!

Viele Grüße
Marc

[edit=Christian Seehase]Titel korrigiert. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: VirtualStringTreview

  Alt 21. Jun 2008, 06:47
Hallo, hast du schon nach Bei Google suchenivsMultiline gegoogelt?

Bin u.a. auf diesen Beitrag gestossen: http://www.ureader.de/msg/1226546.aspx
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
424 Beiträge
 
Delphi 10 Seattle Architect
 
#3

Re: VirtualStringTreview

  Alt 22. Jun 2008, 00:39
Jepp danke Dir, da hab ich auch schon gesucht nur ebenfalls keinen Erfolg. Beziehungsweise, wird die Höhe der Column zwar richtig gesetzt der Text aber nicht umgebrochen...
  Mit Zitat antworten Zitat
michaelg

Registriert seit: 20. Apr 2008
39 Beiträge
 
#4

Re: VirtualStringTreview

  Alt 22. Jun 2008, 03:03
Hi stOrM,

wieso nimmst Du ??
Column := vst.Header.Columns.Count; Wieviele Spalten hast Du denn? Wenn ich so tue, funzt es.

Delphi-Quellcode:
procedure tForm1.vInitNode(Sender: TBaseVirtualTree; ParentNode,
  Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
  Column: TColumnIndex;
  i:Integer;
begin
  Node.Align := 20; // Alignment of expand/collapse button nearly at the top of the node.
  for i:= 0 to v.Header.columns.count-1 do begin
    Column := i;
    case Column of
      0: // nicht multiline
      begin
        v.NodeHeight[Node] := 40;
        Include(InitialStates, ivsHasChildren);
      end;
      1,3,7,8,10,11: // soll multiline sein! seltsam ist, das immer nur Column 0 auf multiline steht ich weiss nicht warum!
      begin
        v.NodeHeight[Node] := 120;
        Include(InitialStates, ivsMultiline);
      end;
    end;
  end;
end;
Ganz klar ist mir noch nicht, wieso es das tut, aber ich hab festgestellt, daß auch Column[0] als Multiline dargestellt wird, obwohl es nicht explizit hier drinsteht. Kann ein einzelnes Column überhaupt getrennt Multiline sein? Ich hab eher den Eindruck, daß Du sobald Du Include mit Multiline setzt, alle Columns in dem Node auf Multiline gesetzt werden. Würde sogar Sinn machen, finde ich.
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
424 Beiträge
 
Delphi 10 Seattle Architect
 
#5

Re: VirtualStringTreview

  Alt 22. Jun 2008, 12:28
Hi Michael
Anzahl der Spalten gesamt 12 (0-11)

Wie sieht denn MeasureItem aus bei dir?

Extrem geil es funzt schon mal nun kenn ich auch meinen Fehler ich Depp!


Zusatzfrage, kennst Du dich mit der Komponente etwas besser aus als ich? mich würde da mal was wegen der Optik interessieren...
Die Column 1 ist jetzt dank deines genialen Codes multiline, sieht nur etwas gewöhnungsbedürfitg aus meiner Meinung nach.
Column 0 ist ja nicht multiline, dient aber als Root bzw. Überschrift somit ist der Inhalt von Column 1 unter Column 0
kann ich das so verschieben das der Inhalt von Column 1 unter Column 0 steht, also sozusagen nen Spawning Von Column 0 - 1 ?
Schwer verständlich ich weiss ich würds dir lieber Bildlich zeigen was ich meine...

Ich versuchs mal so

Derzeitige Darstellung:

Colum 0 | Column 1
Text Column0
-------------------Text Column 1

Gewollte Darstellung:
Colum 0 | Column 1
Text Column0
Text Column 1 bis zum ende Column1
dann umbrechen...

Viele Grüsse
s!
  Mit Zitat antworten Zitat
michaelg

Registriert seit: 20. Apr 2008
39 Beiträge
 
#6

Re: VirtualStringTreview

  Alt 23. Jun 2008, 02:25
Mein Code war sicher nicht genial, sondern eher überflüssig, denn sowohl bei InitNode als auch bei OnMeasureItem ist kein Column als Parameter im Aufruf. Deshalb gehe ich davon aus, daß es um die komplette Zeile (Höhe des Nodes) geht, also könntest Du Dir das mit den Columns sparen. Bist Du wirklich sicher, daß man das für eine Col machen kann?

Mir ist aufgefallen, daß beim Setzen der Nodeheight bei OnMeasureItem "korrekter" gezeichnet wird. Im Fall von InitNode werden die Nodes alle auf die gleiche "höchste" Höhe gesetzt, das passiert bei OnMeasureItem nicht. Ich würde deshalb bei InitNode nur das Multiline setzen und bei OnMeasureItem die Höhe. Es gibt dazu auch ne Funktion ComputeNodeHeight, die könnte hilfreich sein, wenn Du tatsächlich variable Höhen für jedes Node haben willst. Damit die Höhe aber nur einmal berechnet werden muß, solange sich der Inhalt nicht ändert, würde ich mir die Höhe ins pTreeData-Record einbauen und wenn was drinsteht, nicht nochmal berechnen.

Ich hab noch das Property TreeOptions.MiscOptions.toVariableNodeHeight entdeckt, hat aber bisher keine Auswirkung bei mir gehabt, ob man das setzt oder nicht.

Zu Deiner anderen Frage:
Du willst sozusagen Column[0] als Überschrift haben und dann Column[1] darunter mit Multiline, und das Ganze innerhalb eines Knotens. Das kannst Du nur selber ins Canvas zeichnen glaube ich. Ich hab auch in den tausend Beispielprogrammen für den Stringtree nichts gefunden (außer in Advanced.dpr, aber da fehlt genau das im Quelltext, wonach wir suchen).
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
424 Beiträge
 
Delphi 10 Seattle Architect
 
#7

Re: VirtualStringTreview

  Alt 23. Jun 2008, 15:26
?? Hmm wenn ich mir die Columns sparen kann, wie sag ich dem Tree dann das es um diverse Columns geht die multiline sein sollen jedoch nicht alle?


Das benutze ich ja schon : NodeHeight := vst.ComputeNodeHeight(TargetCanvas, Node, 1)+ 21; Die 1 steht für Column 1

Eigentlich müsste ich denk ich mal die Höhe nur fürs multiline Column anders sein?
Weil die stehen ja unter der Node die als Überschrift dient somit ist die Überschrift immer 21 in der Höhe und die darunter eben höher...

Naja ich hatte es fast befürchtet das das nicht so einfach zu handhaben ist, warum auch, wenn ich etwas suche was mir in die Birne kam gehts eh meist nicht auf einfachem weg ich bins gewohnt
  Mit Zitat antworten Zitat
Benutzerbild von Der.Kaktus
Der.Kaktus

Registriert seit: 22. Jan 2008
Ort: Erfurt
958 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: VirtualStringTreview

  Alt 23. Jun 2008, 16:05
Hi, Schuldigung..aber aender mal Bitte im Titel das Treview in Treeview um..
Danke

P.S.: damit die Suchfunktion auch diesen Thread findet.
Gruss Kaki

Repeat Until true=false;
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
424 Beiträge
 
Delphi 10 Seattle Architect
 
#9

Re: VirtualStringTreview

  Alt 23. Jun 2008, 20:53
Zitat von Der.Kaktus:
Hi, Schuldigung..aber aender mal Bitte im Titel das Treview in Treeview um..
Danke

P.S.: damit die Suchfunktion auch diesen Thread findet.
Jo wenn du mir noch schnell sagst wo?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#10

Re: VirtualStringTreview

  Alt 23. Jun 2008, 21:03
Moin Storm,

Zitat von stOrM:
Zitat von Der.Kaktus:
Hi, Schuldigung..aber aender mal Bitte im Titel das Treview in Treeview um..
Danke

P.S.: damit die Suchfunktion auch diesen Thread findet.
Jo wenn du mir noch schnell sagst wo?
dazu müsstest Du den ersten Beitrag editieren (siehe Edit-Button, oberhalb eines Beitrages, rechts)
Da das aber nach 24 Stunden nicht mehr geht, habe ich das mal eben gemacht
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf