Projektowanie menu
Ka┐dy wie co to jest menu, ale czy ka┐dy wie wiedzieµ jak je
zaprojektowaµ? Ostatnio menu jest do╢µ czΩsto u┐ywane w programach
zw│aszcza, gdy piszemy jaki╢ edytor czego╢ :). Najlepiej, jak wiecie,
zrobiµ program, kt≤ry bΩdzie wygl▒da│ i dzia│a│ tak samo jak inne
programy. To czemu nasze menu ma byµ inne? W tym tek╢cie opiszΩ jak
zaprojektowaµ menu, ale nie tylko projektowanie krok po kroku od pocz▒tku,
ale te┐ jak np.: oddzieliµ pozycjΩ w menu od innych (tak▒ kresk▒
;)).
Na pocz▒tek uruchamiamy Delphi (tak, tak... kliknij na ten przycisk
Start...). Robimy nowy program lub otwieramy ten, w kt≤rym chcemy zrobiµ
menu. Wstawiamy obiekt TMainMenu i klikamy na niego podw≤jnie, ┐eby w│▒czyµ
edytor naszego menu (lub w Object Inspektorze klikamy na Items). W
Object Inspektorze pojawiaj▒ siΩ w│a╢ciwo╢ci menu. »eby stworzyµ
nowe menu rozwijane w w│a╢ciwo╢µ Caption wpisujemy np.: Plik. Tak
stworzyli╢my nowe menu. Po prawej stronie pojawia siΩ miejsce na nowe
menu, ale nas na razie interesuj▒ pozycje w menu Plik. WiΩc klikamy na
Plik (dalej w Edytorze Menu). Rozwinie siΩ nam poni┐ej zawarto╢µ
tego menu. Jak na razie jest puste (ale ju┐ tylko przez chwilkΩ...).
Wybieramy pierwsz▒ woln▒ (i jedyn▒) pozycjΩ. Tutaj tak samo jak w
tworzeniu Menu, ┐eby utworzyµ now▒ pozycjΩ musimy wpisaµ albo text
do wy╢wietlenia, albo nawΩ pozycji (jΩsli wpiszesz nazwΩ to nasza
pozycja bΩdzie bez textu, natomiast jak wpiszesz do Caption to nazwa
zostanie automatycznbie utworzona. Zazwyczaj jest to, to samo co text
pozycji tyliko, ┐e z pominieniem polskich font≤w i na ko±cu jest
dodawana cyfra). My na razie wpisujemy tam Nowy. Po wpisaniu i klikniΩciu
Enter pojawi siΩ nowa i utworzona przez nas pozycja z textem Nowy i
pusta pozycja pod ni▒. Spoko jej nie bΩdzie je╢li nie podasz jej
nazwy lub w│a╢ciwo╢ci Caption. Teraz utw≤rz pozycje: Otw≤rz i
Zapisz. Przyda│oby siΩ teraz zrobic pozycjΩ Wyj╢cie, ale najpierw
kliknij na menu w Delphi (File) i zobacz, gdzie znajduje siΩ pozycja
Exit. Na ko±cu, prawda (te┐ mi odkrycie), ale przed ni▒ jest
jeszcze... taka kreska! My te┐ j▒ zrobimy, ┐aden problem. Kliknij na
ostatni▒ woln▒ pozycjΩ w Menu i w Caption wpisz: - (my╢lnik lub jak
kto woli znak odj▒µ). Naci╢nij Enter. Co widzisz? Powsta│a ta
kreseczka (tzw. seperator), a pod ni▒ znowu puste miejsce! I w│a╢nie
tam wpisz Wyj╢cie. Nasze menu zaczyna przybieraµ jakie╢ kszta│ty,
ale ┐eby jeszcze czego╢ Was nauczyµ zrobimy co╢ takiego: gdy kto╢
kliknie na Nowy rozwinie siΩ mu menu obok. Pewnie teraz szukasz pozycji
w Object Inspektorze lub w kodzie, ale tam nic nie znajdziesz.... ┐eby
utworzyµ takie menu od pozycji Nowy musimy: klikn▒µ na pozycjΩ Nowy
(oczywi╢cie dalej w Edytorze) i teraz klikn▒µ prawym klawiszem
(klawiatury :)) myszki na pozycjΩ Nowy. Poika┐e siΩ nam menu, a z
niego musimy wybraµ "Create Submenu". I teraz widzimy jak
obok naszego "Nowy" pojawia siΩ strza│ka i nowy pasek
rozwijania. Teraz tak samo musimy utworzyµ nowe pozycje. Za│≤┐my, ┐e
bed▒ one takie: Plik txt i Plik BMP (nie przyszed│ mi do g│owy ┐aden
inny przyk│ad). Wszystko gra. Jednak jak wiemy niekt≤rzy wol▒ u┐ywµ
skr≤t≤w z klawiatury. WiΩc, kliknijmy na kt≤r▒╢ pozycjΩ w naszym
menu i w Object Inspektorze znajd╝my w│a╢ciwo╢µ ShortCut. Tam
wybierzemy skr≤t z klawiatury nam odpowiadaj▒cy (nie trzeba bawiµ siΩ
kodzie aby te skr≤ty dzia│a│y, Delphi sam to zrobi). To wszytsko jΩsli
chodzi o skr≤t, ale co siΩ stanie jak kto╢ woli np.: nacisn▒µ lewy
Alt+P (zerknij w Delphi, ┐e aby rozwin▒µ menu File starczy nacisn▒µ
Alt + F. "F" jest podkre╢lone). WiΩc kliknij na kt≤r▒╢ z
opcji i w w│a╢ciwo╢ci Caption wpisz (ten przyk│ad jest oparty na
pozycji Plik) &Plik. DziΩki temu "P" bΩdzie podkre╢lone
i po naci╢niΩciu Alt + P rozwiniemy menu Plik. Nie musisz tego
generowaµ w kodzie, Delphi sam to zrobi, jednak nigdzie tego nie
znajdziesz.
Zanim om≤wimy resztΩ rzeczy trzeba wiedzieµ jak tworzyµ zdarzenia do
naszych pozycji. Nic prostszego. Mo┐emy to zrobiµ na dwa sposoby.
Pierwszy to: nowe menu pojawia siΩ w formularzu, wiΩc starczy wybraµ
interesjuj▒c▒ nas pozycje i... po prostu klikn▒µ. Reszta dzieje siΩ
jak w innych obiektach. Drugim sposobem jest wej╢cie do edytora menu,
wybranie przez nas interesuj▒cej pozycji i... niestety trzeba klikn▒µ
a┐ dwa razy ;).
Teraz, gdy Was wtajemniczy│em mogΩ powiedzieµ t▒ resztΩ. Mianowicie
chodzi mi (po g│owie :)) o w│a╢ciwo╢ci TMenuItem, czyli jeszcze
kilka rzeczy, kt≤re mog▒ Wam siΩ przydaµ w projektowaniu menu.
Add - metoda Add dodaje do naszego menu now▒ pozycjΩ
na ko±cu menu.
Przyk│adzik:
var
NowaPozycjaMenu: TMenuItem;
begin
NowaPozycjaMEnu := TMenuItem.Create(Self);
NowaPozycjaMenu.Caption := 'Nowa Pozycja';
{Tutaj
ustaw jeszcze inne w│a╢ciwo╢ci}
Plik1.Add(NowaPozycjaMenu);
end;
Break - w│a╢ciwo╢µ Break
okre╢la czy menu dzieli siΩ na kolumny i w jaki spos≤b. Je╢li dzieli
siΩ, to pozycja z kt≤rej zosta│o menu podzielone idzie do nowo
utworzonej kolumny.
Przyk│adzik: (najlepiej to robiµ w Object Inspektorze)
Zapisz1.Break
:= mbBarBreak;
Je╢li Break bΩdzie r≤wna│o siΩ mbNone, to nie bΩdzie podzia│u
na kolumny. Je╢li Break r≤wne jest mbBreak, to menu jest podzielone na
kolomny, ale bez seperatora jak siΩ dzieje, gdy Break r≤wne jest
mbBarBreak. Domy╢lnie jest mbNone. Rzadko ta w│a╢ciwo╢µ jest
stosowana
Checked - w│a╢ciwo╢µ okre╢la
czy pozycja jest zaznaczona takim, jakgdyby "V" ;).
Przyk│adzik:
Zapisz1.Checked
:= True;
Count - pod t▒ w│a╢ciwo╢ci▒
jest podstawiona liczba pozycji w menu.
Przyk│adzik:
var
ilosc:Integer;
begin
ilosc := Plik1.Count;
{teraz
usuwamy ostatni▒ pozycjΩ w menu}
Plik1.Delete(ilosc);
end;
Default - pozycja, kt≤ra ma t▒
w│a╢ciwo╢µ ustawion▒ na True, powoduje, ┐e po klikniΩciu na menu
dwukrotnie uruchamia swoj▒ procedurΩ OnClick. Jest to rzadko spotykane
w programach, wiΩc lepiej z tego nie korzystaj.
Przyk│adzik: (najlepiej to robiµ w Object Inspektorze)
Zapisz1.Default
:= True;
Delete - dziΩki temu usuwamy
pozycjΩ w menu. Niestety musimy znaµ jej numer.
Przyk│adzik:
var
ilosc:Integer;
begin
ilosc := Plik1.Count;
{teraz
usuwamy ostatni▒ pozycjΩ w menu}
Plik1.Delete(ilosc);
end;
Enabled - w│a╢ciwo╢µ ta
okre╢l czy pozycja / menu jest aktywne.
Przyk│adzik:
Zapisz1.Enabled
:= False; //ustaw
na nieaktywne
IndexOf - w│a╢ciwo╢µ ta
zawiera po│o┐enie pozycji w menu.
Przyk│adzik:
var
ilosc:Integer;
begin
ilosc := Plik1.IndexOf(Zapisz1);
Plik1.Delete(ilosc);
end;
Insert - wstawia now▒ pozycjΩ
w danym miejscu.
Przyk│adzik:
var
NowaPozycjaMenu: TMenuItem;
ilosc:Integer;
begin
NowaPozycjaMEnu := TMenuItem.Create(Self);
NowaPozycjaMenu.Caption := 'Nowa Pozycja';
{Tutaj
ustaw jeszcze inne w│a╢ciwo╢ci}
ilosc := Plik1.Count; //mo┐esz
tu wstawiµ inn▒ liczbΩ, inaczej pozycja zostanie dodana na ko±cu
Plik1.Insert(ilosc,NowaPozycjaMenu);
end;
Items - jest tablic▒ pozycji
w menu.
Przyk│adzik:
if
Plik1.Items[3].Caption = 'Zapisz' then Plik1.Delete(3);
RadioItem - w│a╢ciwo╢µ
okre╢la czy pozycja jest zaznaczona przyciskiem radiowym.
Przyk│adzik:
Zapisz1.Enabled
:= True;
Remove - usuwa z emnu pozycjΩ.
Przyk│adzik:
Plik1.Remove(Zapisz1);
Visible - okre╢la czy pozycja
/ menu jest widoczne.
Przyk│adzik:
Zapisz1.Visible
:= False;
I tak w ko±cu opisa│em prawie wszystkie w│a╢ciwo╢ci, a mia│em
zrobiµ kr≤tki text ;). Oczywi╢cie wiΩkszo╢µ z tych rzeczy, kt≤re
tu napisa│em, mog▒ byµ u┐yte w TPopupMenu, a nie tylko w MainMenu.
PC