Dynamiczne Menu - jak rozpoznać ...

Dynamiczne Menu - jak rozpoznać ...
AB
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 lat
0

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

Tworze sobie dynamicznie belkę menu :

Kopiuj
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).

Adam.Pilorz
  • Rejestracja:prawie 22 lata
  • Ostatnio:ponad 14 lat
  • Postów:2998
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.


Grunt to uziemienie...
AB
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 lat
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.

Adam.Pilorz
  • Rejestracja:prawie 22 lata
  • Ostatnio:ponad 14 lat
  • Postów:2998
0

Przykład:

Kopiuj
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.


Grunt to uziemienie...
AB
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 lat
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.

Adam.Pilorz
  • Rejestracja:prawie 22 lata
  • Ostatnio:ponad 14 lat
  • Postów:2998
0

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


Grunt to uziemienie...
AB
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 lat
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.