TCheckListBox::ItemAtPos funzt nicht?!



  • Hallo,

    vielleicht hab ich auch einfach zu lange net mehr geschlafen, aber irgendwie funktioniert bei mir die Funktion TCheckListBox::ItemAtPos(TPoint Point,Bool Exists) net wirklich. Beim ersten Aufruf mit den Maus Koordinaten kommt immer -1 raus und mit den bei dem Event TCheckListBox::OnEndDrag mitgelieferten X und Y-Werten liefert die Funktion als Rückgabewert 0. Insgesamt gehts darum Einträge in einer CheckListBox zu verschieben (TCheckListBox::Move(int,int))!

    Vielen Dank im Voraus!

    void __fastcall TfrmPlaylist::PlaylistStartDrag(TObject *Sender,
    	  TDragObject *&DragObject)
    {
    startindex=Playlist->ItemAtPos(Mouse->CursorPos,true);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TfrmPlaylist::PlaylistEndDrag(TObject *Sender, TObject *Target,
    	  int X, int Y)
    {
    TPoint punkt;
    punkt.x=X;punkt.y=Y;
    endindex=Playlist->ItemAtPos(punkt,true);
    if(endindex!=startindex)
      Playlist->Items->Move(startindex,endindex);
    }
    //---------------------------------------------------------------------------
    

    mfg
    cb



  • startindex=Playlist->ItemAtPos(Mouse->CursorPos,true);
    

    du musst auch die postion relativ zur Checklistbox und nicht zum Screen übergeben

    startindex=Playlist->ItemAtPos(Playlist->ScreenToClient(Mouse->CursorPos),true);
    


  • Hallo,

    Jo logisch! Viel Dank! Noch eine kleine Frage, wie kann ich den Cursor beim Verschieben der Einträge ändern? Das ist nähmlich im Moment der der erscheint, wenn Drag&Drop Handle nicht auf true steht. Drag Cursor ist es leider nicht, der ist nämlich eingestellt.

    mfg cb



  • TForm::Cursor? die BCB-Hilfe klährt viele solche Fragen

    [edit] falls du willst, dass derCursor automatisch wechselt, musst du dich mal in der BCB-Hilfe schlau machen.. oder die Suche benutzen. zB gibts ja TCheckListBox::DragCursor und noch weitere..



  • Hallo Big Neal,

    Also TForm::Cursor hat damit garnichts zu tun... Der Cursor ändert sich automatisch wenn ich einen Eintrag anklicke, LButton gedrückt halte und an eine andere Stelle in der Liste ziehe. Zuerst dachte ich an TCheckListBox::DragCursor, was ich aber in meinem vorherigen Beitrag als falschen Verdacht klassifiziert habe. Nach den "weiteren" werd ich suchen, danke.

    mfg cb



  • Jep, habe ich vorhin gemerkt.. darum das edit.. dort habe ich aber dein letzes posting nicht richtig beachtet.. habe vorhin kurz etwas getestet, und mal

    void __fastcall TForm1::CheckListBox1DragOver(TObject *Sender,
          TObject *Source, int X, int Y, TDragState State, bool &Accept)
    {
       Accept = true;
    }
    

    versucht.. schau an, da kam der richtige Cursor zum vorschein (leider nur in der CheckListBox)
    evtl hilft das ja weiter



  • Hallo BigNeal,

    jetzt haben wir uns verstanden! 🙂 War genau was ich gesucht habe! Vielen Dank!

    mfg cb


Anmelden zum Antworten