828
社区成员
发帖
与我相关
我的任务
分享
if SomeCondition then Exit;
SomeDataset.First;
while not SomeDataset.eof do
begin
S := SomeDataset.FieldByName('SomeField').AsString;
SomeDataset.Next;
end;
SomeField := SomeDataset.FieldByName('SomeField');
SomeDataset.First;
while not SomeDataset.eof do
begin
S := SomeField.AsString;
SomeDataset.Next;
end;
function TTreeNode.GetLevel: Integer;
var
Node: TTreeNode;
begin
Result := 0;
Node := Parent;
while Node <> nil do
begin
Inc(Result);
Node := Node.Parent;
end;
end;
function _GetBufStart(Buffer: PChar; var Level: Integer): PChar;
begin
Level := 0;
while Buffer^ in [' ', #9] do
begin
Inc(Buffer);
Inc(Level);
end;
Result := Buffer;
end;
procedure _LoadTreeFromStream(Owner: TTreeNodes; Stream: TStream);
var
List: TStringList;
ANode, NextNode: TTreeNode;
ALevel, i: Integer;
CurrStr: string;
ANodeLevel: Integer;
begin
List := TStringList.Create;
Owner.BeginUpdate;
try
try
Owner.Clear;
List.LoadFromStream(Stream);
ANode := nil;
ANodeLevel := 0;
for i := 0 to List.Count - 1 do
begin
CurrStr := _GetBufStart(PChar(List[i]), ALevel);
if ANode = nil then
ANode := Owner.AddChild(nil, CurrStr)
//else if ANode.Level = ALevel then
else if ANodeLevel = ALevel then
ANode := Owner.AddChild(ANode.Parent, CurrStr)
//else if ANode.Level = (ALevel - 1) then
else if ANodeLevel = (ALevel - 1) then
begin
ANode := Owner.AddChild(ANode, CurrStr);
Inc(ANodeLevel);
end
//else if ANode.Level > ALevel then
else if ANodeLevel > ALevel then
begin
NextNode := ANode.Parent;
Dec(ANodeLevel);
//while NextNode.Level > ALevel do
while ANodeLevel > ALevel do
begin
NextNode := NextNode.Parent;
Dec(ANodeLevel);
end;
ANode := Owner.AddChild(NextNode.Parent, CurrStr);
end
else;
end;
finally
Owner.EndUpdate;
List.Free;
end;
except
Owner.Owner.Invalidate; // force repaint on exception
raise;
end;
end;
procedure _LoadFromStream(ATreeView: TTreeView; Stream: TStream);
begin
_LoadTreeFromStream(ATreeView.Items, Stream);
end;
procedure _LoadFromFile(ATreeView: TTreeView; const FileName: string);
var
Stream: TStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead);
try
_LoadFromStream(ATreeView, Stream);
finally
Stream.Free;
end;
end;