Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Ausführen, was im Menü steht, aber das zuvor ausgelesen wurd


91KEY8 - Sa 24.03.07 16:44
Titel: Ausführen, was im Menü steht, aber das zuvor ausgelesen wurd
Das Problem: Ich möchte, dass wenn man auf einen Menüpunkt klickt, der Text ausgeführt wird, der da steht. Ich lese den Text aus einer *.dat Datei aus.
Folgendes hab ich schon, aber damit wird immer nur der Letzte Punkt gestartet.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var sl: TStringList;
  zeilennr: integer;
   mi2: string;
begin
begin
  sl:=TStringList.Create; 
    try
    sl.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'mein_menü.dat');
    for zeilennr:=0 to sl.Count-1 do begin
     mi2:=sl.Strings[zeilennr];
    end;
  finally
    sl.free; 
  end;
   end;
ShellExecute(Application.Handle,
                 'open',
                 PChar(mi2),
                 NilNil, SW_NORMAL)


Wie kann ich es machen, dass das gestartet wird, was da steht.

So hab ich zuvor die Menüpunkte eingelesen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var sl: TStringList;
  zeilennr: integer;
   mi: TMenuItem;
begin
  sl:=TStringList.Create; //Objekt erzeugen
    try
    sl.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'mein_menü.dat');
    for zeilennr:=0 to sl.Count-1 do begin
     mi := NewItem(sl.Strings[zeilennr], 0, False, True, startemein, 0'');
     ools1.Add(mi);
    end;
  finally
    sl.free; //Objekt wieder freigeben
  end;
   end;



mfg 91KEY8


Blawen - Sa 24.03.07 18:22
Titel: Re: Ausführen, was im Menü steht, aber das zuvor ausgelesen wurd
user profile icon91KEY8 hat folgendes geschrieben:
Das Problem: Ich möchte, dass wenn man auf einen Menüpunkt klickt, der Text ausgeführt wird, der da steht. Ich lese den Text aus einer *.dat Datei aus.
Irgendwie verstehe ich Deine Frage nicht ganz. So nebenbei wird es nicht reichen nur den Beschriftungstext einzulesen, irgendwie musst Du ja auch deklarieren, was genau ausgeführt werden soll.


91KEY8 - Sa 24.03.07 21:36
Titel: Re: Ausführen, was im Menü steht, aber das zuvor ausgelesen wurd
user profile iconBlawen hat folgendes geschrieben:
user profile icon91KEY8 hat folgendes geschrieben:
Das Problem: Ich möchte, dass wenn man auf einen Menüpunkt klickt, der Text ausgeführt wird, der da steht. Ich lese den Text aus einer *.dat Datei aus.
Irgendwie verstehe ich Deine Frage nicht ganz. So nebenbei wird es nicht reichen nur den Beschriftungstext einzulesen, irgendwie musst Du ja auch deklarieren, was genau ausgeführt werden soll.


Wie deklariere ich das??


91KEY8 - Fr 30.03.07 21:10

Kann mir niemand helfen??

mfg 91KEY8


JayEff - Fr 30.03.07 23:27
Titel: Re: Ausführen, was im Menü steht, aber das zuvor ausgelesen wurd
user profile iconBlawen hat folgendes geschrieben:
user profile icon91KEY8 hat folgendes geschrieben:
Das Problem: Ich möchte, dass wenn man auf einen Menüpunkt klickt, der Text ausgeführt wird, der da steht. Ich lese den Text aus einer *.dat Datei aus.
Irgendwie verstehe ich Deine Frage nicht ganz. So nebenbei wird es nicht reichen nur den Beschriftungstext einzulesen, irgendwie musst Du ja auch deklarieren, was genau ausgeführt werden soll.

Klar, wir helfen immer, aber ... HÄ? Du willst einen "Text ausführen" ... Soweit ich weiß, müssen Texte nicht Gassi gehn :lol:
Nein, Spaß bei Seite. Meinst du, du hast einen Menüpunkt der "Hallo" heißt, und der soll mit der Prozedur "Hallo;" verbunden werden, oder willst du .. äh .. Sorry, ich versteh wirklich kein bisschen, was du meinst... :(


raiguen - Sa 31.03.07 00:47

Och... ist doch nicht schwer zu erkennen, was 91KEY8 möchte ;) :
Beispiel: auf dem MenuItem steht als Caption (oder wie 91KEY8 es ausdrückt: Text) SOKOBAN.EXE; bei Klick auf dieses MEnuItem möchte er nun das Spiel SOKOBAN starten...

user profile iconBlawen hat folgendes geschrieben:
... irgendwie musst Du ja auch deklarieren, was genau ausgeführt werden soll.

Das hat er ja auch gemacht mit dem Parameter startemein:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
    mi := NewItem(sl.Strings[zeilennr], // Caption
                   0,                   // ShortCut
                   False,               // Checked 
                   True,                // Enabled
                   0,                   // HilfeContext-ID
                   startemein,          // OnClick-Prozedure 
                   'mi'+IntToStr(Zeilennr); // Name, auf den programmseitig zugegriffen werden kann

So, nun noch das OnClick-Ereignis:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure startemein(Sender: TObject);
var  MenuText: STring;
begin
  //-- Caption(=Menutext) des angeklickten MenuItems holen
  MenuText := TMenuItem(Sender).Caption; 
  //--ausführen
  ShellExecute(Application.Handle,
                 'open',
                 PChar(MenuText),
                 NilNil, SW_NORMAL);
end;

So sollte es prinzipiell funktioneren...
Guts Nächtle


91KEY8 - So 01.04.07 18:48

user profile iconraiguen hat folgendes geschrieben:
Och... ist doch nicht schwer zu erkennen, was 91KEY8 möchte ;) :
Beispiel: auf dem MenuItem steht als Caption (oder wie 91KEY8 es ausdrückt: Text) SOKOBAN.EXE; bei Klick auf dieses MEnuItem möchte er nun das Spiel SOKOBAN starten...

user profile iconBlawen hat folgendes geschrieben:
... irgendwie musst Du ja auch deklarieren, was genau ausgeführt werden soll.

Das hat er ja auch gemacht mit dem Parameter startemein:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
    mi := NewItem(sl.Strings[zeilennr], // Caption
                   0,                   // ShortCut
                   False,               // Checked 
                   True,                // Enabled
                   0,                   // HilfeContext-ID
                   startemein,          // OnClick-Prozedure 
                   'mi'+IntToStr(Zeilennr); // Name, auf den programmseitig zugegriffen werden kann

So, nun noch das OnClick-Ereignis:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure startemein(Sender: TObject);
var  MenuText: STring;
begin
  //-- Caption(=Menutext) des angeklickten MenuItems holen
  MenuText := TMenuItem(Sender).Caption; 
  //--ausführen
  ShellExecute(Application.Handle,
                 'open',
                 PChar(MenuText),
                 NilNil, SW_NORMAL);
end;

So sollte es prinzipiell funktioneren...
Guts Nächtle


Vielen Dank raiguen!

mfg 91KEY8