我刚看到关于用TreeView的例子,你去开发文档那,有个关于”注册表“的例子。好像可以。
解决方案 »
- 有"a,b,c,d,e......"每三个一组,能有多少种组合模式?
- 这个指针起什么作用?
- spcomm 接收问题 加急!!
- 请教一个数学问题,请专家帮忙~~~~~~~~~·
- 我要做一个非常复杂的表单打印程序,能用报表控件做吗?大家给个推荐吧...犹豫中
- 一个sql语句问题!up有分!
- delphi6中用什么控件能显示一数据表中的数据,但有要求(见内容)
- 哪位大侠可以把下面的代码改成DELPHI的高分相增100分
- 在Delphi6上集成RaveReport组件面板
- 请问如何用流的方法向SQLServer数据库中读写blob的image字段
- 组件开发中,继承的新组件怎么样霸不用的属性隐藏起来?
- 请以前做过pic to exe的大虾指教
procedure ZsDataSetToTreeView(mDataSet: TDataSet; mTreeView: TTreeView);
{ 将数据源转换成可视树 }
type
TArrayTreeNode = array of TTreeNode;
var
vFieldCount: Integer;
vStringList: TStringList; procedure pZsDataToTreeNode(mArrayTreeNode: TArrayTreeNode;
mIndex: Integer; mValueList: string);
var
vTreeNode, vTempTreeNode: TTreeNode;
vStr, S, vTemp: string;
I: Integer;
vArrayTreeNode: TArrayTreeNode;
begin
vTemp := mValueList;
vStringList.Text := mValueList;
vStr := #13#10;
vTreeNode := nil;
if mIndex < vStringList.Count then begin
if (Pred(mIndex) >= Low(mArrayTreeNode)) and (Pred(mIndex) < High(mArrayTreeNode))then
vTreeNode := mArrayTreeNode[Pred(mIndex)];
vStr := vStringList[mIndex];
end;
vArrayTreeNode := mArrayTreeNode;
with mDataSet do while not Eof do begin
S := FieldByName(FieldDefs[mIndex].Name).AsString;
if (vStr = #13#10) or (vStr <> S) or (mIndex = Pred(vFieldCount)) then
begin
vTreeNode := mTreeView.Items.AddChild(vTreeNode,
FieldByName(FieldDefs[mIndex].Name).AsString);
vStr := S;
vTempTreeNode := vTreeNode;
SetLength(vArrayTreeNode, vFieldCount);
vArrayTreeNode[mIndex] := vTempTreeNode;
for I := Succ(mIndex) to Pred(vFieldCount) do begin
vTempTreeNode := mTreeView.Items.AddChild(vTempTreeNode,
FieldByName(FieldDefs[I].Name).AsString);
vArrayTreeNode[I] := vTempTreeNode;
end;
vStringList.Clear;
for I := 0 to Pred(vFieldCount) do
vStringList.Add(FieldByName(FieldDefs[I].Name).AsString);
vTemp := vStringList.Text;
Next;
pZsDataToTreeNode(vArrayTreeNode, 0, vTemp);
vArrayTreeNode := nil;
end else begin
pZsDataToTreeNode(vArrayTreeNode, Succ(mIndex), vTemp);
end;
end;
end;begin
vStringList := TStringList.Create;
mTreeView.Items.Clear;
vFieldCount := mDataSet.FieldCount;
mDataSet.First;
pZsDataToTreeNode(nil, 0, '');
vStringList.Free;
end; { ZsDataSetToTreeView }////////放在TForm1.ComboBox1KeyUp用
function ZsComboBoxVisualInput(mComboBox: TComboBox;
mCase: Boolean = True): Boolean; { ComboBox可视化输入 }
var
I, T: Integer;
begin
Result := False;
if Assigned(mComboBox) then
with mComboBox do for I := 0 to (Items.Count) do
if (Pos(Text, Items[I]) = 1) and (Text <> Items[I]) then
begin
T := Length(Text);
Text := Items[I];
SelStart := T;
SelLength := Length(Items[I]) - T;
Result := True;
Break;
end
else if not (mCase) and (Pos(UpperCase(Text), UpperCase(Items[I])) = 1) and
(UpperCase(Text) <> UpperCase(Items[I])) then
begin
T := Length(Text);
Text := Items[I];
SelStart := T;
SelLength := Length(Items[I]) - T;
Result := True;
Break;
end
end; { ZsComboBoxVisualInput }///////比如:VariantToText(Table1['Field1;Field2']);
function VariantToText(mVariant: Variant; mDivision: string = ','): string; { 将变体类型转换成文本返回 }
var
vVarType: Integer;
vVarLow: Integer;
vVarHigh: Integer;
I: Integer;
begin
Result := '';
vVarType := VarType(mVariant);
case vVarType of
varSmallint .. varString: AppendStr(Result, mDivision + VarToStr(mVariant));
else if vVarType and (varArray or varVariant) <> 0 then
begin
vVarLow := VarArrayLowBound(mVariant, VarArrayDimCount(mVariant));
vVarHigh := VarArrayHighBound(mVariant, VarArrayDimCount(mVariant));
for I := vVarLow to vVarHigh do
AppendStr(Result, mDivision + VariantToText(mVariant[I]));
end else AppendStr(Result, mDivision + VarToStr(mVariant));
end;
Delete(Result, 1, Length(mDivision));
end; { VariantToText }///////没有什么好说的
function TextToVariant(mText: string; mDivision: string = ','): Variant; { VariantToText反函数 }
var
vLeft, vRight: string;
I, L, T, vCount: Integer;
begin
Result := Null;
vCount := 0;
vRight := mText;
I := Pos(mDivision, vRight);
L := Length(mDivision);
T := Length(mText); while I > 0 do begin
vLeft := Copy(vRight, 1, I - 1);
vRight := Copy(vRight, I + L, T);
I := Pos(mDivision, vRight);
Inc(vCount);
end;
if vRight <> '' then Inc(vCount);
case vCount of
0: ;
1: Result := mText;
else
Result := VarArrayCreate([0, Pred(vCount)], varVariant);
vRight := mText;
I := Pos(mDivision, vRight);
vCount := 0;
while I > 0 do begin
vLeft := Copy(vRight, 1, I - 1);
vRight := Copy(vRight, I + L, T);
Result[vCount] := vLeft;
I := Pos(mDivision, vRight);
Inc(vCount);
end;
if vRight <> '' then Result[vCount] := vRight;
end;
end; { TextToVariant }