Dynamiczne Menu

Odpowiedz Nowy wątek
titanus
2004-09-06 03:41
titanus
0

Pytanie chyba dość proste: ale dla mnie ważne:
jest plik txt w zawierający takie struktury:

-----{delimiter}------
begin
[spacja lub pusta linia]
end;
-----{delimiter}------
Program
[to samo co wyżej]
begin
[luuuuuuz]
end;
-----{delimiter}-----
itd,itd...
teraz chcę to przekonwertować na dynamicznie tworzone menu tekstowe kopiowane z linii bedących bezpośrednio pod deimiterem i wrzucanych na komponent TAcionToolBar przy starcie aplikacji. Rzutowanie poprzez ActionMenager'a mi nie idzie, a zależy mi właśnie na dynamice.
Potem oczywiście "dorobić" obsługę zdarzenia z zależności od "klikniętej" pozycji w tak spreparowanym Menu - np w takim formacie:

function ActionToolBar.onClick:string;

begin
Result:=ActionToolBar.Action.SelectItem[Select.Index].Caption;
end;

Potem tylko wywołać jakąś funkcyjkę z tak przekazanym parameterm i wstawić z tego pliku odpowiedni fragment np. na RichEdita.

Chodzi mi tu jedynie o to jak stworzyć takie menu? Od czego zacząć ??

pozdr - titanus.

Pozostało 580 znaków

2004-09-06 10:35

Rejestracja: 17 lat temu

Ostatnio: 4 lata temu

0

Hmm - czegoś nie rozumiem - w pliku masz co zapisane? .. elementy menu ? - jeśli tak to otwierasz przez AssignFile(), później Reset(), i jedziesz po wierszach Readln(plik, string) - i od razu tworzysz elementy takie jak "string"...


Pozostało 580 znaków

titanus
2004-09-06 13:54
titanus
0

...fakt moja wina, że nie sprecyzowałem konkretnie.
Plik tekstowy wpomniany wcześniej zawiera strukturę która nie jest zapisem dla komponentów menu (nie ma ustawionej - jako nazwy - właściwości w ActionManager.FileName ani w tej samej właściwości dla ActionToolBar'a: oba pola puste). Plik tekstowy odzwierciedla jedynie struktury jakie (w trakcie działania programu) chcę wstawić do SynEdita. Problem polega - dla mnie - na pobraniu nagłówków tych struktur i na tej podstawie stworzenie dynamicznego menu.
Idea polega na:

Krok1.

{...}

var tab  : array of string;
      licz  : integer;
      linia : string;

const delimiter : string = '-------{delimiter}--------';

{...}

Assign(zm_plikowa,NazwaPliku);
Reset(zm_plikowa);
licz :=0;
while Not EoF (zm_plikowa) do
 begin
 //tworzymy tablice nagłówków z pliku
   SetLength(tab,licz+1);
   Readln(zm_plikowa,linia);
   if linia=delimiter 
      then begin
               // czytamy naglowek
               Readln(zm_plikowa,tab[licz]);
               // to do pozniejszej identyfikacji gdzie bylismy
               tab[licz]:=tab[licz]+' '+IntToStr(licz); 
               inc(licz,1);
              end
       else inc(licz,1); 
  end;
CloseFile(zm_plikowa);

Krok 2.

Na podst stworzonej tablicy chce wlasnie utworzyc - dynamicznie - menu na ActionToolBarze (najlepiej przez rekurencje - gdyby sie dalo).

cos w stylu:

{...}

var myAction  : TAction; 

{...}

for licz:=0 to Length(tab) do
 begin
   myAction.Caption:=tab[licz];
   myAction.Name:=tab[licz];
   myAction.Create(MyAction.onExecute); //to tylko przyklad!
  {...i inne instrukcje tworzące strukture akcji}

   TActionToolBar.Bars[0].Item.Add(myAction);

..i potem na tej podstawie już tylko wywołanie onClick, onEnter
//albo co sie kompu podoba
dla ActionToolBar'a i obsluge wywołanej metody przez sprawdzenie ID akcji lub Nazwy w np. takim formacie:

var myAction : TAction;                        //to juz tylko
{...}                                                    //"wolna amerykanka"
procedure Form1.myActionExecute(.....)
begin
  ...
  //tu w zaleznoscti od pobranego ID i odczytaniu z Captiona nr linii
  // otwieramy plik tekstowy i przekazując przez lokalną zmienną
  // wczytujemy odpowiednie linie do SynEdita

Pytanie zatem pozostaje - dla amnie - otwarte: da się wykombinować taką strukturę kodu coby zadziałała ???

Pozostało 580 znaków

Odpowiedz

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