Hallo,
ich beschäftige mich schon seit längerem mit dem VirtualStringTree von M.Lischke.
ich habe gerade folgendes Problem.
dass hier ist meine Suche nach einem bestimmten node:
<pre>
procedure TFormMainBike.NodeSuchen(Suchwert: String;ganzerBaum:boolean);
var
aNode: PVirtualNode;
Data: PTreeData;
gefunden,suchdurchlauf : integer;
vSuchwert,VNodecaption : String;
begin
vSuchwert := Suchwert;
VNodecaption := '';
vSuchwert := StringReplace(vSuchwert,'_','',[rfReplaceAll]);
vSuchwert := StringReplace(vSuchwert,'-','',[rfReplaceAll]);
suchdurchlauf := 0;
gefunden := 0;
ActiveControl := TreeViewBaum;
with TreeViewBaum do
begin
if ganzerBaum then
begin
SetFocus;
aNode := GetFirst;
if aNode = nil then ShowMessage('Kein Knoten aktiv');
end
else aNode:=TreeViewBaum.FocusedNode;
TreeViewBaum.ClearSelection;
While aNode <> nil do
begin
Data:=TreeViewBaum.GetNodeData(aNode);
VNodecaption := Data.FCaption;
VNodecaption := StringReplace(VNodecaption,'_','',[rfReplaceAll]);
VNodecaption := StringReplace(VNodecaption,'-','',[rfReplaceAll]);
if (lowercase(vSuchwert) = lowercase(VNodecaption)) or
(pos(lowercase(vSuchwert),lowercase(VNodecaption)) > 0) then
begin
gefunden := 1;
//Gefundener Node markieren
if not TreeViewBaum.HasChildren[aNode] then
begin
TreeViewBaum.Selected[aNode] := true;
TreeViewBaum.InvalidateNode(aNode);
//Bild laden
Bild_laden(aNode,true,true);
ANode:=aNode.Parent;
end else
begin
TreeViewBaum.Selected[aNode] := true;
HotSpotImageBikeWare1.Picture := nil;
HotSpotImageBikeWare1.Visible := false;
Bild_laden(aNode,true,true);
end;
//Node Öffnen
if suchdurchlauf > 0 then
begin
TreeViewBaum.Expanded[ANode]:=True;
break;
end;
end;
inc(suchdurchlauf);
aNode := TreeViewBaum.GetNext(aNode);
end;
end;
if gefunden = 0 then ShowMessage(Suchwert + ' Konnte nicht gefunden werden!');
end;
</pre>
mein problem ist, dass nach
<pre>
<b>TreeViewBaum.Selected[aNode] := true;</b>
</pre>
der node zwar selektiert ist, aber nicht zwingend den focus hat.
ich habe es gemerkt, als ich meine suche testete und der eine node war bla markiert und der andere node, hatte noch eine gestrichelten rahmen drum rum! der mit dem gestrichelten rahmen, hatte wohl den focus.
wenn ich nämlich dann mit der maus auf den blau markierten node klicke verschwindet der gestrichelte rahmen um den anderen node!
wer weiss <b>irgendeine</b> lösung?
Gruß
Markus
ich beschäftige mich schon seit längerem mit dem VirtualStringTree von M.Lischke.
ich habe gerade folgendes Problem.
dass hier ist meine Suche nach einem bestimmten node:
<pre>
procedure TFormMainBike.NodeSuchen(Suchwert: String;ganzerBaum:boolean);
var
aNode: PVirtualNode;
Data: PTreeData;
gefunden,suchdurchlauf : integer;
vSuchwert,VNodecaption : String;
begin
vSuchwert := Suchwert;
VNodecaption := '';
vSuchwert := StringReplace(vSuchwert,'_','',[rfReplaceAll]);
vSuchwert := StringReplace(vSuchwert,'-','',[rfReplaceAll]);
suchdurchlauf := 0;
gefunden := 0;
ActiveControl := TreeViewBaum;
with TreeViewBaum do
begin
if ganzerBaum then
begin
SetFocus;
aNode := GetFirst;
if aNode = nil then ShowMessage('Kein Knoten aktiv');
end
else aNode:=TreeViewBaum.FocusedNode;
TreeViewBaum.ClearSelection;
While aNode <> nil do
begin
Data:=TreeViewBaum.GetNodeData(aNode);
VNodecaption := Data.FCaption;
VNodecaption := StringReplace(VNodecaption,'_','',[rfReplaceAll]);
VNodecaption := StringReplace(VNodecaption,'-','',[rfReplaceAll]);
if (lowercase(vSuchwert) = lowercase(VNodecaption)) or
(pos(lowercase(vSuchwert),lowercase(VNodecaption)) > 0) then
begin
gefunden := 1;
//Gefundener Node markieren
if not TreeViewBaum.HasChildren[aNode] then
begin
TreeViewBaum.Selected[aNode] := true;
TreeViewBaum.InvalidateNode(aNode);
//Bild laden
Bild_laden(aNode,true,true);
ANode:=aNode.Parent;
end else
begin
TreeViewBaum.Selected[aNode] := true;
HotSpotImageBikeWare1.Picture := nil;
HotSpotImageBikeWare1.Visible := false;
Bild_laden(aNode,true,true);
end;
//Node Öffnen
if suchdurchlauf > 0 then
begin
TreeViewBaum.Expanded[ANode]:=True;
break;
end;
end;
inc(suchdurchlauf);
aNode := TreeViewBaum.GetNext(aNode);
end;
end;
if gefunden = 0 then ShowMessage(Suchwert + ' Konnte nicht gefunden werden!');
end;
</pre>
mein problem ist, dass nach
<pre>
<b>TreeViewBaum.Selected[aNode] := true;</b>
</pre>
der node zwar selektiert ist, aber nicht zwingend den focus hat.
ich habe es gemerkt, als ich meine suche testete und der eine node war bla markiert und der andere node, hatte noch eine gestrichelten rahmen drum rum! der mit dem gestrichelten rahmen, hatte wohl den focus.
wenn ich nämlich dann mit der maus auf den blau markierten node klicke verschwindet der gestrichelte rahmen um den anderen node!
wer weiss <b>irgendeine</b> lösung?
Gruß
Markus
Comment