Array
(
)

PopupMenu em determinado lugar

Rudá
   - 09 jan 2006

Tenho uma TImage, e tenho que fazer o seguinte:

Da parte 50 a 100 de largura e de 50 a 100 de altura quando clicar ele aparecer um botão.

Só em determinada área da imagem que vai poder aparecer o popupmenu.

Como da para fazer isso??


Raserafim
   - 10 jan 2006

vc pode utilizar o evento OnMouseUp ou OnMouseDown. neste evento vc terá a posição X e Y, despois basta vc verificar se está dentro das posições que vc quer


Michael
   - 10 jan 2006

Olá!

Vc pode usar a função PtInRect (i.e. [u:f39e15d114]Point In Rect[/u:f39e15d114]) para saber se o cursor do mouse se encontra dentro da área desejada. Para isso, use o evento OnContextPopup ao invés de OnMouseUp, pois o menu de contexto não necessariamente é ativado via clique de direita do mouse. Este botão pode ser configurado no Painel de Controle e ainda há a possibilidade de o usuário usar o teclado. No seu caso, como se trata de um TImage, que não recebe foco, então este possibilidade é nula, mas em componentes descendentes de TWinControl não.

Para exibir o menu pop-up, chame o método PopUp da classe TPopupMenu, passando as coordenadas relativas à tela. Para obter esses valores, vc vai precisar usar o método ClientToScreen, da classe TControl, que traduz um ponto de uma área local para a área global da tela.

Veja como ficaria o evento OnContextPopup do seu TImage:

#Código

procedure TMeuForm.MeuImageContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
Shift: TShiftState; X, Y: Integer);
var
AX, AY: Integer;
begin
if PtInRect(Rect(50, 50, 100, 100), MousePos) then
begin
AX := ClientToScreen(MousePos).X;
AY := ClientToScreen(MousePos).Y;
MeuPopupMenu.Popup(AX, AY);
Handled := True;
end;


[]´s