100分,左轻侯大侠的大富翁离线源码解释
菜鸟一个,看左轻侯大侠的大富翁离线源码,不懂,求助各位大侠,解释越详细越好
源码下载地:http://www.wushuang.net/soft/re31.zipvar
  frmMain: TfrmMain;
  DsList:TDataSourceList;  //这个TDataSourceList是什么类型的?implementationuses ComObj,mshtml, Search, dm, htmlGen, update, option;{$R *.DFM}
procedure TfrmMain.FormCreate(Sender: TObject);
var
    strConn:string;
    strlst:TStringList;
begin       DsList := TDataSourceList.Create;
       DsList.LoadfromFile;
       InitpmnuDBlist;    //这句是什么意思?       DM1.sgQList := sgMain;    // DM1是什么没有声明,只有一个DM数据单元       sgMain.OnDrawCell := DM1.OnDrawSGCell;  //这句是什么意思?       sltTreeViewKey := TStringList.Create;       if DsList.Count <> 0 then DM1.InitDB(DsList.Items[0].connstr)
               else  DM1.InitDB('');
       
       Init;  //这句是什么意思?       btnAboutClick(self);  //这句是什么意思?end;procedure TfrmMain.TV1Change(Sender: TObject; Node: TTreeNode);
var
   ssql:string;
   oldcur:tcursor;   //这句是什么意思?
   Time:TDatetime;
   RoomID:integer;
begin
     if tv1.Selected =nil then exit;
     if TV1.Selected.Level = 1 then
     begin
        DM1.SelectNoRoom;
        exit;
     end;       if Node = TV1.TopItem then
        roomid := -1
     else
        roomid := strtoint(sltTreeViewKey.Values[inttostr(Node.AbsoluteIndex)]);
     tv1.Refresh;
     sb1.Panels[1].Text:='';
     oldcur:=Screen.Cursor;
     screen.cursor :=crHourGlass;   //这句是什么意思?
     Time := now;
     sb1.Panels[0].Text := '正在查询数据……';     DM1.GetRoomRecord(RoomID);     sb1.Panels[1].Text:= '记录数:' + inttostr(DM1.QuesCount) ;     sb1.Refresh;     sb1.Panels[3].Text:='查找耗时:' + formatdatetime('hh:nn:ss:zz',now-time);
     sb1.Panels[2].Text:='类别:' + TV1.Selected.Text;
     sb1.Panels[0].Text:='完成';
     screen.cursor :=oldcur;
end;procedure TfrmMain.btnSearchClick(Sender: TObject);
var
   ssql,ssqlRe,TargetStr:string;
   oldcur:tcursor;
   Time:Tdatetime;
begin
     ssqlRe := '';
     with TfrmSearch.Create(self) do
     begin
          ShowModal;
          if Return = true then
          begin
               ssqlRe := SearchStr;
               TargetStr := Target;
          end;
          free;
     end;     if ssqlRe = '' then  exit;//     去掉这个注释将显示查询的sql字符串
//     ShowMessage(ssqlRe);     time:=now;
     sb1.Panels[0].Text:='正在查询数据……';
     sb1.Panels[1].Text:='';
     sb1.Panels[2].Text:= TargetStr;
     sb1.Panels[3].Text:='';
     sb1.Refresh;     try
     oldcur:=Screen.Cursor;
     screen.cursor :=crHourGlass;     ssql := ssqlRe ;     DM1.Search(ssql);     finally
     sb1.Panels[1].Text:='共'+ inttostr(DM1.QuesCount) + '条记录';
     sb1.Refresh;
     screen.Cursor:=oldcur;
     sb1.Panels[0].Text:='完成';
     sb1.Panels[3].Text:='查找耗时:' + formatdatetime('hh:nn:ss:zz',now-time);
     end;
end;
procedure TfrmMain.ShowRecord(ID:Integer);
var
   i:integer;
   QuesInfo:TQuesInfo; //是什么类型?
begin
     try
       DM1.GetQuesContent(ID,QuesInfo);       sb1.Panels[0].Text:='正在更新视图……';       ShowHtml(IE,QuesInfo.Content);       with QuesInfo do
       begin
           lblTitle.Caption:= '来自' + from + ':' + subject;           LVInfo.Items.Clear;
           LVInfoAdd('标题',subject);
           LVInfoAdd('编号',ID);
           LVInfoAdd('提问者',from);
           LVInfoAdd('提问时间',RegdateTime);
           LVInfoAdd('最后回复时间',datetime);
           LVInfoAdd('分数',Points);
           LVInfoAdd('状态',Status);
           LVInfoAdd('所属类别',RoomName);           LVInfoAdd('阅读次数',GetTimes);
           LVInfoAdd('回复次数',ReplyTimes);       end;       PCContent.ActivePageIndex := 0;
       frmMain.FocusControl(IE);
     finally
       sb1.Panels[0].Text:='完成';
     end;
end;

解决方案 »

  1.   


    procedure TfrmMain.btnSetDBClick(Sender: TObject);
    var
            sltConn:TStringlist;
    begin
            if DM1.SetConnnection then   
            begin
    //                DM1.InitDB('');   //这句是什么意思?
                    Init;
            end;
    end;procedure TfrmMain.Init;    
    var
       TN1,TN2,TN3:TTreeNode;
       i,j:integer;
       Rooms:TStringlist;
    begin
    //       try
    //                DM1.InitDB;
    {       except
                    ShowMessage('初始化数据库时出错! ');
                    TV1.Items.Clear;
                    exit;
           end;}       TV1.Items.Clear;
           tn1:=tv1.Items.Add(nil,'全部类别');
           tn1.ImageIndex:=1;
           Rooms := TStringList.Create;       sltTreeViewKey.Clear;       with dm1 do
           begin
               for i := 0 to SltGroups.count - 1 do
               begin
                 tn2:=tv1.Items.AddChild(tn1,trim(SltGroups[i]));
                 tn2.ImageIndex:=1;             GetRoomsByGroup(Rooms, TN2.Text);
                 for j := 0 to Rooms.Count - 1 do
                 begin
                     TN3 := TV1.Items.AddChild(TN2,Rooms.Names[j]);
                     TN3.ImageIndex := 1;
                     //保存TreeNode和RoomID之间的对应关系
                     sltTreeViewKey.Add(inttostr(TN3.AbsoluteIndex) + '=' + Rooms.Values[Rooms.Names[j]]);
                 end;
               end;
           end;       Rooms.free;       tv1.TopItem.Expand(false);
           if TV1.TopItem.Count <> 0 then
           begin
               TV1.TopItem.getFirstChild.Expand(false);
               TV1.Selected := TV1.TopItem.getFirstChild;
           end;end;
    procedure TfrmMain.LVInfoAdd(itemname, value: string);
    var
            ListItem:TListItem;  //这句是什么意思?什么类型
    begin
         with LVInfo do
         begin
            ListItem := Items.Add;
            ListItem.ImageIndex := 2;
            ListItem.Caption := itemname;
            ListItem.SubItems.Add(value);
         end;end;
    procedure TfrmMain.btnSaveClick(Sender: TObject);    
    begin
            try
            IE.ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT, EmptyParam, EmptyParam);       //这句的作用?
            Except
            end;end;procedure TfrmMain.ShowHtml(Browser:TWebBrowser;content: string);
    var
        vv: Variant;
        HTMLDocument: IHTMLDocument2;
    begin
            vv := VarArrayCreate([0,0],varVariant);
            vv[0] := content;
            HTMLDocument := browser.Document as IHTMLDocument2;
            HTMLDocument.write(PSafeArray(TVarData(vv).VArray));
            HTMLDocument.charset := 'gb2312';
            HTMLDocument.close;end;procedure TfrmMain.sgMainSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);            //功能?
    var
            ID:string;
    begin
            if ACol = 1 then
            begin
                ID := sgMain.Cells[0,aRow];
                if ID <> '' then ShowRecord(strtoint(ID));
            end;
    end;procedure TfrmMain.mnuCacluAllRoomRecordsClick(Sender: TObject);
    var
       oldcur:tcursor;
    begin
            try
                  oldcur := Screen.Cursor;
                  Screen.Cursor := crHourGlass;
                  sb1.Panels[0].Text:='正在计算……';
                  sb1.Refresh;
                  DM1.CalcuAllRoomsRecords;
            finally
                  Screen.Cursor := oldcur;
                  sb1.Panels[0].Text:='完成。';
            end;end;procedure TfrmMain.mnuOptionClick(Sender: TObject);
    begin
            with TfrmOption.Create(self) do
            begin
                    ShowModal;
                    free;               
            end;
            InitpmnuDBlist;   //这句是什么意思?
    end;procedure TfrmMain.InitpmnuDBlist;    //什么功能?
    var
            i:integer;
            MenuItem:TMenuItem;
    begin
            with pmnuDBlist do
            begin
                    Items.Clear;
                    for i := 0 to DsList.Count - 1 do
                    begin
                            MenuItem := TMenuItem.Create(Self);
                            MenuItem.Caption := DsList.Items[i].Name;
                            MenuItem.OnClick := OnpmnuDBClick;
                            Items.Add(MenuItem);                      
                    end;        end;end;
    procedure TfrmMain.OnpmnuDBClick(Sender: TObject);  //什么功能?
    var
            i:integer;
            InitStr:string;
    begin
            i := TMenuItem(Sender).MenuIndex;
            InitStr := DsList.Items[i].connstr;
            DM1.InitDB(InitStr);
            Init;
            DsList.SetFirst(i);
            InitpmnuDBlist;
    //        ShowMessage(inttostr(i));        
    end;
    initialization
      OleInitialize(nil);            //????finalization
      OleUninitialize;               //???????end.