[Delphi] Ako vyvolat Explorer ContextMenu?

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Zatkowich 10. 4. 2009 13:23

Zdravim,
robim aplikaciu podobnu TotalCommanderu a potrebujem na vybrany subor/y standardne menu po RClicku. Pozna niekto sposob? Google mi velmi nepomohol, mozno som zadaval zle keywords :)
Dakujem
Zatkowich
Kolemjdoucí

Odeslat příspěvekod aberez11 10. 4. 2009 14:22

dedukcia: "Tí čo s tým nemajú problémy, s tým nemajú až také problémy. Ale tí čo s tým problémy majú, s tým majú problémy.." (prednasajuci vysvetluje studentom ako sa veci maju)
aberez11
Junior
Uživatelský avatar

Odeslat příspěvekod JanFiala 11. 4. 2009 12:02

pouzivam unitu cmpStandardSystemMenu:
http://trac.xananews.techtips.com.br/br ... emMenu.pas
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar

Odeslat příspěvekod Zatkowich 12. 4. 2009 11:03

Dakujem za odpovede, ale asi som sa zle vyjadril. Ja potrebujem to menu, ktore sa zobrazi po RClicku v Exploreri na subor, cize [open, explore, search...]. Odhadol by som, ze existuje nejaka WinAPI funkcia, ale nejak sa mi k nej nepodarilo dostat.
Zatkowich
Kolemjdoucí

Odeslat příspěvekod aberez11 12. 4. 2009 13:08

takto- ten link opravujem lebo som tam hodil ako sa divam cosi ine :-) > http://www.vclcomponents.com/Delphi/Fil ... -info.html . je to normalna free vcl komponenta ktora vie (teda asi by mala vediet :-) ) vyvolat aj to kontextove menu( len si asi odchytis ten rightclick( http://www.festra.com/wwwboard/messages/12909.html ) a zavolas jej nejaku procedurku ) + ma aj nejake dalsie funkcie pouzitelne u toho tvojho tcommanderu ( http://www.arisesoft.com/shellpack/ ). len neviem ako to bude frcat pod vistou
dedukcia: "Tí čo s tým nemajú problémy, s tým nemajú až také problémy. Ale tí čo s tým problémy majú, s tým majú problémy.." (prednasajuci vysvetluje studentom ako sa veci maju)
aberez11
Junior
Uživatelský avatar

Odeslat příspěvekod Zatkowich 12. 4. 2009 13:20

Vyborne! Viem, ze tak posobim, ale az taka lama nie som, ten RClick nemusel byt :) Ale za ostatne dakujem pekne.
Zatkowich
Kolemjdoucí

Odeslat příspěvekod aberez11 12. 4. 2009 19:39

preco ze lama ja by som totalcommander spravit nevedel
dedukcia: "Tí čo s tým nemajú problémy, s tým nemajú až také problémy. Ale tí čo s tým problémy majú, s tým majú problémy.." (prednasajuci vysvetluje studentom ako sa veci maju)
aberez11
Junior
Uživatelský avatar

Odeslat příspěvekod JanFiala 12. 4. 2009 20:07

Zatkowich píše:Dakujem za odpovede, ale asi som sa zle vyjadril. Ja potrebujem to menu, ktore sa zobrazi po RClicku v Exploreri na subor, cize [open, explore, search...]. Odhadol by som, ze existuje nejaka WinAPI funkcia, ale nejak sa mi k nej nepodarilo dostat.



A presne tohle dela i ta unita, na kterou jsem ti daval odkaz. Staci zavolat prislusnou funkci.
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar

Odeslat příspěvekod Zatkowich 12. 4. 2009 22:10

Aberez11 - ved to ani TCM nebude, len nejaky jeho menej, asi o dost, funkcny klon :) Nie je to ani tak tazke, ako by sa mohlo zdat, nemas tam poriadne ani ako pouzit triedy.

JanFiala - potom sa bud nechapeme, ten link je spatny alebo som lama uplna :) Lebo taku funkciu tam nevidim, kde by sa zadaval napriklad len nazov suboru. Tamto vsetko vyzera byt na nejake konkretne okno.

Ale k teme - dostal som sa k tomu, ze staci v Delphi zavolat funkciu InvokeContextMenu, ktora ma jeden z parametrov triedu TShellFolder. Toto vsetko sa nachadza v unite Delphi\Demos\ShellControls\ShellCtrls.pas. Je tam aj definovana tato trieda, s konstruktorom:
constructor TShellFolder.Create(AParent: TShellFolder; ID: PItemIDList; SF: IShellFolder);,
co sa mi zda ako trochu problem. Ja totiz nemam ShellListView, ktory ma funkciu Selected:TShellFolder, ale len ListView. Ako teda spravit z polozky mojho ListViewu, cize [meno, pripona, datum, velkost, atributy] objekt tamtej triedy? Som z toho trochu blbec.
Zatkowich
Kolemjdoucí

Odeslat příspěvekod JanFiala 13. 4. 2009 11:51

Moc se omlouvam.
Unita, o ktere jsem chtel psat je ItemProp
http://read.pudn.com/downloads40/source ... .pas__.htm

Implementace je velmi jednoducha:
1. pridas unitu do Uses
2. na udalost OnContextPopup zavolas:
Kód: Vybrat vše
    ItemProp.DisplayContextMenu(jmeno_souboru, Application.Handle, Mouse.CursorPos, False, False);
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar

Odeslat příspěvekod Zatkowich 13. 4. 2009 12:37

Tak som to vyskusal, ale dostavam [Error] spravca.pas(1101): There is no overloaded version of 'DisplayContextMenu' that can be called with these arguments. Pouzil som to presne podla navodu, aj s ItemProp. pred volanim:

Kód: Vybrat vše
procedure TForm1.ListViewLMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Name: String;
begin
  if Button = mbRight then
  begin
    Name := ListViewL.Selected.Caption + '.' + ListViewL.Selected.SubItems[0];
    ItemProp.DisplayContextMenu(Name, Application.Handle, Mouse.CursorPos, False, False);
  end;
end;
Zatkowich
Kolemjdoucí

Odeslat příspěvekod JanFiala 13. 4. 2009 17:40

Zkousel jsi se divat, proc ti to nejde? na kterem radku v kodu se ti to zastavi?

Zrejme budes mit problem s tim, ze neni definovana promenna:
DFS_COMPILER_4_UP
ta je deklarovana v souboru DFS.INC. Otazkou je, zda je v tom souboru obsazena verze Delphi, kterou mas.
Vyresit docasne to muses deklaraci promenne natvrdo na zacatku unity pod include s DFS.INC:
{$DEFINE DFS_COMPILER_4_UP}

A deklarovat si promennou Name, kdyz Name je property, kterou obsahuje kazdy objekt ti zpusobi spoustu problemu...
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar

Odeslat příspěvekod Zatkowich 18. 4. 2009 08:48

S tym to nejde ani skompilovat, cize nie je tam ani runtime error.
Skusal som vselico, ale stale to nejde :( Ani s deklarovanim premennej. Mozno je problem v tom, ze mam Delphi 7 Personal. Chcem prejst na Turbo, ale stale mi to nejak nevyda :)
Zatkowich
Kolemjdoucí

Odeslat příspěvekod JanFiala 18. 4. 2009 09:29

Pokud to nejde zkompilovat, neco to hlasi. Co to konkretne hlasi?
Zkousel jsi krokovat program, jak jsem radil, abys vedel, do ktere vetve ti program jde? pri kompilaci vidis puntiky u kodu, ktery se zkompiluje, kdyz uz jsi to krokovani nepouzil.
Pises: "skusal som vselico"
Zrejme si myslis, ze jsme jasnovidci, vid?
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar

Odeslat příspěvekod Zatkowich 18. 4. 2009 09:52

Sorry, tym vselicim som myslel to, co si mi radil :)
Samozrejme, ze nie ste jasnovidci, ale riadok, na ktorom sa mi to zastavi, resp. hlasenie som pisal o 2 moje prispevky vyssie, a to:
[Error] spravca.pas(1101): There is no overloaded version of 'DisplayContextMenu' that can be called with these arguments - toto je na riadku ItemProp.DisplayContextMenu(Name, Application.Handle, Mouse.CursorPos, False, False); z mnou uvedenej procedury OnMouseDown.
Ale ta otazka stale plati: nemoze byt chyba v tom, ze mam stare Delphi? Spominany subor som tusim ani nenasiel na disku.
Zatkowich
Kolemjdoucí

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků