private
fj_type,xf,Fj_name,server_man:string;
pos:integer;
listview:TRZListview;
NewTab:TRZTabSheet;
Item:TlistItem;
function reture_info(value:string):string;
function addlistview:boolean;
procedure setnull;
procedure ListViewMouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ListViewSelectItem(Sender: TObject; Item: TListItem;Selected: Boolean);
Procedure Getinfo;//获取房间的信息
Function Filter_state(value:string):boolean;//过滤listview显示的餐台
public
bh,server_id:string;
end;var
frmKTGL: TfrmKTGL;implementationuses Unit1, MC_TLCYGLXT, Un_Guest_Kaibill, Un_add_Xiaofei, Un_JieZhang;{$R *.dfm}{ TfrmKTGL }procedure TfrmKTGL.FormCreate(Sender: TObject);
begin
addlistview;
end;function TfrmKTGL.addlistview: boolean;
var s:string;
begin
with adoquery do
begin
close;
sql.Clear ;
sql.Text:='select FJ_Name from FJ_Type' ;//房间类型
open;
while not Eof do
begin
NewTab:=TRZTabSheet.Create(self);
NewTab.PageControl:=RzPageControl1;
newtab.TabVisible:=true;
NewTab.Caption:=trim(fieldByName('FJ_Name').AsString);
Next ;
RzPageControl1.ActivePage:=NewTab; listview:=TRZlistview.Create(self);
listview.Refresh;
listview.OnClick:=ListViewClick ;
// listview.OnSelectItem:=ListViewSelectItem;
listview.OnMouseDown:=ListViewMouseDown; listview.Refresh;
listview.Visible:=true;
listview.Align:=alclient;
listview.LargeImages:=ImageList1;
NewTab.InsertControl(listview);
Listview.Items.Clear;
with TLCYGLXT.ADOFJTHGL do
begin
Filtered:=false;
Filter:=Format('FJ_Name=%S',[QuotedStr(''+NewTab.Caption+'')]);//根据房间类型显示具体的房间名
Filtered:=true;
Open ;
First ;
while not TLCYGLXT.ADOFJTHGL.Eof do
begin
Item:= ListView.Items.Add;
Item.Caption:=trim(FieldByName('room_name').AsString);
if trim(FieldByName('room_sate').AsString)='可供' then Item.ImageIndex:= 1;
if trim(FieldByName('room_sate').AsString)='占用' then Item.ImageIndex:= 0;
Next;
end;
Filtered:=false;
end;
end;
end;
RzPageControl1.ActivePageIndex:=0;
lb_type.Caption:=RzPageControl1.ActivePage.Caption;//显示房台类型
lb_count.Caption:=inttostr(TLCYGLXT.ADOFJTHGL.RecordCount);
lb_count1.Caption:=reture_info('占用');
lb_count2.Caption:=reture_info('可供');
lb_count3.Caption:=reture_info('预定');
lb_count4.Caption:=reture_info('停用');
s:=formatfloat('#%',(SimpleRoundTo(strtoint(lb_count1.caption)/strtoint(lb_count.caption))/10)*100);
if s='%' then
lb_count5.caption:='0%'
else
lb_count5.caption:=s;
result:=true;
end;procedure TfrmKTGL.RzPageControl1TabClick(Sender: TObject);
begin
lb_type.Caption:=RzPageControl1.ActivePage.Caption;//房间类型
RzPageControl1.SetFocus ;
setnull;
end;procedure TfrmKTGL.ListViewClick(Sender: TObject);
begin
if TRZListView(Sender).Selected <> nil then
begin
lb_name.Caption := TRZListView(Sender).Selected.Caption ;//房间名字
Getinfo;
end;
end;procedure TfrmKTGL.FormActivate(Sender: TObject);
begin
RzEdit1.SetFocus ;
end;
procedure TfrmKTGL.setnull;
begin
lb_name.Caption:='';
lb_xf.Caption:='';
lb_bj.Caption:='';
lb_intime.Caption:='';
lb_outtime.Caption:='';
lb_je.Caption:='';
end;procedure TfrmKTGL.ListViewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var p:TPoint;
begin
if TRZListView(Sender).Selected <> nil then
begin
p.X:=Mouse.CursorPos.X ;
p.Y:=mouse.CursorPos.Y ;
if Button= mbRight then PopupMenu1.Popup(p.X,p.y);
Getinfo;
end;end;
function TfrmKTGL.reture_info(value: string): string;//返回房间的可供、占用等的总数
var ss:string;
begin
with TLCYGLXT.ADOFJTHGL do
begin
Filtered:=false;
Filter:=Format('room_sate=%S ',[QuotedStr(''+value+'')]);
Filtered:=true;
Open ;
if RecordCount=0 then
ss:='0'
else
ss:=inttostr(TLCYGLXT.ADOFJTHGL.RecordCount);
Filtered:=false;
end;
result:=ss;
end;
procedure TfrmKTGL.Getinfo;
var Sender: TObject;
begin
with TLCYGLXT.ADOFJTHGL do
begin
close;
sql.Clear ;
sql.Text:='select a.*,b.FJ_Name,b.In_mount,b.ZDXF,c.emp_name from Room_info a,FJ_Type b,employee c where a.fj_id=b.fj_id and a.emp_id=c.emp_id and a.room_name='''+TRZListView(Sender).Selected.Caption+'''';
open;
bh:=trim(FieldByName('room_id').AsString) ;
fj_type:=trim(FieldByName('FJ_Name').AsString) ;
xf:=trim(FieldByName('ZDXF').AsString) ;
Fj_name:=trim(FieldByName('room_name').AsString) ;
server_man:=trim(FieldByName('emp_name').AsString) ;
server_id:=trim(FieldByName('emp_id').AsString) ;
lb_XF.Caption:=trim(FieldByName('ZDXF').AsString);
end;
end;
procedure TfrmKTGL.ListViewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);//显示右键菜单前那些功能不可用
begin
with TLCYGLXT.ADOFJTHGL do
begin
close;
sql.Clear ;
sql.Text:='select room_sate from room_info where room_name='''+item.Caption+'''';
memo1.Lines.Text:=sql.Text ;
open;
if (trim(FieldByName('room_sate').AsString)='可供') or (trim(FieldByName('room_sate').AsString)='脏台') or ( trim(FieldByName('room_sate').AsString)='预定') then
begin
N1.Enabled:=false;
N2.Enabled:=false;
N6.Enabled:=false;
N7.Enabled:=false;
N9.Enabled:=false;
end;
if trim(FieldByName('room_sate').AsString)='占用' then N3.Enabled:=false;
if trim(FieldByName('room_sate').AsString)='停用' then
begin
N1.Enabled:=false;
N2.Enabled:=false;
N3.Enabled:=false;
N6.Enabled:=false;
N7.Enabled:=false;
N9.Enabled:=false;
end;
end;
end;
procedure TfrmKTGL.RzShapeButton2Click(Sender: TObject);
var P:Tpoint;
begin
with TRzShapeButton(Sender) do
p:= Parent.ClientToScreen(Point(left-Height,top+Height));
PopupMenu2.Popup(p.X,p.Y);
end;function TfrmKTGL.Filter_state(value: string): boolean;;//根据房间的状态listview显示相对应的房间
begin
ListView.Items.Clear ;
with TLCYGLXT.ADOFJTHGL do
begin
Filtered:=false;
Filter:=Format('room_sate=%S',[QuotedStr(''+value+'')]);
Filtered:=true;
Open ;
first;
while not EOF do
begin
Item:=ListView.Items.Add;
Item.Caption:=trim(FieldByName('room_name').AsString);
if trim(FieldByName('room_sate').AsString)='可供' then Item.ImageIndex:= 1;
if trim(FieldByName('room_sate').AsString)='占用' then Item.ImageIndex:= 0;
next;
end;
Filtered:=false;
end;
result:=true;
end;procedure TfrmKTGL.N11Click(Sender: TObject);
begin
Filter_state('占用')
end;procedure TfrmKTGL.N10Click(Sender: TObject);
begin
Filter_state('可供')
end;
end.以上是我的代码 listview是动态增加的,我有两个问题:一、根据房间的状态右健菜单中的功能不可用,可是当我程序运行时第一次右击房间打开右健菜单是没有问题的 可是当我再点其它的房间 菜单的相对应的功能是否可用就不对了。
二、通过我点PopupMenu2的占用 那么listview则应显示占用的房间,点可供 listview则应显示可供的房间。请高指教。
fj_type,xf,Fj_name,server_man:string;
pos:integer;
listview:TRZListview;
NewTab:TRZTabSheet;
Item:TlistItem;
function reture_info(value:string):string;
function addlistview:boolean;
procedure setnull;
procedure ListViewMouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ListViewSelectItem(Sender: TObject; Item: TListItem;Selected: Boolean);
Procedure Getinfo;//获取房间的信息
Function Filter_state(value:string):boolean;//过滤listview显示的餐台
public
bh,server_id:string;
end;var
frmKTGL: TfrmKTGL;implementationuses Unit1, MC_TLCYGLXT, Un_Guest_Kaibill, Un_add_Xiaofei, Un_JieZhang;{$R *.dfm}{ TfrmKTGL }procedure TfrmKTGL.FormCreate(Sender: TObject);
begin
addlistview;
end;function TfrmKTGL.addlistview: boolean;
var s:string;
begin
with adoquery do
begin
close;
sql.Clear ;
sql.Text:='select FJ_Name from FJ_Type' ;//房间类型
open;
while not Eof do
begin
NewTab:=TRZTabSheet.Create(self);
NewTab.PageControl:=RzPageControl1;
newtab.TabVisible:=true;
NewTab.Caption:=trim(fieldByName('FJ_Name').AsString);
Next ;
RzPageControl1.ActivePage:=NewTab; listview:=TRZlistview.Create(self);
listview.Refresh;
listview.OnClick:=ListViewClick ;
// listview.OnSelectItem:=ListViewSelectItem;
listview.OnMouseDown:=ListViewMouseDown; listview.Refresh;
listview.Visible:=true;
listview.Align:=alclient;
listview.LargeImages:=ImageList1;
NewTab.InsertControl(listview);
Listview.Items.Clear;
with TLCYGLXT.ADOFJTHGL do
begin
Filtered:=false;
Filter:=Format('FJ_Name=%S',[QuotedStr(''+NewTab.Caption+'')]);//根据房间类型显示具体的房间名
Filtered:=true;
Open ;
First ;
while not TLCYGLXT.ADOFJTHGL.Eof do
begin
Item:= ListView.Items.Add;
Item.Caption:=trim(FieldByName('room_name').AsString);
if trim(FieldByName('room_sate').AsString)='可供' then Item.ImageIndex:= 1;
if trim(FieldByName('room_sate').AsString)='占用' then Item.ImageIndex:= 0;
Next;
end;
Filtered:=false;
end;
end;
end;
RzPageControl1.ActivePageIndex:=0;
lb_type.Caption:=RzPageControl1.ActivePage.Caption;//显示房台类型
lb_count.Caption:=inttostr(TLCYGLXT.ADOFJTHGL.RecordCount);
lb_count1.Caption:=reture_info('占用');
lb_count2.Caption:=reture_info('可供');
lb_count3.Caption:=reture_info('预定');
lb_count4.Caption:=reture_info('停用');
s:=formatfloat('#%',(SimpleRoundTo(strtoint(lb_count1.caption)/strtoint(lb_count.caption))/10)*100);
if s='%' then
lb_count5.caption:='0%'
else
lb_count5.caption:=s;
result:=true;
end;procedure TfrmKTGL.RzPageControl1TabClick(Sender: TObject);
begin
lb_type.Caption:=RzPageControl1.ActivePage.Caption;//房间类型
RzPageControl1.SetFocus ;
setnull;
end;procedure TfrmKTGL.ListViewClick(Sender: TObject);
begin
if TRZListView(Sender).Selected <> nil then
begin
lb_name.Caption := TRZListView(Sender).Selected.Caption ;//房间名字
Getinfo;
end;
end;procedure TfrmKTGL.FormActivate(Sender: TObject);
begin
RzEdit1.SetFocus ;
end;
procedure TfrmKTGL.setnull;
begin
lb_name.Caption:='';
lb_xf.Caption:='';
lb_bj.Caption:='';
lb_intime.Caption:='';
lb_outtime.Caption:='';
lb_je.Caption:='';
end;procedure TfrmKTGL.ListViewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var p:TPoint;
begin
if TRZListView(Sender).Selected <> nil then
begin
p.X:=Mouse.CursorPos.X ;
p.Y:=mouse.CursorPos.Y ;
if Button= mbRight then PopupMenu1.Popup(p.X,p.y);
Getinfo;
end;end;
function TfrmKTGL.reture_info(value: string): string;//返回房间的可供、占用等的总数
var ss:string;
begin
with TLCYGLXT.ADOFJTHGL do
begin
Filtered:=false;
Filter:=Format('room_sate=%S ',[QuotedStr(''+value+'')]);
Filtered:=true;
Open ;
if RecordCount=0 then
ss:='0'
else
ss:=inttostr(TLCYGLXT.ADOFJTHGL.RecordCount);
Filtered:=false;
end;
result:=ss;
end;
procedure TfrmKTGL.Getinfo;
var Sender: TObject;
begin
with TLCYGLXT.ADOFJTHGL do
begin
close;
sql.Clear ;
sql.Text:='select a.*,b.FJ_Name,b.In_mount,b.ZDXF,c.emp_name from Room_info a,FJ_Type b,employee c where a.fj_id=b.fj_id and a.emp_id=c.emp_id and a.room_name='''+TRZListView(Sender).Selected.Caption+'''';
open;
bh:=trim(FieldByName('room_id').AsString) ;
fj_type:=trim(FieldByName('FJ_Name').AsString) ;
xf:=trim(FieldByName('ZDXF').AsString) ;
Fj_name:=trim(FieldByName('room_name').AsString) ;
server_man:=trim(FieldByName('emp_name').AsString) ;
server_id:=trim(FieldByName('emp_id').AsString) ;
lb_XF.Caption:=trim(FieldByName('ZDXF').AsString);
end;
end;
procedure TfrmKTGL.ListViewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);//显示右键菜单前那些功能不可用
begin
with TLCYGLXT.ADOFJTHGL do
begin
close;
sql.Clear ;
sql.Text:='select room_sate from room_info where room_name='''+item.Caption+'''';
memo1.Lines.Text:=sql.Text ;
open;
if (trim(FieldByName('room_sate').AsString)='可供') or (trim(FieldByName('room_sate').AsString)='脏台') or ( trim(FieldByName('room_sate').AsString)='预定') then
begin
N1.Enabled:=false;
N2.Enabled:=false;
N6.Enabled:=false;
N7.Enabled:=false;
N9.Enabled:=false;
end;
if trim(FieldByName('room_sate').AsString)='占用' then N3.Enabled:=false;
if trim(FieldByName('room_sate').AsString)='停用' then
begin
N1.Enabled:=false;
N2.Enabled:=false;
N3.Enabled:=false;
N6.Enabled:=false;
N7.Enabled:=false;
N9.Enabled:=false;
end;
end;
end;
procedure TfrmKTGL.RzShapeButton2Click(Sender: TObject);
var P:Tpoint;
begin
with TRzShapeButton(Sender) do
p:= Parent.ClientToScreen(Point(left-Height,top+Height));
PopupMenu2.Popup(p.X,p.Y);
end;function TfrmKTGL.Filter_state(value: string): boolean;;//根据房间的状态listview显示相对应的房间
begin
ListView.Items.Clear ;
with TLCYGLXT.ADOFJTHGL do
begin
Filtered:=false;
Filter:=Format('room_sate=%S',[QuotedStr(''+value+'')]);
Filtered:=true;
Open ;
first;
while not EOF do
begin
Item:=ListView.Items.Add;
Item.Caption:=trim(FieldByName('room_name').AsString);
if trim(FieldByName('room_sate').AsString)='可供' then Item.ImageIndex:= 1;
if trim(FieldByName('room_sate').AsString)='占用' then Item.ImageIndex:= 0;
next;
end;
Filtered:=false;
end;
result:=true;
end;procedure TfrmKTGL.N11Click(Sender: TObject);
begin
Filter_state('占用')
end;procedure TfrmKTGL.N10Click(Sender: TObject);
begin
Filter_state('可供')
end;
end.以上是我的代码 listview是动态增加的,我有两个问题:一、根据房间的状态右健菜单中的功能不可用,可是当我程序运行时第一次右击房间打开右健菜单是没有问题的 可是当我再点其它的房间 菜单的相对应的功能是否可用就不对了。
二、通过我点PopupMenu2的占用 那么listview则应显示占用的房间,点可供 listview则应显示可供的房间。请高指教。
http://topic.csdn.net/u/20080316/08/b2531d1a-8681-4e65-9769-d82f710e9545.html