📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, ComCtrls, StdCtrls, Db;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Button2: TButton;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
treeview1: TTreeView;
procedure Button1Click(Sender: TObject);
procedure Edit1Enter(Sender: TObject);
procedure TreeView1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormShow(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure DBGrid1ColEnter(Sender: TObject);
procedure DBGrid1ColExit(Sender: TObject);
procedure DBGrid1CellClick(Column: TColumn);
procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure SaveBoolean;
procedure treeviewproc();
procedure DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
OriginalOptions : TDBGridOptions;
public
i_key13:boolean;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses datamodule;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
grouprsbm,rsbmstr:string;
begin
treeview1.items.clear;
grouprsbm:='select a_bm from rsbm group by a_bm';
with datamodule1.rsbms do
begin
close;
sql.clear;
sql.add(grouprsbm);
prepare;
open;
end;
datamodule1.rsbms.Last;
while not datamodule1.rsbms.bof do
begin
rsbmstr:='select *from rsbm where a_bm='+''''+datamodule1.rsbms.fieldbyname('a_bm').asstring+'''';
with datamodule1.rsbmss do
begin
close;
sql.clear;
sql.add(rsbmstr);
prepare;
open;
end;//with
// treeview1.Items.Clear;
if datamodule1.rsbms.eof then
begin
if (datamodule1.rsbms.eof) and (datamodule1.rsbmss.RecordCount<=1) then
begin
treeview1.Items.Add(treeview1.TopItem ,datamodule1.rsbmss.fieldbyname('a_bm').asstring+'('+datamodule1.rsbmss.fieldbyname('a_number').asstring+')');
treeview1.TopItem.selected:=true;
end//if
else
begin
treeview1.Items.Add(treeview1.TopItem ,datamodule1.rsbms.fieldbyname('a_bm').asstring);
datamodule1.rsbmss.last;
while not datamodule1.rsbmss.bof do
begin
if datamodule1.rsbmss.FieldByName('a_bz').asstring<>'' then
treeview1.Items.addchild(treeview1.topitem,datamodule1.rsbmss.fieldbyname('a_bz').asstring+'('+datamodule1.rsbmss.fieldbyname('a_number').asstring+')');
datamodule1.rsbmss.prior;
end;//while
treeview1.TopItem.selected:=true;
end;//else 第一条头节点
end//datamodule1.rsbms.bof
else
begin
if datamodule1.rsbmss.RecordCount<=1 then
begin
treeview1.Items.Add(treeview1.selected,datamodule1.rsbmss.fieldbyname('a_bm').asstring+'('+datamodule1.rsbmss.fieldbyname('a_number').asstring+')');
treeview1.Selected.getNextSibling.Selected :=true;
end
else
begin
treeview1.items.add(treeview1.Selected.getNextSibling,datamodule1.rsbms.fieldbyname('a_bm').asstring);
treeview1.Selected.getNextSibling.Selected :=true;
datamodule1.rsbmss.last;
while not datamodule1.rsbmss.bof do
begin
if datamodule1.rsbmss.FieldByName('a_bz').asstring<>'' then
treeview1.items.addchild(treeview1.selected,datamodule1.rsbmss.fieldbyname('a_bz').asstring+'('+datamodule1.rsbmss.fieldbyname('a_number').asstring+')');
datamodule1.rsbmss.prior;
end;//while not
end;
end;//else不是第一条节点
datamodule1.rsbms.prior;
end;//while not rsbms
treeview1.visible:=true;
end;
procedure tform1.treeviewproc();
var
grouprsbm,rsbmstr:string;
begin
self.treeview1.items.clear;
grouprsbm:='select a_bm from rsbm group by a_bm';
with datamodule1.rsbms do
begin
close;
sql.clear;
sql.add(grouprsbm);
prepare;
open;
end;
datamodule1.rsbms.Last;
while not datamodule1.rsbms.bof do
begin
rsbmstr:='select *from rsbm where a_bm='+''''+datamodule1.rsbms.fieldbyname('a_bm').asstring+'''';
with datamodule1.rsbmss do
begin
close;
sql.clear;
sql.add(rsbmstr);
prepare;
open;
end;//with
// treeview1.Items.Clear;
if datamodule1.rsbms.eof then
begin
if (datamodule1.rsbms.eof) and (datamodule1.rsbmss.RecordCount<=1) then
begin
self.treeview1.Items.Add(self.treeview1.TopItem ,datamodule1.rsbmss.fieldbyname('a_bm').asstring+'('+datamodule1.rsbmss.fieldbyname('a_number').asstring+')');
self.treeview1.TopItem.selected:=true;
end//if
else
begin
self.treeview1.Items.Add(self.treeview1.TopItem ,datamodule1.rsbms.fieldbyname('a_bm').asstring);
datamodule1.rsbmss.last;
while not datamodule1.rsbmss.bof do
begin
if datamodule1.rsbmss.FieldByName('a_bz').asstring<>'' then
self.treeview1.Items.addchild(self.treeview1.topitem,datamodule1.rsbmss.fieldbyname('a_bz').asstring+'('+datamodule1.rsbmss.fieldbyname('a_number').asstring+')');
datamodule1.rsbmss.prior;
end;//while
self.treeview1.TopItem.selected:=true;
end;//else 第一条头节点
end//datamodule1.rsbms.bof
else
begin
if datamodule1.rsbmss.RecordCount<=1 then
begin
self.treeview1.Items.Add(treeview1.selected,datamodule1.rsbmss.fieldbyname('a_bm').asstring+'('+datamodule1.rsbmss.fieldbyname('a_number').asstring+')');
self.treeview1.Selected.getNextSibling.Selected :=true;
end
else
begin
self.treeview1.items.add(self.treeview1.Selected.getNextSibling,datamodule1.rsbms.fieldbyname('a_bm').asstring);
self.treeview1.Selected.getNextSibling.Selected :=true;
datamodule1.rsbmss.last;
while not datamodule1.rsbmss.bof do
begin
if datamodule1.rsbmss.FieldByName('a_bz').asstring<>'' then
self.treeview1.items.addchild(self.treeview1.selected,datamodule1.rsbmss.fieldbyname('a_bz').asstring+'('+datamodule1.rsbmss.fieldbyname('a_number').asstring+')');
datamodule1.rsbmss.prior;
end;//while not
end;
end;//else不是第一条节点
datamodule1.rsbms.prior;
end;//while not rsbms
self.treeview1.visible:=true;
end;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
treeview1.SetFocus;
end;
procedure TForm1.TreeView1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key in [37..40] then
begin
if treeview1.Selected.haschildren=true then
begin
if treeview1.Selected.level<>0 then
begin
if pos('(',treeview1.Selected.parent.Text)=0 then
edit1.text:=treeview1.selected.parent.text
else
edit1.text:=copy(treeview1.selected.parent.text,1,pos('(',treeview1.selected.parent.text)-1);
if pos('(',treeview1.selected.text)=0 then
edit2.text:=treeview1.Selected.Text
else
edit2.text:=copy(treeview1.selected.text,1,pos('(',treeview1.selected.text)-1);
end;
end;//if treeview1
{else
begin
if pos('(',treeview1.Selected.parent.Text)=0 then
edit1.text:=treeview1.selected.parent.text
else
edit1.text:=copy(treeview1.selected.parent.text,1,pos('(',treeview1.selected.parent.text)-1);
edit2.text:='';
end;//else }
if treeview1.selected.level<>0 then
begin
if pos('(',treeview1.Selected.parent.Text)=0 then
edit1.text:=treeview1.selected.parent.text
else
edit1.text:=copy(treeview1.selected.parent.text,1,pos('(',treeview1.selected.parent.text)-1);
if pos('(',treeview1.selected.text)=0 then
edit2.text:=treeview1.Selected.Text
else
edit2.text:=copy(treeview1.selected.text,1,pos('(',treeview1.selected.text)-1);
end;
end;//if inttostr
if key=13 then
begin
if (treeview1.Selected.HasChildren=true) and (treeview1.Selected.Level=0) then
begin
showmessage('请先选择好班组,谢谢!');
i_key13:=true;
treeview1.Selected.getFirstChild.Selected:=true;
end//if (
else
begin
if i_key13=false then
treeview1.visible:=false;
//
if treeview1.Selected.haschildren=true then
begin
if treeview1.Selected.level<>0 then
begin
if pos('(',treeview1.Selected.parent.Text)=0 then
edit1.text:=treeview1.selected.parent.text
else
edit1.text:=copy(treeview1.selected.parent.text,1,pos('(',treeview1.selected.parent.text)-1);
if pos('(',treeview1.selected.text)=0 then
edit2.text:=treeview1.Selected.Text
else
edit2.text:=copy(treeview1.selected.text,1,pos('(',treeview1.selected.text)-1);
end;
end//if treeview1
else
begin
if pos('(',treeview1.Selected.Text)=0 then
edit1.text:=treeview1.selected.text
else
edit1.text:=copy(treeview1.selected.text,1,pos('(',treeview1.selected.text)-1);
edit2.text:='';
end;//else
if treeview1.selected.level<>0 then
begin
if pos('(',treeview1.Selected.parent.Text)=0 then
edit1.text:=treeview1.selected.parent.text
else
edit1.text:=copy(treeview1.selected.parent.text,1,pos('(',treeview1.selected.parent.text)-1);
if pos('(',treeview1.selected.text)=0 then
edit2.text:=treeview1.Selected.Text
else
edit2.text:=copy(treeview1.selected.text,1,pos('(',treeview1.selected.text)-1);
end;
//
i_key13:=false;
end;
end;//if key 13
end; //begin
procedure TForm1.FormShow(Sender: TObject);
begin
i_key13:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
aa:string;
begin
aa:=copy(label1.caption,1,pos('(',label1.caption)-1);
if pos('(',label1.caption)=0 then
aa:=label1.caption;
showmessage(aa);
end;
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
// 这个整数值将按照布尔值返回,并送入数组
CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK,
DFCS_BUTTONCHECK or DFCS_CHECKED);
begin
//确保只有在逻辑字段才能插入组件
if Column.Field.DataType = ftBoolean then
begin
DBGrid1.Canvas.FillRect(Rect);
DrawFrameControl(DBGrid1.Canvas.Handle,
Rect,
DFC_BUTTON,
CtrlState[Column.Field.AsBoolean]);
end;
end;
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
// 确保该栏是逻辑字段
if DBGrid1.SelectedField.DataType = ftBoolean then
begin
OriginalOptions := DBGrid1.Options;
DBGrid1.Options := DBGrid1.Options - [dgEditing];
end;
end;
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
if DBGrid1.SelectedField.DataType = ftBoolean then
DBGrid1.Options := OriginalOptions;
end;
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
//确保该栏是逻辑字段
if DBGrid1.SelectedField.DataType = ftBoolean then
SaveBoolean();
end;
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
//确保该栏是逻辑字段和空格键在键盘中被敲击
if ( Key = VK_SPACE ) and
( DBGrid1.SelectedField.DataType = ftBoolean ) then
SaveBoolean();
end;
procedure TForm1.SaveBoolean();
begin
DBGrid1.SelectedField.Dataset.Edit;
DBGrid1.SelectedField.AsBoolean :=
not DBGrid1.SelectedField.AsBoolean;
DBGrid1.SelectedField.Dataset.Post;
end;
procedure TForm1.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
lastcolor: TColor;
begin
with (Sender as TDBGrid) do
begin
lastcolor := clred;
case DataSource.DataSet.RecNo mod 2 of
1: lastcolor := $00F5FEFD;
0: lastcolor := clwhite;
end;
if gdSelected in State then
lastcolor := clred; //选中行背景为绿色
Canvas.Brush.Color := lastcolor;
DefaultDrawDataCell(Rect, Column.Field, State);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -