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则应显示可供的房间。请高指教。