[ Pobierz całość w formacie PDF ]
.Postaramy się jednak przy tej okazjizaprojektować naprawdę  profesjonalne menu.Tworzymy profesjonalne menuwiczenie 6.4.1.Załóżmy na dysku oddzielny katalog, powiedzmy, że nazwiemy go \Projekt07.2.Jeżeli w katalogu, w którym zainstalowaliśmy Buildera istnieje podkatalog \Buttons,odszukajmy go i wybierzmy 7 map bitowych pokazanych poniżej.Przekopiujmy jedo naszego katalogu.Jeżeli zaś nie jesteśmy w stanie ich odszukać, należy skorzystać 109z edytora graficznego pokazanego na rys.1.25.34.Postarajmy się samodzielniewykonać podobne obrazki (zapisując je oczywiście w formacie mapy bitowej).Nowy Otwórz Zapisz jako Cofnij Wytnij Kopiuj Wklej3.Zaprojektujmy formularz, w którego skład wchodzić będzie komponent typuTToolBar, 7 przycisków TSpeedButton, okno edycji TRichEdit, przycisk typuTButton, menu TMainMenu, komponenty TSaveDialog i TOpenDialog,komponent TImageList oraz dwa komponenty TActionList.Sposób ichrozmieszczenia na formularzu pokazany jest na rysunku 6.8.Rys.6.8.Sposóbrozmieszczeniakomponentów naformularzu projektuProjekt07.bpr4.Najpierw na formularzu umieśćmy komponent TToolBar, zaś bezpośrednio na nimkolejno komponenty TSpeedButton.Posługując się inspektorem obiektów ichcechy Name zmieńmy odpowiednio na FileNew, FileOpen, FileSave, Cut, Copy,Paste, Undo.5.Korzystając z właściwości Glyph, R rozwińmy opcję TBitmap i umieśćmy nakażdym z tych przycisków odpowiednią mapę bitową, tak jak na rys.6.8.6.Każdemu z naszych komponentów przyporządkujemy funkcję obsługi odrębnegozdarzenia według poniższego schematu://--------------------------------------------------------------------void __fastcall TForm1::FileNewClick(TObject *Sender){CheckFileSave();RichEdit1->Lines->Clear();RichEdit1->Modified = FALSE; 110Borland C++Builder 5.wiczenia praktyczne}//--------------------------------------------------------------------void __fastcall TForm1::FileOpenClick(TObject *Sender){CheckFileSave();if (OpenDialog1->Execute()){RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);RichEdit1->Modified = FALSE;RichEdit1->ReadOnly =OpenDialog1->Options.Contains(ofReadOnly);}}//--------------------------------------------------------------------void __fastcall TForm1::FileSaveAsClick(TObject *Sender){if (SaveDialog1->Execute()){RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);RichEdit1->Modified = False;}}//--------------------------------------------------------------------void __fastcall TForm1::UndoClick(TObject *Sender){if (RichEdit1->HandleAllocated())SendMessage(RichEdit1->Handle, EM_UNDO, 0, 0);}//--------------------------------------------------------------------void __fastcall TForm1::CutClick(TObject *Sender){RichEdit1->CutToClipboard();}//--------------------------------------------------------------------void __fastcall TForm1::PasteClick(TObject *Sender){RichEdit1->PasteFromClipboard();}//--------------------------------------------------------------------void __fastcall TForm1::CopyClick(TObject *Sender){RichEdit1->CopyToClipboard();}//--------------------------------------------------------------------7.Cechę Name komponentu ImageList1 zmieńmy na MenuImages.Klikając go nanim dwukrotnie, wczytajmy kolejno potrzebne nam obrazki w postaci map bitowych,każdemu z nich automatycznie powinien zostać przyporządkowany kolejny numer: 111Rys.6.9.Sposóbposługiwania siękomponentemTToolBarImages8.Cechę Images (inspektor obiektów, karta Properties) komponentów ActionList1oraz ActionList2 ustawmy jako MenuImages.9.Klikając dwukrotnie na ActionList1 dostajemy się do jego pola edycjikomponentu.Wybierając New Action zmieniamy kategorię (Categories) naFile.Zaznaczając File dostajemy się do okna akcji Actions, zmieniamyAction1 na FileNewcmd, któremu przypisujemy temu komponentowi zerowyindeks obrazka (ImageIndex 0), zaś w opcji Events zdarzeniu OnExecuteprzypisujemy FileNewClick().Podobne działania trzeba przeprowadzić iepostąpmy z innymi obiektami akcji, tak jak pokazuje to rys.6.10.Rys.6.10.Ustaleniesposobu przypisańwłaściwości dlakomponentówkategorii File10.W ten sam sposób akcji FileExitcmd przypisujemy funkcje obsługi zdarzeniaCloseApplicationClick(),skojarzonej z przyciskiem Button1, którego cechęName zmieniliśmy na CloseApplication, zaś cechę Caption na &Zamknij. 112Borland C++Builder 5.wiczenia praktyczne11.Analogicznie projektujemy właściwości komponentów kategorii Edit, ukrywającejsię w ActionList2, tak jak pokazuje to rysunek 6.11.Rys.6.11.Ustaleniesposobu przypisańwłaściwości dlakomponentówkategorii Edit12.Przechodzimy do zaprojektowania głównego menu.W karcie właściwości inspektoraobiektów, cesze Images komponentu TMainMenu przypiszmy MenuImages.13.Główne menu składać się będzie z dwóch opcji Plik oraz Edycja.Menu Plikzaprojektujemy w sposób pokazany na rysunku 6.12.Rys.6.12.Menu Plikwraz w raz zodpowiednimiprzypisaniami winspektorze obiektów 113Jeżeli zechcemy, aby w odpowiedzi na wybranie opcji Nowy wywoływana była funkcjaobsługi zdarzenia FileNewClick(), w karcie zdarzeń, zdarzeniu OnClick w karciezdarzeń należy właśnie przypisać FileNewClick.14.Z kolei menu Edycja zaprojektujemy według przepisu pokazanego na rysunku 6.13.Rys.6.13.MenuEdycja wraz w raz zodpowiednimiprzypisaniami winspektorze obiektówNa wydruku 6.4 zamieszczono kompletny kod aplikacji Projekt07.bpr.W funkcji FormCreate()wykorzystaliśmy właściwości InitialDir oraz Filter obiektów TOpenDialog iTSaveDialog, z których pierwsza pozwala już w momencie uruchomienia aplikacji ustalićwłaściwą ścieżkę dostępu do aktualnego katalogu, z kolei druga z wymienionych zapewniamożliwość odczytania plików posiadających wymagane przez nas rozszerzenia.W tej samejfunkcji umieściliśmy również  dymki podpowiedzi do poszczególnych przycisków, korzystając zwłaściwości Hint oraz ShowHint [ Pobierz całość w formacie PDF ]
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • odbijak.htw.pl