![]() |
[VST] Zeilenumbruch in Nodes
huhu leute. mal wieder ein problem mit dem VST. Ich versuche einem Node eine Caption mit nem #13#10 zuzuweisen. nur leider hat der node dann keinen zeilenumbruch, sondern zwei schwarze kästchen da, wo der zeilenumbruch sein sollte. wie bringt man dem VST bei, einen zeilenumbruch darzustellen?
mfg phXql |
Re: [VST] Zeilenumbruch in Nodes
Was ist der VST?
Evtl. kann er/sie/es keine mehrzeiligen Texte. |
Re: [VST] Zeilenumbruch in Nodes
Zitat:
mfG mirage228 |
Re: [VST] Zeilenumbruch in Nodes
guck dir bei der VST Advanced Demo das Multiline Demo an :)
|
Re: [VST] Zeilenumbruch in Nodes
bin ich zu blöd dafür?? hab mir die demo angeschaut, und das nun so gemacht:
Beim hinzufügen eines Nodes:
Delphi-Quellcode:
Dann bei GetText:
t_child := VST1.AddChild(t_node);
VST1.MultiLine[t_child] := True; t_data := VST1.GetNodeData(t_child); t_data^.ExceptionObj := g_Exceptions.Exception[i]; t_data^.Kind := tkMessage;
Delphi-Quellcode:
Und dann noch um automatisch die richtige Höhe anzeigen zu lassen:
procedure TFormExceptionLog.VST1GetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var t_data: PTreeNodeData; begin t_data := Sender.GetNodeData(Node); case t_data^.Kind of tkMessage: CellText := 'Zeile 1' + #13#10 + 'Zeile 2'; end;
Delphi-Quellcode:
Nun SOLLTE es ja eigentlich gehen. also die spalte schaut mehrzeilig aus, nur leider wird der Text als "Zeile 1[dann die zwei kastel]Zeile 2" dargstellt. Wo is der Fehler??
procedure TFormExceptionLog.VST1MeasureItem(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer);
begin if Sender.MultiLine[Node] then NodeHeight := VST1.ComputeNodeHeight(TargetCanvas, Node, -1); end; mfg phXql |
Re: [VST] Zeilenumbruch in Nodes
in der demo ist ein beispiel.
hab die mal den code rauskopiert:
Delphi-Quellcode:
procedure TNodeForm.MLTreeMeasureItem(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
var NodeHeight: Integer); begin if Sender.MultiLine[Node] and AutoAdjustCheckBox.Checked then begin TargetCanvas.Font := Sender.Font; NodeHeight := MLTree.ComputeNodeHeight(TargetCanvas, Node, 0); end; // ...else use what's set by default. end; procedure TNodeForm.MLTreeInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); begin Node.Align := 20; // Alignment of expand/collapse button nearly at the top of the node. if (Node.Index mod 3) = 0 then begin MLTree.NodeHeight[Node] := 40; end else begin MLTree.NodeHeight[Node] := 120; Include(InitialStates, ivsMultiline); end; end; procedure TNodeForm.AutoAdjustCheckBoxClick(Sender: TObject); begin MLTree.ReinitNode(nil, True); MLTree.Invalidate; end; |
Re: [VST] Zeilenumbruch in Nodes
das gibts doch nich. ich habs genauso gemacht wie in der demo, der node wird auch zweizeilig dargestellt, nur leider will der mir des enter nich richtig anzeigen. Noch ne idee, woran das liegen kann? :(
|
Re: [VST] Zeilenumbruch in Nodes
versuch mal statt #13#10 -> #10#13 einzugeben.... das hilft manchmal :)
|
Re: [VST] Zeilenumbruch in Nodes
Zitat:
|
Re: [VST] Zeilenumbruch in Nodes
hast du vieleicht widechars oder sowas an?
|
Re: [VST] Zeilenumbruch in Nodes
ne.. ich lasse nur den message-text eines error-objekts ausgeben. und wenn da ein zeilenumbruch drin ist, wird der nicht richtig dargstellt. kein wide-char oder sowas...
|
Re: [VST] Zeilenumbruch in Nodes
So kleine Korrektur. Im OnGetText-Ereignis wird der Celltext als WideString zurückgegeben. Wie macht man einen Zeilenumbruch (#13#10) in einem Widestring?
mfg phXql |
Re: [VST] Zeilenumbruch in Nodes
ich hab da gerade nochmal rumprobiert.
hast du mehrere spalten oder vieleicht static-texte? |
Re: [VST] Zeilenumbruch in Nodes
mach mal anstatt +#10#13+ => +sLineBreak+
(Ups, sLineBreak steht ja für #13#10, Sorry) |
Re: [VST] Zeilenumbruch in Nodes
Zitat:
|
Re: [VST] Zeilenumbruch in Nodes
hmm, komisch komisch.
ich poste mal alles zu dem multiline was ich im letzten projekte verwendet habe. bei multiline wird der static text nicht angezeigt. der tree ist schon komplett aufgebaut wird nur noch durch folgendes in multiline gesetzt
Delphi-Quellcode:
Im onMeasureItem errechne ich noch von allen spalten die maximale höhe+5.
vst_vergleich.IterateSubtree(nil, SetVstMultilineCallback,nil);
procedure Tfrm_vergleich.SetVstMultilineCallback(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean); begin sender.MultiLine[node]:=True; Abort:=false; end; der Knoten soll aber mindestens DefaultNodeHeight haben.
Delphi-Quellcode:
so nur noch mein vst:
procedure Tfrm_vergleich.vst_vergleichMeasureItem(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer); var i: integer; begin if Sender.MultiLine[Node] then begin NodeHeight:=vst_vergleich.DefaultNodeHeight; for i:=0 to vst_vergleich.Header.Columns.Count-1 do NodeHeight := Max(vst_vergleich.ComputeNodeHeight(TargetCanvas, Node, i)+5, NodeHeight); end; end;
Delphi-Quellcode:
nicht wundern das nur 1 spalte da ist. es werden noch weitere dynamisch hinzugefügt.
var
vst_vergleich: TVirtualStringTree; vst_vergleich := TVirtualStringTree.Create(Self); with vst_vergleich do begin Name := 'vst_vergleich'; Parent := Self; Left := 0; Top := 23; Width := 792; Height := 550; Align := alClient; Header.AutoSizeIndex := 0; Header.Font.Charset := DEFAULT_CHARSET; Header.Font.Color := clWindowText; Header.Font.Height := -11; Header.Font.Name := 'Tahoma'; Header.Font.Style := []; Header.Options := [hoColumnResize, hoVisible]; Header.Style := hsPlates; HintAnimation := hatNone; HintMode := hmHint; LineMode := lmBands; LineStyle := lsSolid; ParentShowHint := False; ShowHint := True; TabOrder := 1; TreeOptions.MiscOptions := [toAcceptOLEDrop, toFullRepaintOnResize, toGridExtensions, toInitOnSave, toToggleOnDblClick, toWheelPanning, toVariableNodeHeight]; TreeOptions.PaintOptions := [toShowButtons, toShowDropmark, toShowHorzGridLines, toShowRoot, toShowTreeLines, toShowVertGridLines, toThemeAware, toUseBlendedImages, toFullVertGridLines]; TreeOptions.SelectionOptions := [toExtendedFocus, toFullRowSelect]; OnGetText := vst_vergleichGetText; OnPaintText := vst_vergleichPaintText; OnGetHint := vst_vergleichGetHint; OnMeasureItem := vst_vergleichMeasureItem; with Columns.Add do begin Options := [coDraggable, coEnabled, coParentBidiMode, coParentColor, coResizable, coShowDropMark, coVisible]; Position := 0; Tag := 5; Width := 350; WideText := 'Bezeichnung'; end; WideDefaultText := ''; end; das passiert ungefähr so:
Delphi-Quellcode:
ich nutze Version 4.3.1 des virtualstringtree.
fheader:=vst_vergleich.Header.Columns.Add;
fheader.Width:=150; fheader.Options:=fheader.Options-[coAllowClick]; fheader.Text:='text text'; läuft ohne probleme mit delphi 6 pro, delphi7 enterprise und delphi2005 enterprise wenn das dann immer noch nicht geht, melde dich mal bitte per icq oder pm bei mir |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 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-2025 by Thomas Breitkreuz