PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum 2 TFileListBox e Drag And Drop complicado #211995

06/02/2004

0

olá,

estou com o seguinte problema:

tenho 2 TFileListBox(paleta win3.1) e to tentando copiar os arquivos do primeiro para o segundo arrastando com o mouse, preciso copiar somente os arquivos selecionados no TFLB de origem para o de destino, mas não estou conseguindo.

preciso de ajuda!!!

segue o código que to usando...

{exemplo tirado deste forum...com adaptações para o meu caso}
// os arquivos devem vir de flOrigem para flFiles

procedure TfrmJPGtoBMP.flOrigemMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
    TFileListBox(SENDER).BeginDrag(TRUE);
end;

procedure TfrmJPGtoBMP.flFilesDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
    IF SENDER <> Source THEN
        Accept:=true;

end;

procedure TfrmJPGtoBMP.flFilesDragDrop(Sender, Source: TObject; X,
  Y: Integer);
VAR
  ORIGEM,DESTINO,I: INTEGER;
  TEMP: TStringList;
begin
  IF SENDER <> Source THEN
  BEGIN
    TEMP:= TStringList.Create;
    //GUARDA ORIGEM E DESTINO
    ORIGEM:=TFileListBox(SOURCE).ItemIndex;
    DESTINO:=TFileListBox(SOURCE).ItemAtPos(POINT(X,Y),FALSE);

    IF DESTINO <> ORIGEM THEN
      DESTINO:=TFileListBox(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 TFileListBox(SOURCE).Count -1 DO
    BEGIN
      //SÓ ENTRA AKI UMA VEZ
      IF I <> DESTINO THEN
        TEMP.Add(TFileListBox(SOURCE).Items[ORIGEM]);

      //ENTRA AKI SEMPRE
      IF I > ORIGEM THEN
        TEMP.ADD(TFileListBox(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 >= TFileListBox(SOURCE).Count  THEN
      TEMP.Add(TFileListBox(SOURCE).Items[ORIGEM]);

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


toda ajuda é muito bem vinda.

desde já obrigado.

Douglas.


Douglas Bitencourt

Douglas Bitencourt

Responder

Posts

06/02/2004

Douglas Bitencourt

SOBE
_____
Aroldo Zanela (se puder me dar uma força eu agradeço).


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar