Eine andere Frage, die die De-Texel-Treelisten betrifft. Es ist mir gelungen, ein cxgrid zu erhalten, um Zeilen basierend auf einem im Raster gespeicherten Wert zu färben. Meine Versuche, dieses Wissen in den Baumstamm zu übertragen, sind nicht gut verlaufen. Ich habe derzeit das gesamte Raster gefärbt und die Kinder Knoten sind als Standard (schwarzer Text auf weißem Hintergrund).Wie würde ich eine Farbe auf untergeordnete Knoten nur für TcxTreelists anwenden?
Ich denke, das Problem ist in Bezug auf, wann und wie Kinder Knoten bevölkert sind. Momentan werden sie dynamisch ausgefüllt und gelöscht, wenn sich die Auswahl ändert.
var
LNode : TcxTreeListNode;
LListData : TOfferList;
LSiteData : TSiteList;
LContract : TItem;
begin
LNode := TreeTypes.FocusedNode;
if Assigned(LNode) then
begin
if LNode.Level = 0 then
begin
LNode.DeleteChildren; //clear children so that list doesnt get duplicate entries/children
LSiteData := TSiteList(LNode.Data); //root node info
PopulateOfferList; //populate children list with data from DB
InitialiseOffers; // populate treelist with children gathered from the list above
LNode.Expand(True);
end
else
begin
LListData := TOfferList(LNode.Data); //do stuff with selected child node
LContract := TItem.Create(LListData.UnitID);//do stuff with selected child node
end;
end;
end;
So wie es aussieht, funktioniert es gut. Ich kann tun, was ich mit all den Informationen machen muss. Die gesamte Liste ist jedoch schwarz und weiß. Um Unterschiede in untergeordneten Knoten zu erkennen, möchte ich, dass sie basierend auf Informationen, die während des Populationsprozesses erfasst werden (DB-Objekte), eingefärbt werden.
Der aktuelle individuelle Draw:
procedure TFrmTestView1.TreeTypesCustomDrawDataCell(Sender: TcxCustomTreeList;
ACanvas: TcxCanvas; AViewInfo: TcxTreeListEditCellViewInfo;
var ADone: Boolean);
var
LState : TStates;
LOffer : TOfferList;
begin
if (Assigned(AViewInfo)) and (Assigned(AViewInfo.Node)) then
begin
if AViewInfo.Node.Level > 0 then
begin
LOffer := AViewInfo.Node.Data;
LState := FGlobals.GetStateFromID(LOffer.StateID);
end;
end;
if AViewInfo.Node.Level > 0 then
begin
if Assigned(LState) then
begin
ACanvas.Brush.Color := LState.Background;
ACanvas.Font.Color := LState.Foreground;
end;
end;
Dies verursacht Zugriffsverletzungen, wenn Parent (root) Knoten zu ändern und keine der Kinderknoten Färbung. Ich habe versucht, ein Tree.FullRefresh auf nodelselectionchange -Ereignis hinzuzufügen, und das schien keine Wirkung zu haben.
Ich möchte nur in der Lage sein, die Hintergrund- und Textfarben abhängig von den im Knoten gespeicherten Daten zu ändern. Mit den Elternknoten, die in Schwarz-Weiß- und Kinderknoten erscheinen, wird eine ganze Reihe von Farben angezeigt.
Danke,
noch Fragen oder Eingabeaufforderung für Sachen, die ich verpasst haben, würde ich mehr als glücklich sein, hinzuzufügen. Hinweis: Ich füge untergeordnete Knoten mithilfe der Node.AddChild-Prozedur hinzu.
Edit: Denke, ich habe die Methodensignatur hinzugefügt, nie gehört, dass es so genannt wird, also ist das eine Terminologie, die ich von meiner Liste abhaken kann.
Haben Sie DevExpress-Support kontaktiert? sie antworten normalerweise sehr schnell – Zam
Mögliches Duplikat von [DX TreeList - Wie man Farbe von irgendeinem Knoten ändert] (http://stackoverflow.com/questions/2341662/dx-treelist-how-to-chango-color-of-some- node) –
@TomBrunberg Ich habe mir diesen Post angesehen, konnte aber kein 'NodeCellStyle'-Event finden und als ich versuchte, auf den Link zu gehen, konnte ich keine Verbindung zur Website herstellen. Zam habe ich noch nicht, ich warte auf eine sehr langsame E-Mail in Bezug auf die Erstellung eines Accounts (wird mein Exchange-Server sein), dachte aber, während ich auf die E-Mail warte, wenn ich meine Frage da draußen bekommen könnte. Als temporäre 'Reparatur' verwende ich die CxStyles, aber alle Farbinformationen, die ich verwenden möchte, werden als Integer in der Datenbank gespeichert. Wenn sich dies als Duplikat herausstellt, bitte ich um Entschuldigung und lösche diese Frage. – Edward