Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Ein Windows ShellMenu für eine Datei erscheinen lassen

  Alt 25. Aug 2008, 21:02
Hallo Luckie.

Vielen Dank für deine Hilfe! Bei diesen API-Funktionen habe ich das große Problem, dass ich die Schlagwörter (ContextMenuHandler, ShellMenu, etc.) nicht weiß bzw. diese in anderen Problematiken quasi identisch sind (Beispiel: ShellMenu).

Die benötigte Funktion SHGetIDListFromPath() ist übrigens hier zu finden: http://www.delphipraxis.net/internal...=121338#121338 .

Hier mein Code:

Delphi-Quellcode:
procedure TMainForm.database_list_mousedown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  tmp: string;
begin
  if (Button = mbRight) and (database_list.SelCount > 0) then
  begin
    tmp := GetDownloadDirectory + database_list.Selected.Caption;
    if FileExists(tmp) then
    begin
      // The left border as well as the title line of the ListView is not included
      // in the X and Y parameter, so we have to add X+6 and Y+32... :-/

      ContextMenuForFile(tmp, MainForm.Left + database_list.Left + X + 6,
                              MainForm.Top + database_list.Top + Y + 32,
                              Application.Handle);
    end;
  end;
end;
Ich hab nur noch so ein seltsames Problem: Die X und Y Angaben sind abzüglich der Titelzeile und abzüglich des linken Randes der TSortListView (TListView), weswegen ich hier die Zahlen 6 und 32 "hard-coden" musste (Lösung?)

Ich bin erstaunt darüber, dass sich sofort auch mein sekundäres Problem von selbst gelöst hat - ich wollte nämlich die "Umbenennen"-Funktion deaktivieren bzw. zumindestens behandeln (Datenbankeintrag, der zu der Datei gehört, mit umbenennen). Das Shell-Menu hat den "Umbenennen"-Eintrag nicht Naja, man kann trotzdem die Datei löschen oder über den Eigenschafts-Dialog die Datei umbenennen. Ich muss mich da noch um ein Shell-Notify (?) für Änderungsereignisse des Zielordners beschäftigen.

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat