Ja, genau das meine ich. Wenn du die Dateiendung entfernst, wie willst du ein Programm dann starten? Schließlich ist die Endung ja irgendwo wichtig, damit Windows weiß, was es machen soll, wenn du "ShellExecute" aufrufst. Eine Möglichkeit gibt´s aber trotzdem, so dass du im Menü zwar keine Dateiendungen hast, der Start aber trotzdem klappt. Basierend auf dem Code von oben folgende Änderung:
<PRE>
else if((ds.Name <> '.') and (ds.Name <> '..')) then
begin
mii := TMenuItem.Create(parentmi);
mii.Caption := <font color=#ff0000>ChangeFileExt(ds.Name,'');</font>
<font color=#ff0000">mii.Hint := pfad + ds.Name;</font>
mii.OnClick := OnMIClick;
parentmi.Add(mii);
end;
</PRE>
<b>ACHTUNG</b>: aus irgendeinem Grund verschwinden in meinem Code die zwei Anführungszeichen nach dem Komma. Korrekt wäre <b>ChangeFileExt(ds.Name,'')</b>. Merkwürdig |
Und dazu die folgende neue Prozedur:
<PRE>
procedure TForm1.OnMIClick(Sender: TObject);
var
Text : string;
begin
Text := (Sender as TMenuItem).Hint; ShowMessage(Text);
end;
</PRE>
Folgendes passiert: Die "Caption" speichert den Dateinamen <u>ohne</u> Endung, gleichzeitig wird aber im "Hint" der komplette Name inkl. Endung gesichert. Außerdem wird dem Ereignis "OnClick" die Prozedur "OnMIClick" zugewiesen, damit auch was passiert. Und in der Prozedur wird der Hint abgefragt und angezeigt. Anstelle der Dialogbox könntest du hier die "ShellExecute"-Anweisung einbauen, so dass die gewählte Datei letztlich gestartet wird.
Gruß,
Mathias
<PRE>
else if((ds.Name <> '.') and (ds.Name <> '..')) then
begin
mii := TMenuItem.Create(parentmi);
mii.Caption := <font color=#ff0000>ChangeFileExt(ds.Name,'');</font>
<font color=#ff0000">mii.Hint := pfad + ds.Name;</font>
mii.OnClick := OnMIClick;
parentmi.Add(mii);
end;
</PRE>
<b>ACHTUNG</b>: aus irgendeinem Grund verschwinden in meinem Code die zwei Anführungszeichen nach dem Komma. Korrekt wäre <b>ChangeFileExt(ds.Name,'')</b>. Merkwürdig |
Und dazu die folgende neue Prozedur:
<PRE>
procedure TForm1.OnMIClick(Sender: TObject);
var
Text : string;
begin
Text := (Sender as TMenuItem).Hint; ShowMessage(Text);
end;
</PRE>
Folgendes passiert: Die "Caption" speichert den Dateinamen <u>ohne</u> Endung, gleichzeitig wird aber im "Hint" der komplette Name inkl. Endung gesichert. Außerdem wird dem Ereignis "OnClick" die Prozedur "OnMIClick" zugewiesen, damit auch was passiert. Und in der Prozedur wird der Hint abgefragt und angezeigt. Anstelle der Dialogbox könntest du hier die "ShellExecute"-Anweisung einbauen, so dass die gewählte Datei letztlich gestartet wird.
Gruß,
Mathias
Comment