📄 bookclass.pas
字号:
unit BookClass;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ToolWin,ExtCtrls,buttons, ADODB, ImgList;
type
TbookclassForm = class(TForm)
Panel1: TPanel;
GroupBox1: TGroupBox;
TreeView1: TTreeView;
ImageList1: TImageList;
StaticText5: TStaticText;
Edit2: TEdit;
StaticText1: TStaticText;
Memo1: TMemo;
StaticText2: TStaticText;
Edit1: TEdit;
StaticText3: TStaticText;
StaticText4: TStaticText;
StaticText6: TStaticText;
StaticText7: TStaticText;
StaticText8: TStaticText;
StaticText9: TStaticText;
ComboBoxEx1: TComboBoxEx;
ImageList2: TImageList;
procedure FormCreate(Sender: TObject);
procedure StaticText1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure StaticText3MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StaticText3MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StaticText3Click(Sender: TObject);
procedure StaticText8Click(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure TreeView1Click(Sender: TObject);
procedure StaticText6Click(Sender: TObject);
procedure StaticText7Click(Sender: TObject);
procedure CreateParams(var Params: TCreateParams); override;
procedure setEdit(const flag:boolean);
procedure clearedit;
procedure treefind(const parentname:string;var node:TTreenode;parentquery:TADOQuery);
procedure StaticText4Click(Sender: TObject);
private
procedure WMPAINT1(var msg:TMESSAGE);message WM_PAINT;
procedure WMNCPAINT1(var msg:TWMNCPAINT);message WM_NCPAINT;
procedure Active(var msg:Tmessage);message WM_ACTIVATE;
procedure WMNCLBUTTONDBLCLK1(var msg:Tmessage);message WM_NCLBUTTONDBLCLK;
{ Private declarations }
public
oldclassname:Tcaption;
titleBmp:Tbitmap;
{ Public declarations }
end;
var
//BookInfoform: TbookclassForm;
parentnode,classnode:TTreeNode;
implementation
uses MainForm,DataModule;
{$R *.dfm}
function MyShowmessage(text:Pchar):boolean; external 'resource.dll';
procedure TbookclassForm.WMNCLBUTTONDBLCLK1(var msg:Tmessage);
begin
//
end;
procedure TbookclassForm.Active(var msg:Tmessage);
begin
self.WMPAINT1(msg);
end;
procedure TbookclassForm.CreateParams(var Params: TCreateParams);
begin
inherited;
params.Style:=params.Style-WS_SYSMENU;
end;
procedure TbookclassForm.WMPAINT1(var msg:TMESSAGE);
begin
sendmessage(self.Handle,WM_NCPAINT,0,0);
inherited;
end;
procedure TbookclassForm.WMNCPAINT1(var msg:TWMNCPAINT);
var
dc1:HDC;
y,frame:integer;
oldbrush:HBrush;
oldpen,pen:HPEN;
canvas:Tcanvas;
begin
canvas:=Tcanvas.Create;
dc1:=getwindowdc(Handle);
y:=GetSystemMetrics(SM_CYSIZE);
frame:=GetSystemMetrics(SM_CYSIZEFRAME);
oldbrush:=selectobject(dc1,getstockobject(null_brush));
pen:=createpen(PS_SOLID,1,rgb(155,155,155));
oldpen:=selectobject(dc1,pen);
RoundRect(dc1,0,0,Width,Height,12,12);
pen:=createpen(PS_SOLID,frame*2-5,rgb(255,255,255));
selectobject(dc1,pen);
RoundRect(dc1,2,2,Width-2,Height-2,8,10);
StretchBlt(dc1,frame,frame,Width-2*frame,y+frame div 2,titlebmp.Canvas.Handle,0,0,titlebmp.Width,titlebmp.Height,srccopy);
canvas.Handle:=dc1;
canvas.Brush.Style:=bsclear;
canvas.TextOut(frame*3,(y-frame)div 2,self.Caption);
selectobject(dc1,oldbrush);
selectobject(dc1,oldpen);
deleteObject(pen);
canvas.Handle:=0;
canvas.Free;
releasedc(Handle,dc1);
end;
procedure TbookclassForm.FormCreate(Sender: TObject);
begin
titlebmp:=Tbitmap.Create;
titlebmp.LoadFromResourceName(main.resource,'TItle');
end;
procedure TbookclassForm.StaticText1Click(Sender: TObject);
begin
self.Close;
end;
procedure TbookclassForm.FormShow(Sender: TObject);
var
QueryClass:TADOQuery;
begin
treeview1.Items.Clear;
QueryClass:=TADOQuery.Create(nil);
try
QueryClass.Connection:=Data.ADOConnection1;
with data.PublicQuery do
begin //with
close;
sql.Clear;
sql.Add('select * from bookkind where isbase=1');
open;
while not Eof do
begin //while not eof
parentnode:=treeview1.Items.Add(classnode,FieldByName('KindName').AsString);
parentnode.ImageIndex:=fieldbyname('image').Asinteger;
parentnode.SelectedIndex:=parentnode.ImageIndex;
treefind(FieldByName('KindName').AsString,parentnode,QueryClass); //遍历 树
next;
end; // while not of
end; //with
finally
QueryClass.Free;
end;
end;
procedure TbookclassForm.treefind(const parentname:string;var node:TTreenode;parentquery:TADOQuery);
var //递归便利
fnode:TTreenode;
cadoquery:Tadoquery;
begin
cadoquery:=Tadoquery.Create(nil);
try
cadoquery.Connection:=data.ADOConnection1;
with parentquery do
begin //with
Close;
SQL.Clear;
SQL.Add('select * from bookkind where parentname=:parentname');
Parameters.ParamByName('parentname').Value:=parentname;
Open;
if recordcount > 0 then
while not eof do
begin
fnode:=treeview1.Items.AddChildFirst(node,fieldbyname('kindname').AsString);//增加叶子
fnode.ImageIndex:=fieldbyname('image').Asinteger;
fnode.SelectedIndex:=fnode.ImageIndex;
treefind(fieldbyname('kindname').AsString,fnode,cadoquery);
next;
end;
end; //with
finally
cadoquery.Free;
end;
end;
procedure TbookclassForm.StaticText3MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
(sender as Tstatictext).BorderStyle:=sbsSunken;
end;
procedure TbookclassForm.StaticText3MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
(sender as Tstatictext).BorderStyle:=sbsNone;
end;
procedure TbookclassForm.StaticText3Click(Sender: TObject);
begin
if Trim(statictext3.Caption)='添加' then
begin
setedit(true);
clearedit;
edit2.SetFocus;
statictext3.Caption:=' 保存 ';
end
else
begin //else begin
with data.PublicQuery do
begin //with b
if (trim(edit1.Text) ='') or (edit1.Text='无') then
begin //add root b
close;
sql.Clear;
sql.Add('select * from bookkind where kindname=:kindname');
parameters.ParamByName('kindname').Value:=edit2.Text;
open;
if recordcount > 0 then
begin
myshowmessage(#13+'该类型已经存在!');
exit;
end;
close;
sql.Clear;
sql.Add('insert into bookkind values(1,NULL,:kindname,:image,:memo)');
parameters.ParamByName('kindname').Value:=edit2.Text;
parameters.ParamByName('image').Value:=comboboxex1.ItemIndex;
parameters.ParamByName('memo').Value:=memo1.Text;
execsql;
self.FormShow(self);
end //add root e
else
begin //else 2 b
close;
sql.Clear;
sql.Add('select * from bookkind where kindname=:kname');
parameters.ParamByName('kname').Value:=edit2.Text;
open;
if recordcount > 0 then
begin
myshowmessage(#13+'该类已经存在');
statictext3.Caption:=' 添加 ';
setedit(false);
clearedit;
edit1.Clear;
exit;
end;
close;
sql.Clear;
sql.Add('select * from bookkind where kindname=:kname');
parameters.ParamByName('kname').Value:=edit1.Text;
open;
if recordcount >0 then
begin //find parent node
close;
sql.Clear;
sql.Add('insert into bookkind values(0,:parent,:kindname,:image,:memo)');
parameters.ParamByName('parent').Value:=edit1.Text;
parameters.ParamByName('kindname').Value:=edit2.Text;
parameters.ParamByName('image').Value:=comboboxex1.ItemIndex;
parameters.ParamByName('memo').Value:=memo1.Text;
execsql;
self.FormShow(self);
end //find parent node
else
begin //don't fond the parent
myshowmessage('该上级不存在!!请查阅后重新输入');
end; //don't fond the parent
end; //else 2 e
end; //with e
setedit(false);
clearedit;
edit1.Clear;
Statictext3.Caption:=' 添加 ';
end; //else end
end;
procedure TbookclassForm.setEdit(const flag:boolean);
begin
edit1.Enabled:=flag;
edit2.Enabled:=flag;
memo1.Enabled:=flag;
comboboxex1.Enabled:=flag;
end;
procedure TbookclassForm.clearedit;
begin
edit2.Clear;
memo1.Clear;
end;
procedure TbookclassForm.StaticText8Click(Sender: TObject);
begin
data.PublicQuery.Close;
close;
end;
procedure TbookclassForm.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
edit1.SetFocus;
end;
procedure TbookclassForm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
memo1.SetFocus;
end;
procedure TbookclassForm.TreeView1Click(Sender: TObject);
begin
if assigned(treeview1.Selected) then
begin
edit2.Text:=treeview1.Selected.Text;
comboboxex1.ItemIndex:=treeview1.Selected.ImageIndex;
with data.PublicQuery do
begin
close;
sql.Clear;
sql.Add('select * from bookKind where Kindname=:name');
parameters.ParamByName('name').Value:=edit2.Text;
open;
memo1.Text:=fieldbyname('memo').AsString;
end;
if Assigned(treeview1.Selected.Parent) then
edit1.Text:=treeview1.Selected.Parent.Text
else
edit1.Text:='';
end;
end;
procedure TbookclassForm.StaticText6Click(Sender: TObject);
begin
if Trim(statictext6.Caption)='修改' then
begin
setedit(true);
edit2.SetFocus;
oldclassname:=edit2.Text;
statictext6.Caption:=' 保存 ';
end
else
begin //else begin
if trim(edit2.Text) = '' then
begin
myshowmessage('请选择将要修改的书类!谢谢!!');
exit;
end
else
begin// change code
with data.PublicQuery do
begin //with b
if strcomp(pchar(trim(edit1.Text)),pchar(trim(oldclassname)))=0 then
begin
myshowmessage('不能修改自身为自身的子类!!');
exit;
end;
if (trim(edit1.Text) ='') or (edit1.Text='无') then
begin //add root b
close;
sql.Clear;
sql.Add('update bookkind set IsBase=1,ParentName=null,KindName=(:kindname),image=(:image),memo=(:memo) where kindname=(:oldkindname)');
parameters.ParamByName('oldkindname').Value:=oldclassname;
parameters.ParamByName('kindname').Value:=edit2.Text;
parameters.ParamByName('image').Value:=comboboxex1.ItemIndex;
parameters.ParamByName('memo').Value:=memo1.Text;
execsql;
end //add root e
else
begin //not root
if not (strcomp(pchar(trim(oldclassname)),pchar(trim(edit2.Text)))=0) then
begin // name changed
close;
sql.Clear;
sql.Add('select * from bookkind where kindname=:kname');
parameters.ParamByName('kname').Value:=edit2.Text;
open;
if recordcount > 0 then
begin
myshowmessage('所修改的类名称已经存在!');
statictext6.Caption:=' 修改 ';
setedit(false);
edit1.Clear;
exit;
end;
end; //name changed
close;
sql.Clear;
sql.Add('select * from bookkind where kindname=:kname');
parameters.ParamByName('kname').Value:=edit1.Text;
open;
if recordcount <1 then
begin //not fond parent node
myshowmessage('所修改的上级不存在!!请查阅后重新输入');
exit;
end //not fond parent node
else
begin //fond the parent
close;
sql.Clear;
sql.Add('update bookkind set IsBase=0,ParentName=(:parentname),KindName=(:kindname),image=(:image),Memo=(:memo)');
sql.Add(' where kindname=(:oldkindname)');
parameters.ParamByName('oldkindname').Value:=oldclassname;
parameters.ParamByName('kindname').Value:=edit2.Text;
parameters.ParamByName('parentname').Value:=edit1.Text;
parameters.ParamByName('image').Value:=comboboxex1.ItemIndex;
parameters.ParamByName('memo').Value:=memo1.Text;
execsql;
// self.FormShow(self);
end; //fond the parent
end;// not root
close;
sql.clear;
sql.add('update bookkind set parentName=:Parentname where ParentName=:oldname');
parameters.ParamByName('oldname').Value:=oldclassname;
parameters.ParamByName('Parentname').Value:=edit2.Text;
execsql;
self.FormShow(self);
end;//with e
end; //change code
setedit(false);
Statictext6.Caption:=' 修改 ';
end; //else end
end;
procedure TbookclassForm.StaticText7Click(Sender: TObject);
begin
setEdit(false);
clearedit;
edit1.clear;
Statictext6.Caption:=' 修改 ';
statictext3.Caption:=' 添加 ';
end;
procedure TbookclassForm.StaticText4Click(Sender: TObject);
var
node1:tTreenode;
begin
if trim(edit2.text) = '' then
begin
myshowmessage(#13+'请选择将要删除的书类!');
exit;
end
else
begin
node1:=treeview1.selected;
if node1.HasChildren then
begin
myshowmessage('对不起! 不能删除含有子类的种类!');
exit;
end;
with data.publicquery do
begin //with
close;
sql.clear;
sql.add('delete from bookkind where kindname=:kindname');
parameters.parambyname('kindname').value:=edit2.text;
execsql;
Myshowmessage(#13+'删除成功');
node1.free;
end; //with
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -