1.设置TVirtualStringTree属性:
toFullRowSelect : false;
toMultiSelect:false;
toExtendedFocous:true;
toEditable:true;
editDelay:0 //如果不调用editnode,则不会CREATE EDITOR
2.实现virtualStringtree的ONClick事件: 功能:根据当前获取焦点的node,判断是否edit该node
TMMSLibraryForm版本:
procedure TMMSLibraryForm.DataTreeClick(Sender: TObject);var Column:TColumnIndex; node:PVirtualNode;begin if DataTree.FocusedNode=nil then Exit;
node:=DataTree.FocusedNode; Column:=DataTree.FocusedColumn;
if Column<>3 then DataTree.EditNode(node,Column);
end;
TSPNumbersForm版本:
procedure TSPNumbersForm.VSTreeSPnumberClick(Sender: TObject);var Column:TColumnIndex; node:PVirtualNode;begin if VSTreeSPnumber.FocusedNode=nil then Exit;
node:=VSTreeSPnumber.FocusedNode; Column:=VSTreeSPnumber.FocusedColumn;
VSTreeSPnumber.EditNode(node,Column);end;
TTestNumberForm版本:
procedure TTestNumberForm.VSTreeTestNumberClick(Sender: TObject);var Column:TColumnIndex; node:PVirtualNode;begin if VSTreeTestNumber.FocusedNode=nil then Exit;
node:=VSTreeTestNumber.FocusedNode; Column:=VSTreeTestNumber.FocusedColumn;
VSTreeTestNumber.EditNode(node,Column); end;
3.实现virtualStringtree的ONCreateEditor事件: 功能:如果editnode被调用,则执行此函数;之前设置editDelay:0,是为避免在不允许改动的node上出现editor
TMMSLibraryForm版本:
procedure TMMSLibraryForm.DataTreeCreateEditor(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);begin EditLink:=TStringEditLink.create('',stringlist[node.index * 5+Column])end;
TSPNumbersForm版本:
procedure TSPNumbersForm.VSTreeSPnumberCreateEditor( Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);begin EditLink:=TStringEditLink.create('',stringlist[node.index * 7+Column]);end;
TTestNumberForm版本:
procedure TTestNumberForm.VSTreeTestNumberCreateEditor( Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);begin EditLink:=TStringEditLink.create('',stringlist[node.index * 4+Column]);end;
4.实现virtualStringtree的ONNewText事件: 功能:根据获取焦点的node的column,判断值的合法性,并同时更新数据库和stringlist
TMMSLibraryForm版本:
procedure TMMSLibraryForm.DataTreeNewText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; NewText: WideString);var sql:string;begin case Column of 0: begin if (StrToInt64Def(Trim(NewText),-1)=-1) then begin ShowMessage('"'+Trim(NewText)+'"'+'does not represent a valid number!'); Exit; end;
sql:='update mmslibrary set MMS_ID='+Trim(NewText)+' where MMS_ID='+Stringlist.strings[node.Index*5];
end;
1: sql:='update mmslibrary set MMS_Type="'+Trim(NewText)+'" where MMS_ID='+Stringlist.strings[node.Index*5];
2: sql:='update mmslibrary set MMS_Smil="'+Trim(NewText)+'" where MMS_ID='+Stringlist.strings[node.Index*5];
4: sql:='update mmslibrary set MMS_Subject="'+Trim(NewText)+'" where MMS_ID='+Stringlist.strings[node.Index*5];
end;
if currentdatabase.ExecuteSqlNoQurey(sql)= 1 then ShowMessage('Save to Database sucessfully!') else ShowMessage('Error occurs while Saving to Database!');
Stringlist.strings[node.Index*5+Column]:=Trim(NewText);
DataTree.RootNodeCount:=stringlist.Count div 5 ; DataTree.Refresh;end;
TSPNumbersForm版本:
procedure TSPNumbersForm.VSTreeSPnumberNewText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; NewText: WideString);var sql:string;begin case Column of 0: begin if (StrToInt64Def(Trim(NewText),-1)=-1) then begin ShowMessage('"'+Trim(NewText)+'"'+'does not represent a valid number!'); Exit; end;
sql:='update spnumbers set SP_SPID='+Trim(NewText)+' where SP_SPID='+Stringlist.strings[node.Index*7]; end; 1: sql:='update spnumbers set SP_Name="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7]; 2: sql:='update spnumbers set SP_Nameforshort="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7]; 3: sql:='update spnumbers set SP_operationtype="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7]; 4: sql:='update spnumbers set SP_Code="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7]; 5: sql:='update spnumbers set SP_operationcode="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7]; 6: sql:='update spnumbers set SP_operationName="'+Trim(NewText)+'" where SP_SPID='+Stringlist.strings[node.Index*7]; end;
if currentdatabase.ExecuteSqlNoQurey(sql)= 1 then ShowMessage('Save to Database sucessfully!') else ShowMessage('Error occurs while Saving to Database!');
Stringlist.strings[node.Index*7+Column]:=Trim(NewText);
VSTreeSPnumber.RootNodeCount:=stringlist.Count div 7 ; VSTreeSPnumber.Refresh;end;
TTestNumberForm版本:
procedure TTestNumberForm.VSTreeTestNumberNewText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; NewText: WideString);var sql:string;begin case Column of 0: begin if (StrToInt64Def(Trim(NewText),-1)=-1) then begin ShowMessage('"'+Trim(NewText)+'"'+'does not represent a valid number!'); Exit; end;
sql:='update testnumbers set TN_MSISDN='+Trim(NewText)+' where TN_MSISDN='+Stringlist.strings[node.Index*4]; end; 1: sql:='update testnumbers set TN_Imsi="'+Trim(NewText)+'" where TN_MSISDN='+Stringlist.strings[node.Index*4]; 2: sql:='update testnumbers set TN_Location="'+Trim(NewText)+'" where TN_MSISDN='+Stringlist.strings[node.Index*4]; 3: sql:='update testnumbers set TN_Description="'+Trim(NewText)+'" where TN_MSISDN='+Stringlist.strings[node.Index*4]; end;
if currentdatabase.ExecuteSqlNoQurey(sql)= 1 then ShowMessage('Save to Database sucessfully!') else ShowMessage('Error occurs while Saving to Database!');
Stringlist.strings[node.Index*4+Column]:=Trim(NewText);
VSTreeTestNumber.RootNodeCount:=stringlist.Count div 4 ; VSTreeTestNumber.Refresh;end;