📄 u_frmskill.pas
字号:
unit u_frmSkill;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ToolWin, ImgList, Menus, ActnList, XPMenu, StdCtrls,
ExtCtrls, DB, ADODB;
type
PMyNode = ^TMyNode;
TMyNode = record
ID,ParentID: Integer;
Text: String;
Floder: Boolean;
end;
TfrmSkill = class(TForm)
CoolBar1: TCoolBar;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
imgNormal: TImageList;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
StatusBar1: TStatusBar;
imgHot: TImageList;
imgDisable: TImageList;
ToolBar2: TToolBar;
MainMenu1: TMainMenu;
F1: TMenuItem;
E1: TMenuItem;
H1: TMenuItem;
F2: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
ActionList1: TActionList;
NewFloder: TAction;
NewSkill: TAction;
DeleteItem: TAction;
SaveText: TAction;
RefreshTree: TAction;
SearchFor: TAction;
D1: TMenuItem;
N3: TMenuItem;
S1: TMenuItem;
N4: TMenuItem;
R1: TMenuItem;
E2: TMenuItem;
N5: TMenuItem;
X1: TMenuItem;
A1: TMenuItem;
tvwSkill: TTreeView;
imgTree: TImageList;
Splitter1: TSplitter;
RichEdit1: TRichEdit;
ADOConnection1: TADOConnection;
quyTemp: TADOQuery;
F3: TMenuItem;
procedure X1Click(Sender: TObject);
procedure NewFloderExecute(Sender: TObject);
procedure NewSkillExecute(Sender: TObject);
procedure DeleteItemExecute(Sender: TObject);
procedure SaveTextExecute(Sender: TObject);
procedure RefreshTreeExecute(Sender: TObject);
procedure SearchForExecute(Sender: TObject);
procedure tvwSkillExpanded(Sender: TObject; Node: TTreeNode);
procedure tvwSkillCollapsed(Sender: TObject; Node: TTreeNode);
procedure tvwSkillChange(Sender: TObject; Node: TTreeNode);
procedure FormCreate(Sender: TObject);
procedure tvwSkillEdited(Sender: TObject; Node: TTreeNode;
var S: String);
private
{ Private declarations }
CurNode: TTreeNode;
procedure LoadDatabase;
procedure LoadTree;
public
{ Public declarations }
end;
var
frmSkill: TfrmSkill;
implementation
{$R *.dfm}
procedure TfrmSkill.X1Click(Sender: TObject);
begin
Close;
end;
procedure TfrmSkill.NewFloderExecute(Sender: TObject);
var
P: PMyNode;
tmpNode: TTreeNode;
begin
//新建文件夹
if not PMyNode(CurNode.Data).Floder then
exit; //文章下不能再建文件夹
new(P);
P.ParentID:= PMyNode(CurNode.Data).ID;
P.Floder:= True;
//先新增一个记录,以获得ID
with quyTemp do
begin
Close;
SQL.Text:= 'Insert Into SkillBook (父编号, 文件夹) values ('
+ IntToStr(P.ParentID) + ',1)';
ExecSQL;
//找出刚新增的记录
Close;
SQL.Text:='select * from SkillBook order by 建立日期 desc';
Open;
P.ID:= FieldByName('编号').AsInteger;
end;
tmpNode:= tvwSkill.Items.AddChild(CurNode, '新项目');
tmpNode.ImageIndex:= 0;
tmpNode.Data:= P;
tmpNode.Expanded:= True;
tmpNode.Selected:= True;
tmpNode.EditText;
end;
procedure TfrmSkill.NewSkillExecute(Sender: TObject);
var
P: PMyNode;
tmpNode: TTreeNode;
begin
//新建文章
if not PMyNode(CurNode.Data).Floder then
exit; //文章下不能再建文章
new(P);
P.ParentID:= PMyNode(CurNode.Data).ID;
P.Floder:= False; //类别为文章
//先新增一个记录,以获得ID
with quyTemp do
begin
Close;
SQL.Text:= 'Insert Into SkillBook (父编号, 文件夹) values ('
+ IntToStr(P.ParentID) + ',0)';
ExecSQL;
//找出刚新增的记录
Close;
SQL.Text:='select * from SkillBook order by 建立日期 desc';
Open;
P.ID:= FieldByName('编号').AsInteger;
end;
tmpNode:= tvwSkill.Items.AddChild(CurNode, '新项目');
tmpNode.ImageIndex:= 2;
tmpNode.Data:= P;
tmpNode.Expanded:= True;
tmpNode.Selected:= True;
tmpNode.EditText;
end;
procedure TfrmSkill.DeleteItemExecute(Sender: TObject);
begin
if CurNode = nil then
begin
ShowMessage('请先选择要删除的文件夹!');
exit;
end;
if CurNode.Count > 0 then
begin
ShowMessage('不能删除非空文件夹!');
exit; //不能删除非空文件夹!
end;
if MessageBox(Handle, PChar('是否真的要删除这个项目?'),
PChar('删除确认'),MB_ICONQUESTION + MB_YESNO) = IDNO then
exit;
try
with quyTemp do
begin
Close;
SQL.Text:= 'Delete from SkillBook where 编号='
+ IntToStr(PMyNode(CurNode.Data).ID);
ExecSQL;
CurNode.Delete;
end;
except
on e:Exception do
ShowMessage(e.Message);
end;
end;
procedure TfrmSkill.SaveTextExecute(Sender: TObject);
begin
if CurNode.Data = nil then
exit;
with quyTemp do
begin
Close;
SQL.Text:= 'update SkillBook set 内容=''' + RichEdit1.Text
+ ''' where 编号 = ' + IntToStr(PMyNode(CurNode.Data).ID);
//showmessage(sql.text);
ExecSQL;
end;
end;
procedure TfrmSkill.RefreshTreeExecute(Sender: TObject);
begin
tvwSkill.Items.Clear;
LoadTree;
end;
procedure TfrmSkill.SearchForExecute(Sender: TObject);
begin
//
end;
procedure TfrmSkill.tvwSkillExpanded(Sender: TObject; Node: TTreeNode);
begin
if Node.ImageIndex= 2 then
exit;
Node.ImageIndex:= 1;
Node.SelectedIndex:= 1;
end;
procedure TfrmSkill.tvwSkillCollapsed(Sender: TObject; Node: TTreeNode);
begin
if Node.ImageIndex= 2 then
exit;
Node.ImageIndex:= 0;
Node.SelectedIndex:= 0;
end;
procedure TfrmSkill.tvwSkillChange(Sender: TObject; Node: TTreeNode);
begin
CurNode:= Node;
Node.SelectedIndex:= Node.ImageIndex;
if CurNode.Data = nil then
exit;
with quyTemp do
begin
Close;
SQL.Text:= 'select * from SkillBook where 编号 = '
+ IntToStr(PMyNode(CurNode.Data).ID);
Open;
if IsEmpty then
RichEdit1.Text:= ''
else
RichEdit1.Text:= FieldByName('内容').AsString;
end;
end;
procedure TfrmSkill.LoadTree;
var
i, j: integer;
ParentNode, tmpNode: TTreeNode;
P: PMyNode;
begin
with quyTemp do
begin
Close;
SQL.Text:= 'select * from SkillBook order by 父编号,编号';
Open;
for i:= 0 to RecordCount - 1 do
begin
new(P);
P.ID:= FieldByName('编号').AsInteger;
P.ParentID:= FieldByName('父编号').AsInteger;
P.Text:= FieldByName('标题').AsString;
P.Floder:= FieldByName('文件夹').AsBoolean;
ParentNode:= nil;
for j:= 0 to tvwSkill.Items.Count - 1 do
begin
if PMyNode(tvwSkill.Items[j].Data).ID = P.ParentID then
begin
ParentNode:= tvwSkill.Items[j];
end;
end;
tmpNode:= tvwSkill.Items.AddChild(ParentNode, P.Text);
tmpNode.Data:= P;
if P.Floder then
tmpNode.ImageIndex:= 1
else
tmpNode.ImageIndex:= 2;
Next;
end;
end;
end;
procedure TfrmSkill.LoadDatabase;
var
S: String;
begin
try
S:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+ GetCurrentDir + '\DelphiSkill.mdb;Persist Security Info=False';
with ADOConnection1 do
begin
Close;
ConnectionString:= S;
Open;
end;
except
on e:Exception do
begin
ShowMessage(e.Message);
Close;
end;
end;
end;
procedure TfrmSkill.FormCreate(Sender: TObject);
begin
LoadDatabase;
LoadTree;
end;
procedure TfrmSkill.tvwSkillEdited(Sender: TObject; Node: TTreeNode;
var S: String);
begin
if Node.Data <> nil then
begin
if S = '' then
S:= '新项目';
with quyTemp do
begin
Close;
SQL.Text:= 'update SkillBook set 标题=''' + S + ''' where 编号 = '
+ IntToStr(PMyNode(Node.Data).ID);
ExecSQL;
end;
PMyNode(Node.Data).Text:= S;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -