📄 viewinfofrm.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 + -