sexta-feira, 14 de janeiro de 2011

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;

Nenhum comentário:

Postar um comentário