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]