📄 frmmain.pas
字号:
unit frmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, ImgList, DB, ADODB, StdCtrls, Menus;
type
PMyData=^TMyData;
TMyData=Record
Id:Integer;
NodeType:Integer;
end;
TForm1 = class(TForm)
TreeView1: TTreeView;
Splitter1: TSplitter;
Panel1: TPanel;
Splitter2: TSplitter;
ListView1: TListView;
ImageList1: TImageList;
ADOConnection1: TADOConnection;
tblGroup: TADOQuery;
ADOQuery1: TADOQuery;
ScrollBox1: TScrollBox;
txtTel: TEdit;
txtQQ: TEdit;
txtName: TEdit;
txtMobile: TEdit;
Label5: TLabel;
Label4: TLabel;
Label3: TLabel;
Label2: TLabel;
Label1: TLabel;
dtpBirthday: TDateTimePicker;
BtnUpdate: TButton;
BtnPost: TButton;
BtnDelete: TButton;
BtnCancel: TButton;
BtnAdd: TButton;
PopupMenu1: TPopupMenu;
AddGroup: TMenuItem;
DeleteGroup: TMenuItem;
RenameGroup: TMenuItem;
N4: TMenuItem;
About: TMenuItem;
ADOQuery2: TADOQuery;
tblRecord: TADOQuery;
tblMap: TADOQuery;
procedure FormCreate(Sender: TObject);
procedure TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure TreeView1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
procedure AboutClick(Sender: TObject);
procedure RenameGroupClick(Sender: TObject);
procedure TreeView1Editing(Sender: TObject; Node: TTreeNode;
var AllowEdit: Boolean);
procedure TreeView1Edited(Sender: TObject; Node: TTreeNode;
var S: String);
procedure AddGroupClick(Sender: TObject);
procedure DeleteGroupClick(Sender: TObject);
procedure BtnAddClick(Sender: TObject);
procedure BtnPostClick(Sender: TObject);
procedure BtnCancelClick(Sender: TObject);
procedure BtnDeleteClick(Sender: TObject);
procedure BtnUpdateClick(Sender: TObject);
private
{ Private declarations }
i:Integer;//用于新建组
ActionCode:Integer;//记录上一步操作类型
LastSelNode:TTreeNode;//最后一次选择的节点
procedure LoadDataForTreeView;
procedure InitListView;
procedure LoadGroupDataForListView(Id:Integer);
procedure InitRightPanel;
Function CheckValid:Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses about;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=1;
ActionCode:=0;
LoadDataForTreeView;
InitListView;
InitRightPanel;
end;
procedure TForm1.InitRightPanel;
begin
dtpBirthday.DateTime:=now;
end;
procedure TForm1.InitListView;
var
NewCol:TListColumn;
begin
ListView1.ViewStyle:=vsReport;
with ListView1 do
begin
Color:=RGB($FF,$FF,$E0);
NewCol:=Columns.Add;
NewCol.Caption:='姓名';
NewCol:=Columns.Add;
NewCol.Caption:='生日';
NewCol:=Columns.Add;
NewCol.Caption:='电话';
NewCol:=Columns.Add;
NewCol.Caption:='手机';
NewCol:=Columns.Add;
NewCol.Caption:='OICQ号';
end;
end;
procedure TForm1.LoadDataForTreeView;
var
RootNode,GroupNode,RecordNode:TTreeNode;
PtrMyData:PMyData;
NodeName:String;
begin
TreeView1.Color:=RGB($FF,$FF,$E0);
{添加根节点}
RootNode:=TreeView1.Items.Add(Nil,'通讯录');
RootNode.ImageIndex:=0;
RootNode.SelectedIndex:=0;
{添加组节点}
with tblGroup do
begin
Open;
while not Eof do
begin
PtrMyData:=new(PMyData);
PtrMyData.id:=FieldByName('GROUP_ID').AsInteger;
PtrMyData.NodeType:=0;//是组节点
NodeName:=FieldByName('GROUP_NAME').AsString;
GroupNode:=TreeView1.Items.AddChildObject(RootNode,NodeName,PtrMyData);
GroupNode.ImageIndex:=1;
GroupNode.SelectedIndex:=1;
RecordNode:=TreeView1.items.AddChild(GroupNode,'none');
next;
end;
Close;
end;
{初始化TTreeView控件的展开状态}
RootNode.Expanded:=True;
end;
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode;
var AllowExpansion: Boolean);
var
GroupId:Integer;
RecordNode:TTreeNode;
PtrMyData:PMyData;
RecordName:String;
begin
{如果要展开的是组节点,则初始化本小组所对应的记录节点}
if (Node.Parent<>Nil)and(Node.Parent.Text='通讯录') then
begin
{先删除每个组内的多余节点}
Node.getFirstChild.Delete;
{实际添加本小组所对应的记录节点}
GroupId:=(PMyData(Node.Data))^.id;
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT MAP_RECORD_ID,RECORD_NAME');
SQL.Add('FROM TXL_MAP,TXL_RECORD');
SQL.Add('WHERE MAP_GROUP_ID='+IntToStr(GroupId));
SQL.Add('AND MAP_RECORD_ID=RECORD_ID');
Open;
While not Eof do
begin
RecordName:=FieldByName('RECORD_NAME').AsString;
PtrMyData:=new(PMyData);
PtrMyData.Id:=FieldByName('MAP_RECORD_ID').AsInteger;
PtrMyData.NodeType:=1;//是记录节点
RecordNode:=TreeView1.Items.AddChildObject(Node,RecordName,PtrMyData);
RecordNode.ImageIndex:=2;
RecordNode.SelectedIndex:=2;
next;
end;
Close;
end;
end;
end;
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
RecordId:Integer;
GroupId:Integer;
begin
if(Node.Level=2)then//是记录节点
begin
{取得存储在记录节点中的Id号}
RecordId:=(PMyData(Node.Data))^.Id;
{根据Id号获得对应记录的其他信息填入右上部面板中}
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('SELECT * FROM TXL_RECORD');
SQL.Add('WHERE RECORD_ID='+IntToStr(RecordId));
Open;
txtName.Text:=FieldByName('RECORD_NAME').AsString;
dtpBirthday.DateTime:=FieldByName('RECORD_BIRTHDAY').AsDateTime;
txtQQ.Text:=FieldByName('RECORD_OICQ').AsString;
txtTel.Text:=FieldByName('RECORD_TEL').AsString;
txtMobile.Text:=FieldByName('RECORD_MOBILE').AsString;
Close;
end;
{改变控件的使能状态}
txtName.Enabled:=True;
dtpBirthday.Enabled:=True;
txtQQ.Enabled:=True;
txtTel.Enabled:=True;
txtMobile.Enabled:=True;
BtnAdd.Enabled:=True;
BtnDelete.Enabled:=True;
BtnUpdate.Enabled:=True;
BtnPost.Enabled:=True;
BtnCancel.Enabled:=True;
end
else//不是记录节点
begin
{清空右上面板内显示的内容}
txtName.Text:='';
dtpBirthday.DateTime:=now;
txtQQ.Text:='';
txtTel.Text:='';
txtMobile.Text:='13*********';
{改变控件使能状态}
txtName.Enabled:=False;
dtpBirthday.Enabled:=False;
txtQQ.Enabled:=False;
txtTel.Enabled:=False;
txtMobile.Enabled:=False;
BtnAdd.Enabled:=False;
BtnDelete.Enabled:=False;
BtnUpdate.Enabled:=False;
BtnPost.Enabled:=False;
BtnCancel.Enabled:=False;
end;
if(Node.Level=1)then
GroupId:=PMyData(Node.Data)^.Id
else if(Node.Level=2)then
GroupId:=PMyData(Node.Parent.Data)^.Id;
if(Node.Level<>0)then
LoadGroupDataForListView(GroupId);
end;
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
CurrNode:TTreeNode;
begin
if(Button=mbRight)then
begin
CurrNode:=TreeView1.GetNodeAt(x,y);
if (CurrNode<>Nil) then
CurrNode.Selected:=True;
end;
end;
procedure TForm1.TreeView1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
var
CurrNode:TTreeNode;
begin
CurrNode:=TreeView1.GetNodeAt(MousePos.X,MousePos.Y);
if CurrNode<>Nil then
begin
if(CurrNode.Level=0)then
begin
AddGroup.Enabled:=True;
DeleteGroup.Enabled:=False;
RenameGroup.Enabled:=False;
About.Enabled:=True;
end
else if(CurrNode.Level=1)then
begin
AddGroup.Enabled:=True;
DeleteGroup.Enabled:=True;
RenameGroup.Enabled:=True;
About.Enabled:=True;
end
else
begin
AddGroup.Enabled:=False;
DeleteGroup.Enabled:=False;
RenameGroup.Enabled:=False;
About.Enabled:=True;
end;
end
else
Handled:=True;
end;
procedure TForm1.AboutClick(Sender: TObject);
begin
frmAbout.ShowModal;
end;
procedure TForm1.RenameGroupClick(Sender: TObject);
begin
TreeView1.Selected.EditText;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -