[C++ Builder] MultiSelect & Drag'n Drop

Pagina: 1
Acties:

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Ik heb in m'n applicatie 2 TListBoxen staan. Van beide ListBoxen staat de 'MultiSelect' property op true.

Nu ben ik bezig om wat 'sleur en pleur' functionaliteit in te bouwen in de app. Dat je dus items van de ene listbox kunt draggen en die items op de andere listbox kunt droppen.

Die drag and drop functionaliteit enzo werkt wel goed, maar die 'multiselect' eigenschap van m'n listboxen gaat een beetje de mist in. Als ik nl. met [CTRL]+[LeftClick] nog een item selecteer, lukt dat niet echt meer zoals het moet.

Het zal wel liggen aan m'n OnMouseDown event-handler die wat d&d functionaliteit bezit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TfrmRapportPerMaand::BeschikbaarListBoxMouseDown(
    TObject *Sender, TMouseButton Button, TShiftState Shift, int X,
    int Y)
{
  TListBox*   ListBox;

  if (Button == mbLeft)
  {
    ListBox = dynamic_cast<TListBox*>(Sender);
    if (ListBox->ItemAtPos(Point(X, Y), true) >= 0)
    {
    ListBox->BeginDrag(false, 5);
    }
  }
}

Iemand die al hetzelfde probleem heeft meegemaakt? Hoe heb je het opgelost of 'gework-arounded'?

https://fgheysels.github.io/


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

WAarom drag en drop je niet in OnMouseMove? (Met check of button down is natuurlijk), dan kun je OnMouseDown gewoon voor select gebruiken...

Of ben ik dom? :?

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
In m'n OnMouseDown event-handler staat de code die een drag and drop procedure start, nl die BeginDrag() functie. Die mag enkel maar gestart worden als m'n linkermuisbutton ingedrukt is, en er een item is op de positie waarop ik m'n linkermuisknop indruk.
Ik kan het wel eens proberen om het in m'n OnMouseMove te zetten, maar ik vrees dat hij dan gedurende het slepen iedere keer een drag and drop procedure gaat starten zolang ik over m'n Listbox move.

https://fgheysels.github.io/


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

hmmm... wat ik bedoel is:

OnMouseDown:
- selecteer

OnMouseMove
- if (button down)
{ Drag 'n drop iets }

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:57
Op zaterdag 09 februari 2002 13:38 schreef Poohbear het volgende:
hmmm... wat ik bedoel is:

OnMouseDown:
- selecteer

OnMouseMove
- if (button down)
{ Drag 'n drop iets }
Ja, maar wat ik bedoel: De OnMouseMove gaat iedere keer uitgevoerd worden als je je muis over die listbox movet, en die BeginDrag - functie moet maar 1x aangeroepen.
Ik kan natuurlijk wel een vlaggetje gaan gebruiken die aangeeft of die BeginDrag al aangeroepen is enzo, maar da's nie zo mooi.

https://fgheysels.github.io/