⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 viewinfofrm.pas

📁 《Delphi实例开发教程》源代码包说明
💻 PAS
字号:
unit ViewInfoFrm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, CheckLst, ExtCtrls, Buttons, Mask, DBCtrls,
  DB, DBTables, Grids, DBGrids, ViewFra;
    Type
    inforecord=record
           IDRecord:string;
           headRecord:string;
           DatetimeRecord:Tdatetime;
           TypeRecord:string;
           SourceRecord:string;
           LinkRecord:string;
           ContentRecord:string;
           SystimeRecord:Tdatetime;
        end;

type
  TfrmViewInfo = class(TForm)
    pnlView: TPanel;
    pnlBar: TPanel;
    pnlTable: TPanel;
    //qryTemp: TQuery;
    cbbOrder: TComboBox;
    lbOrder: TLabel;
    rbAscend: TRadioButton;
    rbDesent: TRadioButton;
    spView: TSplitter;
    fraView1: TfraView;
    procedure tshIDQueryShow(Sender: TObject); //显示ID列表树
    procedure tvIDListChange(Sender: TObject; Node: TTreeNode); //选择一个ID专题
    procedure IDSearch(Sender: TObject);//选择ID对应的所有数据记录,按字段排序
    procedure View(Sender: TObject);//按条件查询数据记录,按字段列表项排序
    procedure tshConditionQueryShow(Sender: TObject);//添加ID列表到列表框cbbIDSelect
    procedure FormShow(Sender: TObject);//初始化
    procedure FormClose(Sender: TObject; var Action: TCloseAction);//关闭时清除临时数据库
    procedure cbIDCheckClick(Sender: TObject);//
    procedure cbbOrderChange(Sender: TObject);//字段列表选择,按字段排序
    procedure cbbIDSelectChange(Sender: TObject);//选择ID后焦点自动离开
    procedure cbbTimeSelectChange(Sender: TObject);
    procedure fraView1cbTimeCheckClick(Sender: TObject);
    procedure fraView1leKeywordKeyPress(Sender: TObject; var Key: Char);//选择时间后焦点自动离开
  private
    { Private declarations }
    procedure viewtitle(info:inforecord);//关键字按标题匹配
    procedure viewtext(info:inforecord);//关键字全文匹配
    procedure viewcontent(info:inforecord);//关键字内容匹配
    procedure InsertTemp(info:inforecord);//记录插入临时表temp
    procedure RestoreKeyword(keyword: string);
  public
    { Public declarations }
  end;

var
  frmViewInfo: TfrmViewInfo;
  SortString:array[0..3] of string;// 排序字段
  page: integer;
implementation

uses MainFrm,DateUtils, DisplayFrm;

{$R *.dfm}
// 插入临时数据表Temp
procedure TfrmViewInfo.InsertTemp(info:inforecord);
begin
//with qryTemp do
with frmMain.AdoqTemp do
  begin
    close;
    sql.Clear;
    sql.Add('select * from temp where ID='+quotedstr(chr(16)));
    open;
    insert;
    //fieldbyname('ID').AsString:=info.IDRecord;
    fieldbyname('ID').AsString:=chr(16);
    fieldbyname('head').AsString:=info.headRecord;
    fieldbyname('Type').AsString:=info.TypeRecord;
    fieldbyname('Source').AsString:=info.SourceRecord;
    fieldbyname('Link').AsString:=info.LinkRecord;
    fieldbyname('Content').AsString:=info.ContentRecord;
    post;
  end;
end;

//关键字按标题匹配
procedure TfrmViewInfo.viewtitle(info:inforecord);
begin
 //关键字匹配
  if pos(lowercase(fraView1.leKeyword.Text),lowercase(info.headRecord))>0 then
    inserttemp(info)  //记录插入临时表
  else
    if fraView1.rbTAndContent.Checked=true then  //判断是否全文匹配
       viewcontent(info);//关键字与内容匹配函数
       //关键字与全文匹配函数接口viewtext(info)
end;

    //关键字与内容匹配
procedure TfrmViewInfo.viewcontent(info:inforecord);
begin
    if pos(lowercase(fraView1.leKeyword.Text),lowercase(info.ContentRecord))>0 then
    inserttemp(info);  //记录插入临时表
end;

    //读取文件并与关键字匹配
procedure TfrmViewInfo.viewtext(info:inforecord);
var f:textfile;line:string;
begin
  if fileexists(info.LinkRecord)=true then //判断文件是否存在
    begin
      assignfile(f,info.LinkRecord);
      reset(f);
      while not eof(f) do
      begin
        readln(f,line);
        //关键字全文匹配(全文查找)
        if pos(lowercase(fraView1.leKeyWord.Text),lowercase(line))>0 then
          begin
            inserttemp(info);//记录插入临时表
            break;
          end;
      end;
    end;
end;

//显示ID列表树,进行界面控制设置
procedure TfrmViewInfo.tshIDQueryShow(Sender: TObject);
begin
  fraView1.lblIDInfo.Caption:='定制保存信息总数...';
  frmdisplay.Clear;  //清除显示页面(外部调用)
  cbbOrder.Enabled:=false;
  rbAscend.Enabled:=false;
  rbDesent.Enabled:=false;
  //.leKeyWordR.Clear;
  fraView1.edtKeyword1.Clear;
  fraView1.edtKeyword2.Clear;
  fraView1.edtKeyword3.Clear;
  fraView1.tvIDlist.Items.Clear;
  fraView1.tvIDList.Items.AddFirst(nil,'用户定制ID');
 // with frmMain.qryCustom do
  with frmMain.AdoqCustom do
  begin
    close;
    sql.Clear;
    SQL.Add('select * from custom order by systime');
    open;
    first;
    while not eof do
    begin
      fraView1.tvIDList.Items.AddChild(fraView1.tvIDList.Items.Item[0],fieldbyname('ID').AsString);
      next;
    end;
  end;
  fraView1.tvIdlist.FullExpand;
end;


//还原关键字
procedure TfrmViewInfo.RestoreKeyword(keyword: string);
var
  Temp:string;
begin
  Temp:=Keyword;
  with fraView1 do
  begin
    //如果不止一个关键字,则还原第一个关键字并继续
    if Pos('%2B',Temp)<>0 then
      edtKeyword1.Text:=Copy(Temp,1,Pos('%2B',Temp)-1)
    //否则还原后退出
    else
    begin
      edtKeyword1.Text:=Temp;
      Exit;
    end;

    //截取第二个关键字后面的字符串
    Temp:=Copy(Temp,Pos('%2B',Temp)+3,Length(Temp));
    //如果不止两个关键字,则还原第二个关键字并继续
    if Pos('%2B',Temp)<>0 then
      edtKeyword2.Text:=Copy(Temp,1,Pos('%2B',Temp)-1)
    //否则还原后退出
    else
    begin
      edtKeyword2.Text:=Temp;
      Exit;
    end;

    //截取第三个关键字后面的字符串
    Temp:=Copy(Temp,Pos('%2B',Temp)+3,Length(Temp));
    //还原第三个关键字
    edtKeyword3.Text:=Temp;
  end;
end;


//选择一个ID专题,
procedure TfrmViewInfo.tvIDListChange(Sender: TObject; Node: TTreeNode);
begin
  frmdisplay.Clear;  //清除显示页面(外部调用)
if node.Text<>'用户定制ID' then
  begin
    //with frmMain.qryCustom do
     with frmMain.AdoqCustom do
      begin
        close;
        sql.Clear;
        SQL.Add('select * from custom where id='+quotedstr(node.Text));
        open;
        //fraView1.leKeyWordR.Text:=fieldbyname('KeyWord').AsString;
        fraView1.edtKeyword1.Clear;
        fraView1.edtKeyword2.Clear;
        fraView1.edtKeyword3.Clear;
        RestoreKeyword(fieldbyname('KeyWord').AsString);
      end;
    DisplayFrm.Page:=1;
    IDSearch(nil); //查询ID对应的所有记录
  end
else
  begin
    fraView1.lblIDInfo.Caption:='定制保存信息总数...';
    rbAscend.Enabled:=false;
    rbDesent.Enabled:=false;
    cbbOrder.Enabled:=false;
    //fraView1.leKeyWordR.Clear;
    fraView1.edtKeyword1.Clear;
    fraView1.edtKeyword2.Clear;
    fraView1.edtKeyword3.Clear;
  end;
end;

//查询ID对应的所有记录
procedure TfrmViewInfo.IDSearch(Sender: TObject);
var IDString:string;
begin
 IDString:=fraView1.tvIdlist.Selected.Text;
  //with frmMain.qryDisplay do
  with frmMain.AdoqDisplay do
  begin
    close;
    sql.Clear;
    SQL.Add('select * from info where id='+quotedstr(IDString));
    sql.Add(' order by '+SortString[cbbOrder.Itemindex]);
    if rbAscend.Checked=true then sql.Add(' asc ')
    else sql.Add(' desc ');
    open;
    if recordcount>0 then
    begin
      fraView1.lblIDInfo.Caption:='定制共保存 '+inttostr(recordcount)+' 条信息';
      cbbOrder.Enabled:=true;
      rbAscend.Enabled:=true;
      rbDesent.Enabled:=true;
    end
    else
    begin
      fraView1.lblIDInfo.Caption:='定制共保存 0 条信息';
      cbbOrder.Enabled:=false;
      rbAscend.Enabled:=false;
      rbDesent.Enabled:=false;
    end;
    frmdisplay.Display; //显示页面(外部调用)
  end;
end;

//按条件查询
procedure TfrmViewInfo.View(Sender: TObject);
var
  WT:integer; //时限
  info:inforecord; //一个信息记录
begin
if fraView1.leKeyWord.Text='' then
  begin
    showmessage('关键字不可以为空');
    exit;
  end;
//with qrytemp do  //清空临时表temp
with frmMain.AdoqTemp do
  begin
    close;
    sql.Clear;
    sql.Add('delete from Temp where ID='+quotedstr(chr(16)));
    execSQL;
  end;
  frmdisplay.Clear; //清空显示页面 (外部调用)
  WT:=1000000;
 // with frmMain.qryInfo do
 with frmMain.AdoqInfo do
  begin
    close;
    sql.Clear;
    SQL.Add('select * from info where head is not null');
    if fraView1.cbIDCheck.Checked=true then
      sql.Add(' and id='+quotedstr(fraView1.cbbIDSelect.Text));
    open;
    first;
    if fraView1.cbTimeCheck.Checked=true then  //时限(多久以内)
      case fraView1.cbbTimeSelect.ItemIndex of
        0:WT := 30;
        1:WT := 90;
        2:WT := 180;
        3:WT := 360;
        4:WT := 100000;
      end;
    while not eof do //按记录逐个查询关键字
      begin
        if (DaysBetween(fieldbyname('datetime').AsDateTime,now)<WT) then
        //
          begin
            info.IDRecord:=fieldbyname('ID').AsString;
            info.headRecord:=fieldbyname('head').AsString;
            info.DatetimeRecord:=fieldbyname('datetime').AsDateTime;
            info.TypeRecord:=fieldbyname('type').AsString;
            info.SourceRecord:=fieldbyname('source').AsString;
            info.LinkRecord:=fieldbyname('link').AsString;
            info.ContentRecord:=fieldbyname('content').AsString;
            info.SystimeRecord:=fieldbyname('systime').AsDateTime;
            viewtitle(info);
          end;
      next;
    end;
   // with frmMain.qryDisplay do //读取临时表显示
    with frmMain.AdoqDisplay do //读取临时表显示
    begin
      close;
      sql.Clear;
      SQL.Add('select * from temp where ID='+quotedstr(chr(16)));
      sql.Add(' order by '+SortString[cbbOrder.Itemindex]);
      if rbAscend.Checked=true then sql.Add(' asc ')
      else sql.Add(' desc ');
      open;
      if recordcount>0 then
      begin
        cbbOrder.Enabled:=true;
        rbAscend.Enabled:=true;
        rbDesent.Enabled:=true;
      end
      else
      begin
        fraView1.lblIDInfo.Caption:='定制共保存 0 条信息';
        cbbOrder.Enabled:=false;
        rbAscend.Enabled:=false;
        rbDesent.Enabled:=false;
        showmessage('没有符合搜索条件的记录');
      end;
      DisplayFrm.Page:=1;
      frmDisplay.Display;  //显示查询结果(外部调用)
    end;
  end;
end;

// 添加ID列表到列表框cbbIDSelect
procedure TfrmViewInfo.tshConditionQueryShow(Sender: TObject);
begin
  cbbOrder.Enabled:=false;
  rbAscend.Enabled:=false;
  rbDesent.Enabled:=false;
  fraView1.cbIDCheck.Checked:=false;
  fraView1.cbTimeCheck.Checked:=false;
  fraView1.leKeyword.Clear;
  frmdisplay.Clear;
  fraView1.cbbIDSelect.Clear;
 // with frmMain.qryCustom do
  with frmMain.AdoqCustom do
  begin
    close;
    sql.Clear;
    SQL.Add('select * from custom order by systime');
    open;
    first;
    while not eof do
    begin
      fraView1.cbbIDSelect.Items.Add(fieldbyname('ID').AsString);
      next;
    end;
  end;
end;

//初始化数据
procedure TfrmViewInfo.FormShow(Sender: TObject);
begin
  //qryTemp.DatabaseName:=extractfilepath(application.ExeName)+'database';
  frmDisplay.pnlDisplay.Parent:=pnlTable;
  frmDisplay.Clear;  //清除显示页面(外部调用)
  SortString[0]:='head';
  SortString[1]:='datetime';
  SortString[2]:='type';
  SortString[3]:='source';
  if fraView1.tshIDQuery.Showing=true then
    begin
      if  fraView1.tvIdlist.Selected.Index>-1 then
      begin
        DisplayFrm.Page:=page;
        //tvIDListChange(fraView1.tvIdlist,fraView1.tvIdlist.Selected);
        with frmMain.AdoqDisplay do
        begin
          close;
          sql.Clear;
          sql.Add('select * from info where ID='
                  +quotedstr(fraView1.tvIdlist.Selected.Text));
          open;
        end;
        frmDisplay.Display;
      end
      else  tshIDQueryShow(nil);
    end
  else
    begin
      with frmMain.AdoqDisplay do
      begin
        close;
        sql.Clear;
        sql.Add('select * from Temp where ID='+quotedstr(chr(16)));
        open;
        if recordcount>0 then
          DisplayFrm.Page:=page
        else DisplayFrm.Page:=1;
      end;
      frmDisplay.Display;
    end;
  page:=1;
end;

//清除临时表
procedure TfrmViewInfo.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
page:=DisplayFrm.Page;

end;

//选择ID列表是否可用
procedure TfrmViewInfo.cbIDCheckClick(Sender: TObject);
begin
  fraView1.cbbIDselect.Enabled:=fraView1.cbIDCheck.Checked;
  if fraView1.cbIDCheck.Checked=false then
    fraView1.cbbIDselect.ItemIndex:=-1
  else fraView1.cbbIDselect.ItemIndex:=0;
end;

//选择 时限列表选项是否可用
procedure TfrmViewInfo.fraView1cbTimeCheckClick(Sender: TObject);
begin
  fraView1.cbbTimeSelect.Enabled:=fraView1.cbTimeCheck.Checked;
  if fraView1.cbTimeCheck.Checked=false then
    fraView1.cbbTimeselect.ItemIndex:=-1
  else fraView1.cbbTimeselect.ItemIndex:=1;
end;

//字段列表选择,按字段排序
procedure TfrmViewInfo.cbbOrderChange(Sender: TObject);
begin
  pnlTable.SetFocus;
  if fraView1.pgcQuery.ActivePage=fraView1.tshIDquery then
    IDSearch(nil)   //按ID查询
  else
    //fraView1.sbConditionSearch.Click;  //按条件查询
    with frmMain.AdoqDisplay do //读取临时表显示
      begin
        frmDisplay.Clear;  //清除显示查询结果(外部调用)
        close;
        sql.Clear;
        SQL.Add('select * from temp where ID='+quotedstr(chr(16)));
        sql.Add(' order by '+SortString[cbbOrder.Itemindex]);
        if rbAscend.Checked=true then sql.Add(' asc ')
        else sql.Add(' desc ');
        open;
        frmDisplay.Display;  //显示查询结果(外部调用)
     end;
end;

//选择ID后焦点自动离开
procedure TfrmViewInfo.cbbIDSelectChange(Sender: TObject);
begin
  pnlTable.SetFocus;
end;

//选择时限后焦点自动离开
procedure TfrmViewInfo.cbbTimeSelectChange(Sender: TObject);
begin
  pnlTable.SetFocus;
end;

procedure TfrmViewInfo.fraView1leKeywordKeyPress(Sender: TObject;
  var Key: Char);
begin
if key=#13 then View(nil);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -