Results 1 to 9 of 9

Thread: Menu maken van een listbox

  1. #1

    Menu maken van een listbox

    wie helpt mij even op weg, ik wil van items uit een listbox een menu maken dus lukt goed met...

    Code:
    for i := 0 to listbox1.Items.Count - 1 do
            begin
            s := listbox1.Items[i];
    
            myItem := TMenuItem.Create(self);
    
            with myItem do
                    begin
                    Caption := s;
                    Name := 'myItem' + IntToStr(i);
                    //OnClick := ??;
                    Visible := True;
                    end;
    
            form2.Categorie1.Add(myItem);
    
            end;
    Maar nu heeft die listbox ook een onevent.click

    met
    Code:
     Tabel := ListBox1.Items[ListBox1.ItemIndex];
    hoe vul ik dat in het menu in dan op //OnClick := ??; met hetzelfde effect als de listbox.onclick ?

    He mooiste zal zijn dan het menu item weer terug verwijst naar de listbox.onclick event

  2. #2
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    Je zal een custom onClick event moeten maken dat je aan IEDER menu item toekent (dus ieder onClick event verwijst naar hetzelfde stuk code), dan zul je vervolgens op de een of andere wijze een onderscheidend kenmerk moeten geven. Ikzelf gebruik daarvoor meestal de .Name property (voorbeeld specialMenu1, specialMenu2, specialMenu3) en zo verder afhandelen via bijvoorbeeld case statements.
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  3. #3
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    Even een snel stukje code voor je geschreven:

    Een Button, een leeg PopupMenu en een Listbox. Hopelijk heb je hier wat aan

    Delphi Code:
    1. unit Unit1;
    2.  
    3. interface
    4.  
    5. uses
    6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    7.   Dialogs, Menus, StdCtrls;
    8.  
    9. type
    10.   TForm1 = class(TForm)
    11.     Button1: TButton;
    12.     PopupMenu1: TPopupMenu;
    13.     ListBox1: TListBox;
    14.     procedure Button1Click(Sender: TObject);
    15.     procedure CustomClick(Sender: TObject);
    16.   private
    17.     { Private declarations }
    18.   public
    19.     { Public declarations }
    20.   end;
    21.  
    22. var
    23.   Form1: TForm1;
    24.  
    25. implementation
    26.  
    27. {$R *.dfm}
    28.  
    29. procedure TForm1.Button1Click(Sender: TObject);
    30. var i: integer;
    31.     s: string;
    32.     myItem: TMenuItem;
    33. begin
    34. // maak popup menu
    35.     for i := 0 to listbox1.Items.Count - 1 do
    36.     begin
    37.         myItem := TMenuItem.Create(PopupMenu1);
    38.         s := ListBox1.Items.Strings[i];
    39.  
    40.         with myItem do
    41.         begin
    42.             Caption := s;
    43.             Name := 'myItem' + IntToStr(i);
    44.             OnClick := CustomClick;
    45.             Visible := True;
    46.         end;
    47.  
    48.         PopupMenu1.Items.Add(myItem);
    49.     end;
    50. end;
    51.  
    52. procedure TForm1.CustomClick(Sender: TObject);
    53. var s: string;
    54. begin
    55.     // Een van de knoppen in het menu wordt geclickt
    56.     s := (Sender as TMenuItem).Name;
    57.     Delete(s, 1, 6);
    58.     ShowMessage('You clicked item ' + s + ': ' + (Sender as TMenuItem).Caption);
    59. end;
    60.  
    61. end.
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  4. #4
    De tag is ook handig als onderscheidend element. Die is numeriek en daardoor ook gewoon te gebruiken in een case.
    1+1=b

  5. #5
    Heel erg bedankt BobbaFet,

    je code heeft mij tot een oplossing geleid, zal hieronder nog even mijn versie hierop plaatsen voor de liefhebbers

    Code:
    Procedure tform1.menuklik(sender: TObject);
     Var
     s: string;
    Begin
      // menu wordt geklikt , listbox onclick simuleren
      s := (sender as TmenuItem).Name;
      Delete(s,1,6);
      listbox1.ItemIdex := strtoint(s);
      listbox1.onclick(self);
    End;

  6. #6
    Senior Member Lodewijk's Avatar
    Join Date
    Apr 2004
    Location
    Netherlands
    Posts
    1,934
    Delphi Code:
    1. var
    2.   s: string;
    3. begin
    4.   s := (Sender as TMenuItem).Name[1];
    5.   Listbox.ItemIndex := StrToInt(s);
    6.   Listbox1Click(Self);
    7. end;
    Op deze manier S vullen lijkt me iets duidelijker voor als je je code later terugleest. En volgens mij bedoel je zoals ik hier boven al aangeef Listbox1Click ipv dat je de OnClick handler wijzigt (of had ik het hele topic toch even moeten doorlezen? )

  7. #7
    Senior Member
    Join Date
    Apr 2003
    Location
    Netherlands
    Posts
    376
    delphi Code:
    1. s := (Sender as TMenuItem).Name[1];

    Dit zal niet werken als het contextmenu meer dan 9 items heeft. Dan loopt het hopeloos in de soep, vandaar het gebruik van Delete ;-)
    Iedereen heeft recht op mijn mening!
    "You're not thinking, you're merely being logical!"

  8. #8
    Senior Member Lodewijk's Avatar
    Join Date
    Apr 2004
    Location
    Netherlands
    Posts
    1,934
    Daar had ik inderdaad zo snel niet aan gedacht, ik zou deze methode uberhaubt niet toepassen (code die werkt adhv captions) maar je hebt gelijkt. Hoewel, jouw delete die delete toch ook "gewoon maar" alles na positie 1, dus je houdt hetzelfde resultaat over.

  9. #9
    Misschien toch de hint van GolezTrol gebruiken en in plaats van 'name' de 'tag' eigenschap gebruiken. Een maand geleden heb ik ook een dynamisch menu in elkaar gezet, en tag gaf het minste werk (met name omdat ik direct ermee naar een item in een array kon verwijzen). Eigenlijk zijn jullie verwoed bezig om een integer in een string op te slaan, en die er vervolgens weer uit te halen om verder mee te werken.
    It's just that nothing seems worth saving

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •