Drag-and-drop

Delphi

24/06/2003

Alguem pode me dizer como fazer para realizar uma operação drag-and-drop em um componente ListView?
Quero alternar as linhas manualmente.
Até mais


Alex Maia

Alex Maia

Curtidas 0

Respostas

Bilouro

Bilouro

24/06/2003

vom bora:

[b:f0cf474313]crie um listbox e no evento onMouseDown coloque:[/b:f0cf474313]
TListBox(SENDER).BeginDrag(TRUE);


[b:f0cf474313]no evento onDragOver:[/b:f0cf474313]
IF SENDER = Source THEN
  Accept:=true;


[b:f0cf474313]no evento onDragDrop:[/b:f0cf474313]
VAR
  ORIGEM,DESTINO,I: INTEGER;
  TEMP: TStringList;
begin
  IF SENDER = Source THEN
  BEGIN
    TEMP:= TStringList.Create;
    //GUARDA ORIGEM E DESTINO
    ORIGEM:=TListBox(SOURCE).ItemIndex;
    DESTINO:=TListBox(SOURCE).ItemAtPos(POINT(X,Y),FALSE);
    
    IF DESTINO > ORIGEM THEN
      DESTINO:=TListBox(SOURCE).ItemAtPos(POINT(X,Y),FALSE) + 1;

    //COPIA ITEM A ITEM DE DA LISTA ORIGINAL PARA TEMP
    //MENOS A ORIGEM QUE ELE SÓ COLOCA ONDE O MOUSE APONTA (DESTINO)
    FOR I := 0 TO TListBox(SOURCE).Count -1 DO
    BEGIN
      //SÓ ENTRA AKI UMA VEZ
      IF I = DESTINO THEN
        TEMP.Add(TListBox(SOURCE).Items[ORIGEM]);

      //ENTRA AKI SEMPRE
      IF I <> ORIGEM THEN
        TEMP.ADD(TListBox(SOURCE).Items[I]);
    END;
    // A FUNÇAO ItemAtPos, RETORNA O NÚMERO DE ITEMS +1 SE ONDE EU COLOCAR O MOUSE
    //   NÃO TIVER ITEM NENHUM, POR ISSO NÃO ENTRA NO FOR POIS VAI ATÉ COUNT -1
    IF DESTINO >= TListBox(SOURCE).Count  THEN
      TEMP.Add(TListBox(SOURCE).Items[ORIGEM]);

    //AGORA EU LIMPO O LISTBOX E COPIO O TEMP PARA ELE
    TListBox(SOURCE).Clear;
    TListBox(SOURCE).Items:=TEMP;
  END;
  //LIBERO O TEMP
  TEMP.Free;
END;


PRONTO!

Provavelmete deve ter algo mais simples... Porém Tá aí!
Se quiser me manda um mail que eu mando o projeto de exemplo!

grande abraço


GOSTEI 0
Alex Maia

Alex Maia

24/06/2003

Por isso que eu perguntei se ninguem sabe!!!
Todas as respostas tratam do componente ListBox, porém a operação que desejo realizar é sobre um componente ListView. Então, mais uma vez pergunto: alguem pode me dizer como fazer para realizar uma operação drag-and-drop em um componente ListView?
Quero alternar as linhas manualmente!
Desde já agradeço.


GOSTEI 0
POSTAR