Dynamiczne Menu - jak rozpoznać ...

0

Pytanie to : jak rozpoznać , który został wybrany items (qwer) po kliknięciu???

Tworze sobie dynamicznie belkę menu :

type
 wybierz = record
     menu : TmenuItem;
     nazwa : String;
   end;

var
inter : array[1..128] of wybierz;
internet:byte;
Konfiguracja:textfile;
...



procedure TForm1.FormCreate(Sender: TObject);
var
  i,www:word;
  sr:Tsearchrec;
Begin
 if FindFirst(ExtractFileDir(Application.ExeName)+'\internet.txt', faAnyFile, sr)=0 then
  begin
    assignfile(konfiguracja,(ExtractFileDir(Application.ExeName)+'\cenniki\internet.txt'));
    reset(konfiguracja);
    internet:=0;
    while not Eof(konfiguracja) do
      begin
        internet:=internet+1;
        readln(konfiguracja,nazwa);
        if internet<129 then
        begin
          inter[internet].nazwa:=nazwa;
          inter[internet].menu:=TMenuItem.Create(Self);
          if (internet=33) then inter[internet].menu.Break:=mbBarBreak;
          if (internet=65) then inter[internet].menu.Break:=mbBarBreak;
          if (internet=97) then inter[internet].menu.Break:=mbBarBreak;
          www:=0;
          for i:=1 to length(nazwa) do if nazwa[i]='\' then www:=i;
          if www>0 then delete(nazwa,1,www);

          inter[internet].menu.Caption:=nazwa;
          inter[internet].menu.OnClick:=Internet1Click;
          inter[internet].menu.Tag:=internet;
          MainMenu1.Items[1].Add(inter[internet].menu);
        end;
      end;
    closefile(konfiguracja);
  end
  else
  begin
   inter[1].menu:=TMenuItem.Create(Self);
   inter[1].menu.Caption:='Brak pliku : INTERNET.TXT';
   MainMenu1.Items[6].Add(inter[1].menu);
  end;
  FindClose(sr);
  if internet>128 then internet:=128;
end;

procedure TForm1.Internet1Click(Sender: TObject);
var
qwer:byte;
begin
   ShellExecute(Handle,'open',Pchar(inter[qwer].nazwa),nil,nil,SW_SHOWNORMAL);
end;

Z góry dzięki dla życzliwych (D4).

0

Jeśli dobrze zrozumiałem, to możesz zrobić to za pomocą Sender'a. Sender w tym przypadku, to MenuItem, którego kliknąłeś. Czyli odwołując się na przykład do (Sender as TMenuItem).Caption otrzymujesz string'a odpowiadającego nazwie (tego, co widzisz przy uruchomionym programie) danej opcji.

0

Czyli odwołując się na przykład do (Sender as TMenuItem).Caption otrzymujesz string'a odpowiadającego nazwie (tego, co widzisz przy uruchomionym programie) danej opcji

Wiesz Adamie nie zabardzo rozumiem jak miałbym to zrobić.
Czy mógłbyś podać jakiś przykład który by mi pokazał (.Caption) wybranego przeze mnie itema ???

Z góry dzięki.

0

Przykład:

procedure Form1.MenuItemClick(Sender: TObject);
begin
  ShowMessage('Kliknąłeś na element menu o nazwie '+(Sender as TMenuItem).Caption+'.');
  end;

Przykład pokazuje okienko z nazwą elementu menu.

0

Dzięki bardzo !!!
Będzie mi to bardzo przydatne.

Jeszcze jedno pytanie a można wyciągnąć który został wybrany z listy czyli nr ???
Np. że wybrałeś z listy 128 (count) nr 18 ???
Z góry dzięki.

0

Oczywiście, używasz (Sender as TMenuItem).MenuIndex (uwaga: liczone od 0, nie od 1).

0

Oczywiście, używasz (Sender as TMenuItem).MenuIndex (uwaga: liczone od 0, nie od 1).

Dzięki bardzo mam nadzieję , że zadziała to w Delphi 4.(ale to w domku)
Przetestowane działa idealnie ...

Pozdrawiam bardzo serdecznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1