Announcement

Collapse
No announcement yet.

popupmenu

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • popupmenu

    hi leute....

    ich habe folgendes problem und hoffe, hier hilfe zu finden...

    bei programmstart lese ich eine textdatei aus und lasse die einträge ins popupmenu schreiben...

    Code:
            for z:=0 to Memo1.Lines.Count-1 do
            begin
              neuereintrag:=TMenuItem.Create(PopupMenu1);
              with neuereintrag do
              begin
                Name:='Programm'+IntToStr(z+1);
                Caption:=StrSplit(Memo1.Lines.Strings[z],';',1);
                onClick:=Programm;
                PopupMenu1.Items.Add(neuereintrag);
              end;
            end;
    in der procedure Programm steht folgendes...
    Code:
    procedure TForm1.Programm(Sender: TObject);
    begin
            ShellExecute(0,nil,PChar(StrSplit(Memo1.Lines.Strings[PopupMenu1],';',2)),nil,nil,SW_SHOW);
    end;
    bei diesem ablauf will ich auf den eben geklickten eintrag (z.B: 2. eintrag) zugreifen und dann entsprechend aus dem memo die zeile auslesen...nur leider klappt das irgendwie nicht...

    wie kann ich also den aktuell geklickten eintrag des popups auslesen, so das ich einen integer wert erhalte?

    danke schon jetzt für eure bemühungen...

    mfg
    ice
    Zuletzt editiert von ice; 24.01.2007, 21:34.

  • #2
    Hallo ice,

    hier ein Vorschlag:

    if TMenuItem(Sender).Name = 'MIxxx' then begin
    //....
    end;

    Gruss
    Reinhold Pichle

    Comment


    • #3
      Hallo,

      wie wärs hiermit:

      str := TComponent(Sender).Name;

      ShellExecute(0,nil,PChar(StrSplit(Memo1.Lines.Stri ngs[RightStr(str, Length(str) - 8)],';',2)),nil,nil,SW_SHOW)

      Du kannst natürlich auch auf tMenuItem casten und die Caption benutzen oder den Namen gleich mit dem vollen Programmnamen belegen.

      Was ist denn strsplit?

      Grüße

      Juli

      Comment


      • #4
        Hi,

        es bietet sich das Tag an:
        <CODE>
        for z := 0 to Memo1.Lines.Count - 1 do
        begin
        neuereintrag := TMenuItem.Create(Self);
        with neuereintrag do
        begin
        Name := 'Programm'+IntToStr(z+1);
        Tag := z;
        Caption := StrSplit(Memo1.Lines.Strings[z], ';', 1);
        onClick := Programm;
        PopupMenu1.Items.Add(neuereintrag);
        end;
        end;
        </CODE>
        Dann sollte es so funktionieren:
        <CODE>
        ShellExecute(0,nil,PChar(StrSplit(Memo1.Lines.Stri ngs(TMenuItem(Sender).Tag),';',2)),nil,nil,SW_SHOW );
        </CODE>

        Fran

        Comment


        • #5
          hi julia,

          strsplit ist ein funktion, um eine stringkette nach bestimmten voraussetzungen zu teilen

          Beispiel:
          eine textdatei hat fogenden inhalt

          1;Thomas;Münzer;Turmstr. 1;98765 Teststadt;
          2;Maik;Spiegel,Wasserstr. 20;52846 Beispielhausen;

          nun kann man z.B. die daten in ein stringgrid einlesen...
          Code:
          procedure TForm1.Button1Click(Sender: TObject);
          var
            s,z: Integer;
          begin
                  with Memo1.Lines do
                  begin
                    Clear;
                    LoadFromFile('C:\test.txt');
                    for z:=0 to Count-1 do
                      for s:=0 to 4 do
                        StringGrid1.Cells[s,z+1]:=StrSplit(Strings[z],';',s);
                  end;
          end;
          das semikolon ist der sogenannte trenner...wählst du einen anderen...z.B. bindestrich...dann muß der halt da rein...
          wichtig beim speichern ins memo ist nur, dass am ende auch ein trenner steht...

          diese funktion mußte dafür einbinden:
          Code:
          function StrSplit(const Datensatz: String;const Trennzeichen: String;Spalte: Integer): String;
          var
            LC,LN,LSL,LDL,LS,LE: Integer;
          begin  
                  LC:=1;
                  LN:=0;
                  if Spalte=0 then
                    LS:=1
                  else  
                    LS:=0;
                  LE:=0;
                  result:='';  
                  LSL:=length(Datensatz);
                  LDL:=length(Trennzeichen);
                  while(LC<=LSL)and(LE=0)do
                  begin  
                    if copy(Datensatz,LC,LDL)=Trennzeichen then
                    begin  
                      inc(Ln);
                      if LN>=Spalte then
                      begin  
                        if LS=0 then
                           LS:=LC+LDL
                        else  
                        begin  
                           LE:=LC;
                           result:=copy(Datensatz,LS,LE-LS);
                        end;  
                      end;  
                      LC:=LC+LDL;
                    end  
                    else  
                      inc(LC);
                  end;  
                  if(LS>0)and(LE=0)then
                    result:=copy(Datensatz,LS,LSL-LS+1);
          end;
          Zuletzt editiert von ice; 24.01.2007, 21:38.

          Comment

          Working...
          X