Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326

    [delphi] riconoscere oggetto sotto il mouse

    Ciao,

    in una listbox voglio trascinare dei file selezionati dall'explorer do windows.

    ho trovato del codice in rete che funziona bene ad eccezione di un controllo:

    in pratica quando rilascio i file trascinati questi devono essere copiati nella listbox solo se il mouse e' sul componente listbox e non se è sulla restante parte della form.

    grazie

    il codice e' questo:
    codice:
    procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
    var
      i, x, cnt : integer;
      buffer, F : string;
    
    begin
      //If you only want ListBox1 to accept the files
      //if they are being dropped directly on it...
    
    
    questo e' il controllo che non mi funziona,
    quando rilascio il mouse sulla listbox questa ferifica non e' valida (false)
    se tolgo l' 'IF' i file vengono trascritti anche se li rilascio sul resto della form.
    
      if WindowFromPoint(mouse.CursorPos) = cxListBoxFileWord.Handle then
    
    
      begin
        cnt := DragQueryFile(Msg.Drop, $FFFFFFFF, nil, MAX_PATH);
        SetLength(buffer, MAX_PATH *2);
    
        for i := 0 to cnt -1 do
         begin
          x := DragQueryFile(Msg.Drop, i, nil, MAX_PATH *2);
          if (x > 0) and (x < MAX_PATH *2) then
            begin
             DragQueryFile(Msg.Drop, i, @buffer[1], x +1);
    
             F := Copy(buffer, 1, x);
             // do something with F...
             if cxListBoxFileWord.Items.IndexOf(F) < 0 then
               cxListBoxFileWord.Items.Add(F);
            end;
         end;
    
      end;
    
      DragFinish(Msg.Drop);
      Msg.Result := 0;
    end;

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    riesco ad ottenere il nome del componente sottostante tranne nel caso di un componente di terze parti (cxlistbox devexpress)....

    ora vediamo cosa mi rispondono...

    grazie comunque

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    manco l'ho letto, ma se non riesci ti basta fare un evento che controlla la posizione del cursore, e quando è sul controllo che vuoi lo flagga (es. cambia tag), e nel "drop" controlli se il componente ha tag=1

    o cose del genere

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2011
    Messaggi
    23
    Volendo puoi usare il componente jvdragdrop dove puoi indicare il componente che ti serve per l'evento. In alternativa prova a sfruttare gli eventi on mousemove o dragover dei componenti.
    Per utilizzare il jvdragdrop devi aver installato le librerie Jedi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    grazie, il problema dipendeva dal componente di terze parti....


    ho risolto cosi:

    codice:
    The FindVCLWindow method returns the TcxInnerListbox object, which does not have a name. To access the TcxListBox control, please use the following code:
    
    var
      ctrl : TWinControl;
    begin
    
     ctrl := FindVCLWindow(Mouse.CursorPos);
     if ctrl.Name = '' then
       ShowMessage(ctrl.Owner.Name);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.