PageControl - menus popup diferentes para cada aba do pagecontrol

Top  Previous  Next

Menus Popup No PageControl

 

Saiba como exibir menus popup quando o usuário clicar com o botão direito do mouse sobre as abas de um componente PageControl. Esta técnica, agrega uma funcionalidade a mais ao componente, permitindo que cada aba tenha o seu próprio menu. 

 

 

Siga os passos abaixo para implementar o procedimento responsável pela exibição dos menus no PageControl:

 

 

1) Abra uma nova aplicação e insira os seguintes componentes: 1 PageControl (paleta Win32) e 2 PopupMenu (paleta Standard);

 

2)  Só para exemplificar, adicione duas páginas (abas) ao PageControl com os respectivos nomes "Clientes" e "Fornecedores". Ajuste os componentes de forma que fique com a aparência abaixo. Caso deseje, você pode incluir alguns componentes no interior de cada uma das abas. Isto só não foi feito aqui porque o objetivo desta dica é explorar outras características do PageControl:

 

 

 

 

 

3) Insira alguns itens de menu para cada componente PopupMenu, sendo que PopupMenu1 terá correspondência com a aba "Clientes" e PopupMenu2 com a aba "Fornecedores";

 

4) Adicione a unit CommCtrl na seção Uses da unidade e declare, na seção public, uma procedure com o nome de TabMenuPopup, da seguinte forma:

 

procedure TabMenuPopup(APageControl: TPageControl; X, Y: Integer);

 

 

 

5)  Implemente o código da procedure, desta maneira:

 

procedure TForm1.TabMenuPopup(APageControl: TPageControl; X, Y: Integer);

var

   hi: TTCHitTestInfo;

   TabIndex: Integer;

   p: TPoint;

begin

   hi.pt.x := X;

   hi.pt.y := Y;

   hi.flags := 0;

   TabIndex := APageControl.Perform(TCM_HITTEST, 0, longint(@hi));

   p.x := APageControl.Left + X;

   p.y := APageControl.Top + y;

   p := ClientToScreen(p);

   // Permite o uso de diferentes menus para cada aba do PageControl...

   case TabIndex of

      0{Primeira aba...}

         PopupMenu1.Popup(P.x, P.Y);

      1{Segunda aba...}

      PopupMenu2.Popup(P.x, P.Y);

   end

end;

 

 

6) No evento OnMouseDown do PageControl, digite o seguinte:

 

procedure TForm1.PageControl1MouseDown(Sender: TObject;

         Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

    if Button = mbRight then

       begin

           TabMenuPopup(PageControl1, X, Y);

       end;

    end;

 

7) Rode e teste a aplicação.