procedure TMMSLibraryForm.refreshtree();
var
sql : string;
begin
DataTree.Clear;
stringlist.Clear;
sql:='select MMS_ID,MMS_Type,MMS_Smil,MMS_Size,MMS_Subject from mmslibrary';
//回调函数:让被调用者调用调用者自身的函数。执行ExeuteSQlQurey时调用了GetMMSFromLibrary
(***********************************************************************************************************
procedure TDatabase.ExeuteSQlQurey(dparam: Pointer; sql: string; callback: TDbDataCallBack);
var
aHandle, db: pmysql;
qresult: PMYSQL_RES;
mysql_rows: PMYSQL_ROW;
iRtn, fcount, i: Integer;
begin
try
aHandle := mysql_init(nil);
//mysql_real_connect(aHandle, nil, nil, nil, nil, 0, nil, 0);
if commonconfig.remotemode = 0 then
db := mysql_real_connect(aHandle, nil, nil, nil, PAnsichar(FCurrentDataBase), 0, nil, 0)
else
db := mysql_real_connect(aHandle, PAnsichar(RHost), PAnsichar(RUser), PAnsichar(RPassword), PAnsichar(FCurrentDataBase), 0, nil, 0);
if db <> nil then
begin
iRtn := mysql.mysql_query(db, Pchar(sql));
if iRtn = 0 then
begin
qresult := mysql.mysql_store_result(db);
if qresult <> nil then
begin
fcount := mysql.mysql_num_rows(qresult);
for i := 0 to fcount - 1 do
begin
mysql_rows := mysql.mysql_fetch_row(qresult);
callback(dparam, mysql_rows);
end;
end;
mysql.mysql_free_result(qresult);
end;
end;
finally
mysql_Close(db);
end;
end;
*************************************************************************************************************)
currentdatabase.ExeuteSQlQurey(stringlist,sql,@GetMMSFromLibrary);
DataTree.RootNodeCount:=stringlist.Count div 5 ; //小技巧啦
DataTree.Refresh;
end;
//daparam即是currentdatabase.ExeuteSQlQurey(stringlist,sql,@GetMMSFromLibrary);中的stringlist,
//即用被调用者的值(mysql_rows )初始化调用者的参数
//这个观点很重要,使用也很广泛和特殊
procedure GetMMSFromLibrary(dparam: TStringList; mysql_rows: PMYSQL_ROW);
begin
dparam.Add(mysql_rows[0]);
dparam.Add(mysql_rows[1]);
dparam.Add(mysql_rows[2]);
dparam.Add(mysql_rows[3]);
dparam.Add(mysql_rows[4]);
end;
procedure TMMSLibraryForm.btnNewMMSClick(Sender: TObject);
begin
NewMMS:=TNewMMS.Create(MMSLibraryForm);
if NewMMS.ShowModal= mrok then
refreshtree;
end;
procedure TMMSLibraryForm.btnDeleteClick(Sender: TObject);
var
node:PVirtualNode;
sql:string;
begin
if DataTree.FocusedNode=nil then Exit;
node:=DataTree.FocusedNode;
sql:='delete from mmslibrary where MMS_ID="'+ stringlist[node.index * 5]+'"';
currentdatabase.ExecuteSqlNoQurey(sql);
RefreshTree;
end;
procedure TMMSLibraryForm.btnImportClick(Sender: TObject);
var
dl:TOpenDialog;
begin
dl.Filter:='eml files|*.eml';
end;
procedure TMMSLibraryForm.btnExportClick(Sender: TObject);
begin
//
end;
procedure TMMSLibraryForm.btnRefreshClick(Sender: TObject);
begin
RefreshTree;
end;
procedure TMMSLibraryForm.FormDestroy(Sender: TObject);
begin
stringlist.Free;
inherited;
end;
procedure TMMSLibraryForm.DataTreeGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
i:Integer;
begin
//这是关键的步骤:将stringlist和datatree绑定。这个函数的解释如下:
(**********************************************************************************************************