2010-07-19 3 views
1

Je dois être capable de faire apparaître un TForm lorsque je clique avec le bouton droit sur un TPaintBox (le contenu du formulaire dépendra de l'endroit où je clique). Si l'utilisateur clique ailleurs, je voudrais que le formulaire original soit détruit (ou au moins disparaisse). Si le nouveau clic se trouve être un autre clic droit sur le TPaintBox, un nouveau TForm doit apparaître. Fondamentalement, il s'agit d'une action du type de requête Propriétés du clic droit, c'est-à-dire un clic droit pour obtenir les propriétés de la zone de TPaintBox.Comment faire pour Pop-up Formulaire sur le clic droit?

Cela semble être plus difficile que je l'imaginais. J'ai d'abord essayé de détruire le formulaire pop-up lorsque la pop était désactivée en utilisant l'événement OnDeactivate. Cela a entraîné l'affichage de la fenêtre contextuelle.

Répondre

4

Voici ma solution (testé et fonctionnel) ...

type 
    TForm1 = class(TForm) 
    ... 
    private 
    ContextForm: TfrmContext; 
    end; 

... 

implementation 

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
begin 
    if ContextForm <> nil then 
    FreeAndNil(ContextForm); 
if Button = mbRight then 
    begin 
    ContextForm := TfrmContext.Create(Application); 
    ContextForm.SetParentComponent(Application); 
    ContextForm.Left := Mouse.CursorPos.X; 
    ContextForm.Top := Mouse.CursorPos.Y; 
    ContextForm.Show; 
    end; 
end; 

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
begin 
    if ContextForm <> nil then 
    FreeAndNil(ContextForm); 
end; 

Dans cette démo, un clic droit sur Button1 va créer votre « contexte formulaire » (qui est un TForm) et définir si sa position le coin supérieur gauche de votre "formulaire de contexte" se trouvera exactement à l'endroit où se trouve le curseur de votre souris. Un clic n'importe où sur votre formulaire détruira le formulaire de contexte.

Profitez-en!

+0

Steve "a demandé et a couru" (certainement ses statistiques suggéreraient ceci) signifiant que la question ne sera probablement jamais marquée comme Réponses (même si c'est) :( – LaKraven

+2

Si vous avez besoin du karma je peux vous voter haut :-) – Johan

Questions connexes