PopupMenu em determinado lugar
09/01/2006
0
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??
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??
Rudá
Curtir tópico
+ 0
Responder
Posts
10/01/2006
Raserafim
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
Responder
10/01/2006
Michael
Olá!
Vc pode usar a função [b:f39e15d114]PtInRect [/b:f39e15d114](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 [b:f39e15d114]OnContextPopup [/b:f39e15d114]ao invés de [b:f39e15d114]OnMouseUp[/b:f39e15d114], 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 [b:f39e15d114]TImage[/b:f39e15d114], que não recebe foco, então este possibilidade é nula, mas em componentes descendentes de [b:f39e15d114]TWinControl [/b:f39e15d114]não.
Para exibir o menu pop-up, chame o método [b:f39e15d114]PopUp [/b:f39e15d114]da classe [b:f39e15d114]TPopupMenu[/b:f39e15d114], passando as coordenadas relativas à tela. Para obter esses valores, vc vai precisar usar o método [b:f39e15d114]ClientToScreen[/b:f39e15d114], da classe [b:f39e15d114]TControl[/b:f39e15d114], que traduz um ponto de uma área local para a área global da tela.
Veja como ficaria o evento [b:f39e15d114]OnContextPopup [/b:f39e15d114]do seu [b:f39e15d114]TImage[/b:f39e15d114]:
[]´s
Vc pode usar a função [b:f39e15d114]PtInRect [/b:f39e15d114](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 [b:f39e15d114]OnContextPopup [/b:f39e15d114]ao invés de [b:f39e15d114]OnMouseUp[/b:f39e15d114], 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 [b:f39e15d114]TImage[/b:f39e15d114], que não recebe foco, então este possibilidade é nula, mas em componentes descendentes de [b:f39e15d114]TWinControl [/b:f39e15d114]não.
Para exibir o menu pop-up, chame o método [b:f39e15d114]PopUp [/b:f39e15d114]da classe [b:f39e15d114]TPopupMenu[/b:f39e15d114], passando as coordenadas relativas à tela. Para obter esses valores, vc vai precisar usar o método [b:f39e15d114]ClientToScreen[/b:f39e15d114], da classe [b:f39e15d114]TControl[/b:f39e15d114], que traduz um ponto de uma área local para a área global da tela.
Veja como ficaria o evento [b:f39e15d114]OnContextPopup [/b:f39e15d114]do seu [b:f39e15d114]TImage[/b:f39e15d114]:
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
Responder
Clique aqui para fazer login e interagir na Comunidade :)