ListBox und rechte Maustaste



  • Hallo,
    wie kann man in einer ListBox mit der rechten Maustaste ein Eintrag markieren ?
    Über onMouseDown müsste doch was zu machen sein.

    MfG
    David



  • am einfachsten so:

    //Header
    //Benutzerdefinierte List Box wird von der Basisklasse abgeleitet
    class TCstListBox : public TListBox
    {
    public:
    __fastcall TCstListBox(Forms::TForm *AOwner):TListBox(AOwner){Parent=AOwner;}
    
    //Dispatch Methode wird überschrieben
    virtual void __fastcall Dispatch(void *Message);
    
    //weitere Eigenschaften , Methoden , etc.
    private:
    
    protected:
    
    public:
    
    __published:
    
    };
    
    //Cpp
    
    void __fastcall TCstListBox::Dispatch(void *Message)
    {
    
      switch(((TMessage*)Message)->Msg)
      {
    
      case WM_RBUTTONDOWN:
      //Tue etwas
      ShowMessage("rechte Maustaste in meiner eigenen Listbox Klasse gedrückt");
      TListBox::Dispatch(Message);
      break;
      default:
      TListBox::Dispatch(Message);
      break;
      }
    }
    

    Man könnte das natürlich auch mit Message Handlern lösen.

    Den Rest kannst Du Dir denke ich schon alleine basteln 😉



  • Hallo

    Das geht sicherlich auch ohne eine neue Komponente abzuleiten.
    In OnMouseDown werden ja die Mauskoordinaten zurückgegeben. Dann könnte man ja mit ItemAtPos rausbekommen welcher Eintrag dort ist und diesen dann markieren.

    Ciao



  • natürlich geht auch!

    Hier:

    void __fastcall TForm1::ListBox1MouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    TPoint point;
    
      if(Button==mbRight)
      {
      int Index = ListBox1->ItemAtPos(Point(X,Y), true);
      ListBox1->ItemIndex=Index;
      }
    }
    


  • Wunderbar Epidemic, jetzt braucht er nicht mehr selbst zu denken. 😞



  • epidemic schrieb:

    natürlich geht auch!

    Hier:

    void __fastcall TForm1::ListBox1MouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    [b]TPoint point; // Wozu das?[/b]
    
      if(Button==mbRight)
      {
      int Index = ListBox1->ItemAtPos(Point(X,Y), true);
      [b]ListBox1->ItemIndex=Index; // Und bei MultiSelect=true?[/b]
      }
    }
    


  • Multiselect interessiert nicht, vielen Dank Leute ! ItemAtPos war mir neu 😉



  • Windoof schrieb:

    epidemic schrieb:

    natürlich geht auch!

    Hier:

    void __fastcall TForm1::ListBox1MouseUp(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    [b]TPoint point; // Wozu das?[/b]
    
      if(Button==mbRight)
      {
      int Index = ListBox1->ItemAtPos(Point(X,Y), true);
      [b]ListBox1->ItemIndex=Index; // Und bei MultiSelect=true?[/b]
      }
    }
    

    Klar , die zusätzliche Deklaration von TPoint war überflüßig, bin heute etwas Müde(siehe die Uhrzeit meines ersten Beitrages heute 😮 )
    Mein Fehler.

    Von MultiSelect war keine Rede 😉


Anmelden zum Antworten