[ matobj @ 13.10.2010. 09:42 ] @
Kako da dobijem path kada sam misem iznad neke mape. Dakle mapa u tom trenutku nije selektirana. Htio bi napraviti dragdrop. Dakle izaberem nekakve datoteke npr. iz jednog shelllistview-a i to zelim prebaciti u drugi.
E problem je kako sada iz tog drugog dobiti putanju kada sam iznad neke mape ili diska ..?

Ne treba biti onMouseOver - bilo koji sistem, bitno mi je da saznam putanju prije nego sto pustim datoteke na tu mapu ili disk.

[Ovu poruku je menjao matobj dana 13.10.2010. u 11:04 GMT+1]
[ Milos D @ 13.10.2010. 12:05 ] @
Treba ti OnDragOver event u kojem ćeš koristiti ListView.GetItemAt (X,Y) da bi video iznad čega je cursor.
[ matobj @ 13.10.2010. 16:16 ] @
Ma probao sam ovako nesto, ali mi ne radi :(

Code:
var
  p: TPoint;
  item: TListItem;
begin
  GetCursorPos(p);
  p := ShellList.ScreenToClient(p);
  item := ShellList.GetItemAt(p.X, p.Y);
  if item <> nil then
    Label9.Caption := item.Caption;
end;
[ Milos D @ 13.10.2010. 17:29 ] @
OnDragOver ti daje lokalne koordinate tj client X i Y, njih upotrebiš za GetItemAt (X, Y) i mora da radi.
[ matobj @ 13.10.2010. 18:15 ] @
Posto mi je to ocito malo teze za shvatit :) moze li kakav jednostavni primjer ako nije problem?

Moze i link na neki primjer - nije frka :)

Unaprijed jedno veliko hvala!
[ Milos D @ 14.10.2010. 11:46 ] @
Nemam isečak stvarnog koda, ali ovako bi trebalo da radi:

Code:

procedure Tform1.ShellListDragOver(Sender, Source: TObject; 
                         X, Y: Integer; State: TDragState; var Accept: Boolean);
var
  item: TListItem;
begin

  item := ShellList.GetItemAt(X, Y);

  if item <> nil then
    Label9.Caption := item.Caption;

  Accept := (Source = neka_kontrola_iz_koje_počinje_drag) 
                and (item<>nil) 
                and (OdabraniItemMožeBitiDropTarget(item));

end;
[ matobj @ 14.10.2010. 13:47 ] @
Na zalost to mi nije pomoglo. Ja bi htio da na ovom label9.Caption u trenutku kada mišem prelazim preko neke mape ili diska dobijem naziv te mape ili diska.
[ Milos D @ 14.10.2010. 18:11 ] @
Prilikom drag&drop, ili uvek? Ako uvek, onda umesto OnDragOver upotrebi OnMouseMove od ListView i izbaci onu poslednju naredbu koja radi Accept := jer toga naravno nema u OnMouseMove
[ matobj @ 14.10.2010. 19:30 ] @
Ne na žalost ni na onMouseMove to ne radi :( Jednostavno ne kužim ...

Code:
procedure TMainForm.ShellListMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  item: TListItem;
begin
item := ShellList.GetItemAt(X, Y);
if item <> nil then
Label9.Caption := item.Caption;
end;
[ Milos D @ 15.10.2010. 15:12 ] @
Probao sam sa obicnim TListView i radi.

Probaj trace. Startuj program, stavi cursor na neki od item-a, predji sa alt+tab u delfi, stavi breakpoint (F5) na pocetak OnMouseMove, alt+tab nazad u tvoj program (sve to bez pomeranja misa da bi strelica ostala na istom mestu) i trebalo bi da te vrati u delfi pa vidi sta se desava, da li se event uopste poziva, da li su X i Y koordinate tacne, da li nalazi item, da li je to prava labela u koju upisujes...
[ matobj @ 16.10.2010. 07:59 ] @
Daj molim te probaj sa TShellListView - taj mi je bitan i taj me zanima. Pa mi javi ako nije frka.
[ Milos D @ 16.10.2010. 11:03 ] @
Izgleda da TListItem.caption nije upotrebljiv kod te komponente, ali mozes ovako:

Code:

procedure TformMain.ShellListView1MouseMove
              (Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  item: TListItem;
  f: TShellFolder;
begin
  item := ShellListView1.GetItemAt(x, y);
  if item<>nil
     then begin
            f := ShellListView1.Folders[item.index];
            label9.Caption := f.DisplayName;
          end;
end;
[ matobj @ 16.10.2010. 12:44 ] @
To to to to to to :)
To je to - zahvaljujem na ulozenom trudu :)