Você está na página 1de 2

31/08/2018 Planeta Delphi - Dicas | Menus popup no pagecontrol...

Menus popup no pagecontrol

Código

{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.

Na dica de hoje veremos como alterar a data e hora do sistema de forma bem simples.
Primeiramente crie uma nova aplicação e adicione ao Form dois componentes TEdit e um TButton.
Limpe a propriedade Text dos Edits.
Declare a procedure DataHora public da Unit
public
{ Public declarations }
procedure DataHora(Data, Hora: TDateTime);
Agora crie a procedure na área Implementation}
procedure TForm1.DataHora(Data, Hora: TDateTime);
var
DataHora: TSystemTime;
Ano, Mes, Dia,
H, M, S, Mil: word;
begin
Data := StrToDate(Edit1.Text);
Hora := StrToTime(Edit2.Text);
DecodeDate(Data, Ano, Mes, Dia);

http://www.planetadelphi.com.br/dica/1758/menus-popup-no-pagecontrol 1/2
31/08/2018 Planeta Delphi - Dicas | Menus popup no pagecontrol...
DecodeTime(Hora, H, M, S, Mil);
with DataHora do
begin
wYear := Ano;
wMonth := Mes;
wDay := Dia;
wHour := H;
wMinute := M;
wSecond := S;
wMilliseconds := Mil;
end;
SetLocalTime(DataHora);
end;
//Faça a chamada à procedure no evento OnClick do Button1
procedure TForm1.Button1Click(Sender: TObject);
begin
DataHora(StrToDateTime(Edit1.Text), StrToDateTime(Edit2.Text));
end;
{Pronto, agora é só executar o programa e ver seu funcionamento.}

http://www.planetadelphi.com.br/dica/1758/menus-popup-no-pagecontrol 2/2