[ Pobierz całość w formacie PDF ]
.Staje siê to istotne zw³aszcza w przypadku du¿ej liczby kontrolek zgrupowanychna pasku narzêdziowym lub formularzu – przyciskom kalkulatora status„nieprzezroczystoœci” nadawany jest w konstruktorze formularza g³Ã³wnego.Wzbogacanie tekstu symbolamiW myœl zasady stwierdzaj¹cej generaln¹ wy¿szoœæ symboli nad objaœnieniamitekstowymi postanowiliœmy wzbogaciæ tekstowe opcje naszego menu g³Ã³wnego ostosown¹ grafikê.Komponent TMainMenu dysponuje mo¿liwoœci¹ nadawania oznaczeñgraficznych swym opcjom, co jest zupe³nie, zadowalaj¹ce pod warunkiem, i¿ograniczony rozmiar obrazków (16´16 pikseli) jest wystarczaj¹cy, a opcje menunie bêd¹ wy³¹czane (nie mo¿na dostarczyæ osobnej bitmapy dla wy³¹czonej opcji,zaœ spreparowana wówczas bitmapa oryginalna nie zawsze jest do zaakceptowania).Wykorzystaliœmy tê standardow¹ mo¿liwoœæ w naszych menu – wyj¹tkiem jestpodmenu View menu g³Ã³wnego, którego opcje wyœwietlane s¹ z u¿yciem rysowaniaspecyficznego (owner drawing).Rysowanie specyficzne opcji menu nie jest tak trudne, jak mo¿na by siê tegospodziewaæ w pierwszej chwili.Jest ono realizowane z wykorzystaniem zdarzeñOnDrawItem lub OnAdvancedDrawItem – drugie z nich stwarza nieco wiêkszemo¿liwoœci, wykorzystamy je wiêc dla naszych potrzeb.Pojedyncza funkcjaobs³ugi tego zdarzenia dzielona bêdzie pomiêdzy wszystkie opcje rysowane wsposób specyficzny, zaœ poszczególne opcje rozró¿niane bêd¹ na podstawiew³aœciwoœci Tag.Przypisanie tej funkcji do odpowiedniej w³aœciwoœci ka¿dej zopcji dokonywane jest w treœci konstruktora formularza g³Ã³wnego:ViewDisplay->OnAdvancedDrawItem = ViewMenuItemsAdvancedDrawItem;ViewFunctionButtons->OnAdvancedDrawItem = ViewMenuItemsAdvancedDrawItem;ViewNumberButtons->OnAdvancedDrawItem = ViewMenuItemsAdvancedDrawItem;ViewConstantsButtons->OnAdvancedDrawItem = ViewMenuItemsAdvancedDrawItem;ViewStatusBar->OnAdvancedDrawItem = ViewMenuItemsAdvancedDrawItem;Kod Ÿród³owy funkcji ViewMenuItemsAdvancedDrawItem() przedstawia wydruk 3.17.Wydruk 3.17.Rysowanie specyficzne opcji menu Viewvoid __fastcall TMainForm::ViewMenuItemsAdvancedDrawItem(TObject* Sender,TCanvas* ACanvas,const TRect& ARect,TOwnerDrawState State){// pierwszy parametr jest wskaŸnikiem do odnoœnej opcji menuTMenuItem* MenuItem = dynamic_cast(Sender);if(MenuItem){// Krok 1 – zachowaj wartoœæ tych w³aœciwoœci p³Ã³tna,// które bêd¹ zmienianeTColor OldFontColor = ACanvas->Font->Color;TColor OldBrushColor = ACanvas->Brush->Color;int TextOffset = ARect.Left+1;try{// Krok 2 – narysuj opcjê na p³Ã³tnie w odpowiednim regionie;// nale¿y sprawdziæ, czy opcja jest wybrana i czy jest ona// aktualnie podœwietlonastd::auto_ptr CheckedImage(new Graphics::TBitmap());std::auto_ptr ToolbarImage(new Graphics::TBitmap());ViewMenuImageList->GetBitmap(MenuItem->Tag, ToolbarImage.get());ToolbarImage.get()->Transparent = true;if(State.Contains(odChecked)){if(State.Contains(odSelected)) // podœwietlona{MenuCheckImageList->GetBitmap(1, CheckedImage.get());}else{// niepodœwietlonaMenuCheckImageList->GetBitmap(0, CheckedImage.get());}ACanvas->Draw(ARect.Left+1,ARect.Top+2,CheckedImage.get());}ACanvas->Draw(ARect.Left+21,ARect.Top+2,ToolbarImage.get());TextOffset = ARect.Left + 60;}__finally{if(State.Contains(odSelected)) // podœwietlona{ACanvas->Font->Color = clHighlightText;ACanvas->Brush->Color = clHighlight;}else // niepodœwietlona{ACanvas->Font->Color = clWindowText;ACanvas->Brush->Color = clMenu;}ACanvas->FillRect(Rect(TextOffset, ARect.Top, ARect.Right, ARect.Bottom));// wypisz tekst opcji; u¿yj funkcji DrawText, gdy¿ nale¿y obs³u¿yæ// ampersandy stanowi¹ce polecenie podkreœlenia nastêpnej literyDrawText( ACanvas->Handle,MenuItem->Caption.c_str(),MenuItem->Caption
[ Pobierz całość w formacie PDF ]
Darmowy hosting zapewnia PRV.PL