亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

datatree和數(shù)據(jù)庫(kù)綁定的最少代碼

2019-11-18 17:57:30
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

unit mmslibrarypage;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, VirtualTrees, ComCtrls, ToolWin, mpToolBar,basicModal,DataModal,
  database,myScroll,insertdemon,MySQL,newmmsForlibrary;

type
  TMMSLibraryForm = class(TPageForm)
    mainToolBar: TmpToolBar;
    btnNewMMS: TToolButton;
    btnDelete: TToolButton;
    DataTree: TVirtualStringTree;
    ilImages: TImageList;
    btnImport: TToolButton;
    btn2: TToolButton;
    btn3: TToolButton;
    btn4: TToolButton;
    btn5: TToolButton;
    btnExport: TToolButton;
    btnRefresh: TToolButton;
    PRocedure FormCreate(Sender: TObject);
    procedure btnNewMMSClick(Sender: TObject);
    procedure btnDeleteClick(Sender: TObject);
    procedure btnImportClick(Sender: TObject);
    procedure btnExportClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btnRefreshClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DataTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
      Column: TColumnIndex; TextType: TVSTTextType;
      var CellText: WideString);
    procedure DataTreeInitNode(Sender: TBaseVirtualTree; ParentNode,
      Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
  
  private
    { Private declarations }
    stringlist:TStringList;
  public
    procedure  refreshtree();
  end;

  procedure GetMMSFromLibrary(dparam: TStringList; mysql_rows: PMYSQL_ROW);

type
 PMMSTreeNode=^TMMStreeNode;

//自定義的datatree的結(jié)構(gòu)
 TMMStreeNode=record
   mmsid:string;
   mmstype:string;
   mmssmil:string;
   mmssize:Integer;
   mmssubject:string;
 end;

var
  MMSLibraryForm: TMMSLibraryForm;

implementation

{$R *.dfm}

procedure TMMSLibraryForm.FormCreate(Sender: TObject);
begin
  Self.Font:=application.MainForm.Font;                                        //保持程序中字體一致
  stringlist:=TStringList.Create;                                                       //保存要顯示的數(shù)據(jù)
  DataTree.NodeDataSize:=SizeOf(TMMStreeNode);                 //初始化datatree的節(jié)點(diǎn)大小
end;

procedure TMMSLibraryForm.FormShow(Sender: TObject);
var
  pdbinfo: PDatabaseInfo;
  column : TVirtualTreeColumn;
  Header : TStrings;
  i      : Integer;
  node   : PVirtualNode;
  data   : PINT;

  sql    : string;
  pnode1 : PMMSTreeNode;
begin
  Header:=TStringList.Create;

//添加顯示的列名
  if trim(Header.Text)='' then
  begin
    Header.Add('ID');
    Header.Add('Type');
    Header.Add('Smil 1.0/2.0');
    Header.Add('Size(B)');
    Header.Add('Subject');
  end;

//設(shè)置列的顯示

  for i:=0 to Header.Count-1 do
  begin
    column:= DataTree.Header.Columns.Add;
    column.Text:= Header[I];
    column.Width:=dataTree.ClientWidth div 6;
    if i=4 then
       column.Width:= dataTree.ClientWidth div 3-10;
  end;

//    連接數(shù)據(jù)庫(kù),獲取指定的數(shù)據(jù)庫(kù)(是不是忒簡(jiǎn)單

pdbinfo:=currentdatabase.databases.GetByIndex(0);

    Refreshtree;

end;

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';

//回調(diào)函數(shù):讓被調(diào)用者調(diào)用調(diào)用者自身的函數(shù)。執(zhí)行ExeuteSQlQurey時(shí)調(diào)用了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,

//即用被調(diào)用者的值(mysql_rows )初始化調(diào)用者的參數(shù)

//這個(gè)觀點(diǎn)很重要,使用也很廣泛和特殊
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

//這是關(guān)鍵的步驟:將stringlist和datatree綁定。這個(gè)函數(shù)的解釋如下:

(**********************************************************************************************************

property OnGetText: TVSTGetTextEvent;
Description

This is one of the fundamental string tree events which must always be handled. The string tree will fire this event every time when it needs to know about the text of a specific node and column. This is mainly the case when the node appears in the visible area of the tree view (in other words it is not scrolled out of view) but also on some other occasions, including streaming, drag and drop and calculating the width of the node.  

The node text is distinguished between two text types:  

  • Normal text: If TextType is ttNormal return the main node caption for the specified column.
  • Static text: All text that you return when TextType is ttStatic will be displayed right beside the normal text (or left to it if the column's BidiMode is not bdLeftToRight, i.e. the column has right-to-left layout). Static text is used only for informational purposes; it cannot be selected or dragged and if the column is not wide enough to show all text it will not be shortened with an ellipsis (...) as normal text. The string tree will only query for static text if the StringOptions (see TreeOptions) include toShowStaticText. This is off by default.  

When this event is fired the text parameter will always be initialized with the value of property DefaultText. To handle the event get your node data and then extract the string for the appropriate column and TextType.

Notes
Be sure that your event handler only contains absolutely necessary code. This event will be fired very often - easily a 

few hundred times for medium sized trees with some columns defined when the tree is repainted completely. 

For example it is far too slow to use Locate() on some Dataset, a database query result or table, and then get the text 

from some TField. This may only work with in-memory tables or a client dataset. When you initialize your node data do 

some caching and use these cached values to display the data.

************************************************************************************************************)

    for i:=0 to stringlist.Count div 5 -1 do
    begin
      case Column of
        0:CellText:=stringlist[node.index * 5];
        1:CellText:=stringlist[node.index * 5+1];
        2:CellText:=stringlist[node.index * 5+2];
        3:CellText:=stringlist[node.index * 5+3];
        4:CellText:=stringlist[node.index * 5+4];
      end;
    end;

end;

//這個(gè)函數(shù)居然可以不用也可以連數(shù)據(jù)庫(kù),奇怪?

procedure TMMSLibraryForm.DataTreeInitNode(Sender: TBaseVirtualTree;
  ParentNode, Node: PVirtualNode;
  var InitialStates: TVirtualNodeInitStates);
var
  Data: ^Int64;
begin
//  Data := Sender.GetNodeData(Node);
//  Data^ := Node.Index;
end;

end.



上一篇:怎么讓TreeView前面顯示CheckBox

下一篇:ADO方式下判斷數(shù)據(jù)表是否存在

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

91视频免费看片| 乐播av一区二区三区| 中文字幕一区二区三区四区五区| 狠狠狠色丁香婷婷综合久久五月| 日韩午夜激情电影| caoporn-草棚在线视频最| 亚洲激情在线| 国产精品二三区| 亚洲大胆人体大胆做受1| 免费av片在线观看一道本| 欧美人与动牲交xxxxbbbb| 亚洲超碰97人人做人人爱| 成人综合一区| 国产羞羞视频在线观看| 一区精品在线观看| 极品国产人妖chinesets亚洲人妖| 中文字幕日本视频| 久久九九免费视频| 国产suv精品一区| 成人激情视屏| 欧美专区一区| 97久久超碰| 无码国产色欲xxxx视频| 国产成人精品亚洲日本在线观看| 精品黄色免费中文电影在线播放| 欧美精品一二三区| 亚洲精品午夜久久久久久久| 最近中文字幕一区二区| eeuss影院95999部| 天天色天天综合网| 欧美亚洲国产一区二区三区| 欧美精品久久久久久久久46p| 少妇欧美激情一区二区三区| 国产又白又嫩又紧又爽18p| 毛片在线播放网址| 成人免费视频毛片| 亚洲午夜激情在线| 色视频www在线播放| japanese国产| 欧美精品 国产精品| 亚洲AV无码一区二区三区少妇| 亚洲一区网站| 日韩精品无码一区二区三区免费| 欧美日韩国产综合草草| 国产精品视频在线看| 中文字幕精品一区久久久久| 国内精品久久久久久久| 日韩美女av在线| 国产伦精品一区二区三区精品| 欧美性猛交一区二区三区精品| 天天做天天干天天操| 亚洲美女视频在线免费观看| 亚洲精品在线不卡| 亚洲第一天堂av| 免费看成年人视频在线观看| 男人操女人的视频在线观看欧美| 色综合久久久888| 国产高清不卡二三区| 国产原创popny丨九色| 91大神在线资源观看无广告| 精品国产乱码久久久久久久软件| 刘玥91精选国产在线观看| 久久精品欧美日韩精品| 青青草视频免费在线观看| 999精品视频在线观看| 7777精品伊人久久久大香线蕉完整版| 欧美三级在线观看视频| 亚洲a在线播放| 国产精品视频一区二区免费不卡| 色婷婷综合视频| 亚洲国产一区二区三区| 欧美激情性xxxxx| 亚洲一区二区视频在线播放| 精品人妻aV中文字幕乱码色欲| 交视频在线观看国产| 国产精品色婷婷久久58| 亚洲欧美日韩成人网| 亚洲 欧美 成人| 黄色高清在线观看| 午夜精品久久久久久久99樱桃| 婷婷精品视频| 91精品视频免费在线观看| 琪琪亚洲精品午夜在线| 国产原创popny丨九色| 稀缺呦国内精品呦| 九色丨porny丨自拍入口| 国产精一品亚洲二区在线视频| 亚洲国产精品久久久久爰色欲| 国产对白叫床清晰在线播放| 亚洲美女性视频| 亚洲v国产v在线观看| 日本少妇吞精囗交| 国产91色在线观看| 中文字幕123| 精品国产www| 中文字幕国产在线观看| 免费男同深夜夜行网站| 日韩一级黄色片| 7777精品伊人久久久大香线蕉经典版下载| 欧美xxxxxxxxx59| 性生大片免费观看性| 51社区在线成人免费视频| 日韩在线观看电影完整版高清免费悬疑悬疑| 欧美国产一区二区| 婷婷综合电影| 天堂成人在线| 一级黄色a毛片| 天堂久久午夜av| 国产mv日韩mv欧美| 国产一级片免费看| 一区二区三区日韩欧美精品| 无码h黄肉3d动漫在线观看| 亚洲综合影视| 亚欧美在线观看| 在线播放av中文字幕| 欧美www在线观看| 网友自拍区视频精品| 制服师生第一页| 亚洲av无码专区在线| 黄色漫画在线免费观看| 天天色天天操天天做| 欧美夫妻性视频| 无码人妻精品一区二| 免费看男男www网站入口在线| 欧美一区二区三区喷汁尤物| av一区二区三区四区电影| av网站一区| 91欧美日韩在线| 日本一二三区不卡| 日韩欧美手机在线| 国产欧美欧美| 久久久亚洲国产天美传媒修理工| 亚洲日本欧美| www.操操操| 蜜乳av综合| 国产免费一级| 九色自拍视频在线观看| 成人一级黄色片| 97久久国产亚洲精品超碰热| 日本一二三区在线| 久久久夜精品| 中国一级片黄色一级片黄| 在线视频一区二区三| 国产精品日韩欧美综合| 精品久久国产一区| 免费激情视频网站| 日本精品一区二区三区四区| 在线观看中文字幕不卡| 精品电影一区二区三区| 欧美人与性动交α欧美精品图片| 人人精品亚洲| 91精品国产91久久久久青草| 一个人免费视频www在线观看| 欧美日韩国产91| 久久精品高清| 91精品国产免费久久综合| 黑人精品无码一区二区三区AV| 盗摄系列偷拍视频精品tp| 欧美9999| 在线免费看黄| 日本韩国一区二区| 伊大人久久香线焦宗合一75大| jizzjizzjizz亚洲女| 国产一级黄色片免费| 大乳在线免费观看| 伊人久久大香线蕉综合75| 国产精品久久777777换脸| 色噜噜狠狠一区二区三区| 久久精品1区| 黄色三级高清在线播放| a视频在线看| 亚洲成色在线综合网站2018站| 亚洲一级Av无码毛片久久精品| 全部毛片永久免费看| 国际精品欧美精品| 一本色道久久88精品综合| 成人av综合网| 日本在线视频网址| 日韩av高清在线看片| 国产美女免费观看| 2021久久精品国产99国产精品| 美女毛片一区二区三区四区最新中文字幕亚洲| 在线观看视频免费| 免费久久99精品国产自| 免费成人深夜夜行网站| 色婷婷热久久| 成人在线视频一区二区| juy有坂深雪中文字幕| 欧美成人hd| 无码人妻精品一区二区三区9厂| 午夜不卡av在线| 精品动漫av| 欧美a级在线观看| 国产综合第一页| 国产精品视频自在线| 国产成人一区在线| 欧美国产一区二区| 国产精品人成电影在线观看| 国产奶头好大揉着好爽视频| 天天射天天操天天干| 欧美色图亚洲图片| 日本二区视频| 黑人一区二区三区四区五区| 成人h动漫精品一区二区无码| 中文字幕欧美日韩一区| av电影院在线看| 九九视频精品全部免费播放| 岛国av中文字幕| 亚洲成人av一区二区三区| 久久精品99久久久久久| 国产三级精品在线观看| 欧美精品99久久久**| 91麻豆精品| 欧美做爰性生交视频| 亚洲一区在线观看视频| 国产精品成人一区二区艾草| 日韩中文字幕在线| 97婷婷大伊香蕉精品视频| 日本h片久久| 91国产丝袜播放在线| 国内精品久久久久久野外| eeuss网址直达入口| 国产精品国产对白熟妇| 国产日产精品一区二区三区的介绍| 特级丰满少妇一级| 欧美丰满熟妇xxxxx| 污污的网站在线免费观看| 日韩av大片在线| 在线精品视频视频中文字幕| 久热精品在线观看视频| 91精品国产色综合久久| www.在线视频.com| 黄色福利在线观看| 国产精品爽爽ⅴa在线观看| v天堂福利视频在线观看| 丁香综合五月| 久久综合丝袜日本网| 国产福利在线| 午夜精品成人av| 99精品视频在线看| 91国偷自产一区二区三区成为亚洲经典| av播放官网| 亚洲国产日韩欧美在线动漫| 不卡一区二区中文字幕| 99久久.com| 在线成人国产| 精品女同一区二区三区在线观看| 林心如三级全黄裸体| 激情不卡一区二区三区视频在线| 日本一区二区三区视频在线看| 日韩在线观看免费| 狠狠操狠狠干视频| 国产一区二区不卡视频| 激情五月宗合网| 亚洲**2019国产| 欧美久久99| 成年网站免费在线观看| 黄漫在线观看| 亚洲国产一区二区精品视频| 久久精品人人做人人爽电影| www婷婷av久久久影片| 最近中文字幕免费视频| 激情五月色综合亚洲小说| 欧洲精品一区色| 在线电影中文日韩| 天天操天天色综合| 国产精品一区二区三区视频网站| 2020久久国产精品| 国产网址在线观看| 精品国产免费一区二区三区| 亚洲不卡中文字幕无码| 欧美一级免费在线观看| 最新亚洲精品| 中文字字幕在线中文乱码| 亚洲私人影吧| 欧美日韩美女| 狠狠躁狠狠躁视频专区| 国产5g影院天天爽天天看| 成人免费看片'免费看| 久久青草国产手机看片福利盒子| 日韩av卡一卡二| 波多野结衣av无码| 精品免费在线视频| 精品一区久久久久久| 极品美乳网红视频免费在线观看| 屁屁影院国产第一页| 国产精品视频在线播放| 欧美高清你懂得| 婷婷六月天在线| 可以www视频| 男女啪啪a级毛片| 亚洲国产精品久久久久爰性色| 成人免费在线视频观看| 亚洲一区二区久久| 欧美日韩国内| 色狠狠一区二区三区| 久久爱91午夜羞羞| 91理论片午午论夜理片久久| 激情小视频在线| 日韩在线第三页| 久久久久久久久久久久久夜| 日韩aaaa| 久久免费国产精品1| 天堂久久精品忘忧草| 1区1区3区4区产品乱码芒果精品| 在线视频你懂得| 能在线观看的av网站| 国产视频一区二区在线播放| 亚洲精品国产成人影院| 亚洲精品国产一区| 国产视频网站在线观看| 国产精品日本精品| 最新中文字幕一区二区三区| 91成人在线精品视频| 在线性视频日韩欧美| 亚洲一区二区三区成人在线视频精品| 日韩成人三级| av一区在线| 动漫3d精品一区二区三区| 一级黄色特级片| 国产激情99| 91成人免费电影| 激情se五月| 中文字幕国产传媒| 99热6这里只有精品| 波多野结衣在线电影| 91麻豆国产福利在线观看宅福利| 在线观看日韩一区|