Drag-and-drop// Será que ninguem sabe?

Delphi

25/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

Thaisandrade

Thaisandrade

25/06/2003

[quote:bb1607ba0f=´Alex Maia´]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[/quote:bb1607ba0f]

Mande-me um e-mail explicando o que quer fazer que eu vejo o que pode ser feito.

thais_andrade1980@hotmail.com


GOSTEI 0
Bilouro

Bilouro

25/06/2003

vom bora:

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


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


[b:cb99e4caae]no evento onDragDrop:[/b:cb99e4caae]
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
Japa

Japa

25/06/2003

por favor me expliquem oque é drag-and-drop, quero saber para que serve :lol:


GOSTEI 0
POSTAR