PopupMenu em determinado lugar

09/01/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??


Rudá

Respostas

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 Citar

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]:

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 Citar