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;
[Delphi程序]用API实现在MSN的信息提示
|