[Delphi] PopupMenu probleem

Pagina: 1
Acties:

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Topicstarter
Op een formulier heb ik een ListView. Ook heb ik een PopupMenu aangemaakt, wat tevoorschijn zou moeten komen als ik met rechts klik op een item in de ListView.

Alles goed en wel, het TListItem.PopupMenu staat ingesteld op het menu. Maar als ik ergens anders op mijn formulier klik komt het PopupMenu ook tevoorschijn!

Ik heb wel een oplossinkje: AutoPopup uitzetten en dan via een event handmatig de Popup laten zien, maar dan moet je handmatig de coördinaten berekenen enzo. Nou is dat op zich niet erg, maar ik heb zo'n gevoel dat ik dan om het probleem heenwerk in plaats van dat ik het oplos.

Zie ik iets simpels over 't hoofd? :? Hoe stel ik de boel in dat hij de Popup alleen laat zien via het ListItem?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

Je stelt een popupmenu in voor de ListView, dus logisch dat deze ook omhoog komt als je geen item hebt geselecteerd.
Vang de onPopup event af van je popup menu en check daar of er een ListItem is geselecteerd.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Creepy schreef op 21 oktober 2002 @ 08:29:
Vang de onPopup event af van je popup menu en check daar of er een ListItem is geselecteerd.
In het onPopup-event kan je niet zeggen dat de popup niet door mag gaan. Maar in het kader van duidelijke user-interfaces geeft dat ook helemaal niet. Als je ergens met rechts op klikt moet er gewoon altijd een popupmenu naar voren komen. Mocht je toevallig geen item geselecteerd hebben, dan zijn alle opties in dat menu grijs.

En dat grijsmaken kan je inderdaad prima in het onPopup-event doen.

Siditamentis astuentis pactum.


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Topicstarter
Onderstaand stukje code heb ik ingevoegd:

Delphi:
1
2
3
4
5
procedure TMainForm.UserMenuPopup (Sender: TObject);
begin
    if Sender is TListItem then
        beep;
end;

Maar reken maar niet dat ie piept als ik met rechts op een TListItem klik. De Popup komt uiteraard wel maar die komt overal waar ik klik nog steeds natuurlijk. Als ik TListItem vervang door bijvoorbeeld TObject piept ie wel.

Zelfs als ik TListItem vervang door TListView en ik klik met rechts op de ListView piept ie niet! Als ik een breakpoint op die regel zet, met rechts klik en dan de cursor op Sender houd hoopte ik te zien wat dan wel het type was, maar helaas. Hij geeft alleen () aan.
Varienaja schreef op 21 oktober 2002 @ 09:18:
[...]
In het onPopup-event kan je niet zeggen dat de popup niet door mag gaan. Maar in het kader van duidelijke user-interfaces geeft dat ook helemaal niet. Als je ergens met rechts op klikt moet er gewoon altijd een popupmenu naar voren komen. Mocht je toevallig geen item geselecteerd hebben, dan zijn alle opties in dat menu grijs.

En dat grijsmaken kan je inderdaad prima in het onPopup-event doen.
Nou nee, ik wil eigenlijk alleen een popup als ik op een item in die listview klik.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

GerbenW schreef op 21 oktober 2002 @ 09:23:
Maar reken maar niet dat ie piept als ik met rechts op een TListItem klik. De Popup komt uiteraard wel maar die komt overal waar ik klik nog steeds natuurlijk. Als ik TListItem vervang door bijvoorbeeld TObject piept ie wel.

Zelfs als ik TListItem vervang door TListView en ik klik met rechts op de ListView piept ie niet! Als ik een breakpoint op die regel zet, met rechts klik en dan de cursor op Sender houd hoopte ik te zien wat dan wel het type was, maar helaas. Hij geeft alleen () aan.
Het is degene die de OnPopup doet. De TPopupMenu zelf dus! Jij weet zelf aan welk component ie verbonden is. Daar doe je TListView.Selected en kan je zien of die geAssigned zijn.

Sender.ClassName geeft een string met de naam van de class mocht je het zelf willen proberen.
Nou nee, ik wil eigenlijk alleen een popup als ik op een item in die listview klik.
Varienaja heeft gelijk hoor. Je hoort altijd een menu te geven en niet alleen als er wat geselecteerd is. Maar jij bent de baas natuurlijk :)

We adore chaos because we like to restore order - M.C. Escher


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Antwoord stond er al :(

If you are not wiping out you are nog pushing enough...


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34

Dat wil daarom niet zeggen dat jij jouw post hoeft te verwijderen. Wie weet stond er nog wel wat extra informatie in oid.

https://fgheysels.github.io/


  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Topicstarter
LordLarry schreef op 21 oktober 2002 @ 10:32:
....een heleboel bruikbare info...
Varienaja heeft gelijk hoor. Je hoort altijd een menu te geven en niet alleen als er wat geselecteerd is. Maar jij bent de baas natuurlijk :)
Nou kijk, dit staat niet echt mooi, ook niet als het grayed out is:

Afbeeldingslocatie: http://www.gerbs.net/pics/got/tech/2002-10/gray.png

Misschien snap je nu waarom ik daar geen popup wil ;) Maar thanx voor de bruikbare info, ik pruts weer ff verder (kword net wakker :Y))

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Topicstarter
Tja het blijft een vage oplossing vind ik... Dan maar zo:

Delphi:
1
2
3
4
5
6
7
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
    i: integer;
begin
    for i := 0 to PopupMenu1.Items.Count - 1 do
        PopupMenu1.Items[i].Enabled := ListView1.SelCount > 0;
end;


Maar bij bovenstaand screenshot vinden jullie 't toch netter dat je gewoon dat menu krijgt (maar dan grayed out) ?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

of menu items die wel gekozen kunnen worden op dat moment...zoals add

We adore chaos because we like to restore order - M.C. Escher


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

whoami schreef op 21 oktober 2002 @ 10:39:

[...]

Dat wil daarom niet zeggen dat jij jouw post hoeft te verwijderen. Wie weet stond er nog wel wat extra informatie in oid.
Stond echt psies hetzelfde.... Maar voor de volgende keer zal ik ehm laten staan :)

If you are not wiping out you are nog pushing enough...


  • killermar
  • Registratie: Augustus 2002
  • Laatst online: 12-07 08:05
Je zou de menuitems ook 'invisible' kunnen maken ipv 'disabled', gebruik .visible ipv .enabled

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 18-08 10:58

Bergen

Spellingscontroleur

Topicstarter
Hmm inderdaad, works just fine. Ik had wel om invisible gezocht, maar dan gewoon bij 't PopupMenu zelf. Niet bij de items.
Pagina: 1