Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Dedlphi] PopUp Menu su bottoni... come?

    ciao a tutti.

    ho un pulsante generico del tipo TButton.
    vorrei che al semplice click su di esso si aprisse un PopUpMenu...

    ho provato ad assegnare al pulsante un popup, tramite le proprietà, ma al click nn si apre.

    Usando il comando
    codice:
    Menu.PopUp(X,Y);
    sono costretto a dare dedlle coordinate, manualmente, e cambiando monitor ho notato si generano vari fastidi.

    potete darmi una mano?

    grazie. e ciao.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Un menu di popup (in Delphi, rappresentato dal componente TPopupMenu) può essere aperto solo specificandone le coordinate relative allo schermo.

    Assegnando la proprietà PopupMenu del TButton, non fai altro che indicare quale menu si deve automaticamente aprire facendo clic con il tasto destro del mouse sul pulsante; il menu verrà aperto alle coordinate del mouse.

    Puoi comunque aprire il menu manualmente, fissandone le coordinate.

    Questa porzione di codice, ad esempio, visualizza il menu posizionandolo col bordo sinistro allineato al pulsante, ma leggermente più in basso.
    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      P: TPoint;
    begin
      P := Point(Button1.Left, Button1.Top + Button1.Height);
      P := ClientToScreen(P);
      PopupMenu1.Popup(P.X, P.Y);
    end;
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    ok, grazie mille maestro.

    sai perchè mi era nato un problema?

    avevo assegnato il menu al pulsante, ma di per se il menu è VUOTO, viene riempito a runtime con dei valori prelevati da un file esterno... quindi cliccando nn compariva nulla.

    cmq, grazie per l'idea e per l'aiuto!

    c'è solo un difetto nel ragionamento che già in passato nn sono riuscito a risolvere:
    il pulsante di cui vogliamo estrarre le coordinate si trova all'interno di un ulteriore contenitore (un pannello, x l'esattezza) e di conseguenza il comntrollo ha una posizione relativa al suo contenitore: per cui, una volta prelevate le coordinate del pulsante, il menu viene aperto ma FUORI dal controllo interessato...
    spero di essere stato chiaro.
    __________________________________________________ _________________
    | FORM PRINCIPALE
    |._______________________
    |.|CONTROLLO CONTENITORE|
    |.|_________
    |.|PULSANTE| <-io devo cliccare un pulsante NEL contenitore
    |.|--------- e vorrei che il menu si aprisse NEL contenitore
    |._______________________
    |
    |

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Sei stato molto chiaro. Infatti, noterai che nel mio codice ho usato il metodo ClientToScreen del form che permette di tramutare coordinate relative al controllo contenitore (il form) in coordinate schermo. Dovresti provare a chiamare il metodo ClientToScreen del controllo contenitore, invece del form. Un esempio:
    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      P: TPoint;
    begin
      P := Point(Button1.Left, Button1.Top + Button1.Height);
      P := Panel1.ClientToScreen(P);
      PopupMenu1.Popup(P.X, P.Y);
    end;
    supponendo che il controllo sia contenuto all'interno di un TPanel.

    In definitiva, il pulsante ha sempre la stessa posizione, ma devi ogni volta chiedere al controllo che lo contiene di effettuare la conversione, il quale si rivarrà a ritroso verso il controllo nel quale è contenuto sino ad arrivare al form, poi allo schermo che darà il risultato consono da passare al metodo Popup.

    E' macchinoso, ma è più facile da fare che da spiegare.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    ok, grazie 1000

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.