2011-02-03 11 views
5

Chciałbym podświetlić moje ikony na pasku narzędzi, gdy ich powiązana akcja ma "sprawdzoną" właściwość ustawioną na true. Chciałbym zrobić to w sposób podobny do tego, jak zrobił to Microsoft Office 2003, np. zobacz Bold i do lewej ikony w tym obrazie:Jak mogę wdrożyć wyróżnione ikony paska narzędzi w Delphi?

Toolbar example

Obraz jest wyciągnąć z pudełka wokół niego, a tło zostało zmienione na pomarańczowo.

Jak mogę wdrożyć to za pomocą Delphi 2009?

Czy istnieje również sposób, aby zrobić to samo z ikoną w menu powiązanego elementu? na przykład jak niżej z wpisami linijka i znaczników:

Menu example


Followup:

Dziękuję Andreas, za to, co jest proste i poprawna odpowiedź na moje pytanie. Jako programator Delphi 4 przekonwertowany na Delphi 2009, nie byłem wystarczająco zaznajomiony z dodatkami VCL Delphi 5 do 7, więc TActionManager, TActionToolbar i ich działania nie były w moim słowniku Delphi. Opiera się to na zdolności Delphi do używania stylu podobnego do motywu Microsoft O/S.

Jednak z twoją odpowiedzią i odrobiną badań z jej użyciem potwierdzam, że nie chcę tego robić w ten sposób. Oświetlający wątek Embarcadero: Popup menu: "Checked" items with icon no longer shown as sunken? z Peterem Below, który wniósł swój wkład, zdał sobie sprawę, że nie chcę w ogóle zmieniać motywu XP, ponieważ spowoduje to narazić użytkowników Vista i Windows 7, biorąc je powrót do epoki brązu.

Prawdziwym winowajcą jest to, że istnieją pewne rzeczy, które tematy O/S chcą, abyś szanował. Delphi stara się przestrzegać zasad. Mogę wrócić do XP, stylu XP/motywu i mapy kolorów XP. W tym trybie sprawdzane elementy będą wyostrzone. I to jest naprawdę wszystko, co chciałem - podkreślić zaznaczone przedmioty. Użyłem pakietu Office 2003 jako przykładu, ponieważ był to rodzaj hilightingu, jaki chciałem. Ale naprawdę nie chciałem całkowicie zmieniać tematów i wymuszać na mnie nowego spojrzenia na mój program. W szczególności sprawiłoby, że rzeczy wyglądałyby nienaturalnie dla użytkowników Vista i Windows 7.

Co byłoby idealne, gdybym mógł mieć inny zestaw obrazów, który miałby zastosowanie, gdy obiekt jest zaznaczony ... ale nie ma właściwości "CheckedImages". Lub sposób programowej lub automatycznej modyfikacji obrazu, jeśli jest on sprawdzany (np. Tak, jak wyłączone obrazy otrzymują wersję w skali szarości ich włączonego obrazu).

Nadal nie miałbym nic przeciwko usłyszaniu od nikogo, jeśli istnieją sposoby na wdrożenie tego lub innego rozwiązania, które może działać równie dobrze, bez zmiany całego wyglądu mojego programu.

+1

Nie średnia 'TToolbar',' 'TPopupMenu' TMainMenu' i już to zrobić? I są nawet lepsze niż te, na które masz zrzuty ekranu, ponieważ robią to w natywny sposób! –

+0

Osobiście używam Toolbar2000 + SpTBX i wolę je od komponentów TToolbar i TActionManager. –

Odpowiedz

13

Dodaj do formularza formularz TActionManager i utwórz akcje (np. Pogrubienie, kursywa i podkreślenie). Pamiętaj, aby ustawić właściwość AutoCheck na wartość true dla każdej akcji. Następnie dodaj TActionToolbar. Dwukrotnie kliknij menadżera akcji i przeciągnij trzy akcje na pasek narzędzi. Teraz dodaj do formularza formularz TXPColorMap i przypisz go do menedżera akcji. Dodaj także TImageList i dodaj ikony pogrubienia, kursywy i podkreślenia (od C:\Program Files (x86)\Common Files\CodeGear Shared\Images\GlyFX\Icons\BMP\16x16). Przypisz listę obrazów do menedżera akcji.

Umożliwia ustawienie ikon paska narzędzi, tak aby pokazywał tylko glif, a nie podpis. Na koniec ustaw właściwość ActionManager na Style na XP Style.Rezultat końcowy jest tym, czego szukasz.

Toolbar sample http://privat.rejbrand.se/toolbar.png

+1

+1 Dobra robota! Nieco zaskoczony, że polecasz wbudowane komponenty, a nie komponent niestandardowy! ;-) –

+0

@David: Ja też (lub natywne sterowanie Windows). Ale to dość dobrze odpowiada na jego pytanie. –

0

Bez zmiany całego tematu, myślę, że to jest coś, co może działać pół przyzwoicie:

  1. Dodaj dodatkowe obrazy do ImageList, tak że dla danego działania, istnieją dwie (lub więcej) zdjęć do wyboru.

  2. Zamiast zmieniać „zaznaczone” właściwość prawda czy fałsz, zmień imageIndex do alternatywnego obrazu, np:

    if WS = 1 then begin 
        ElTree.Align := alTop; 
    // TileTopBottomAction.Checked := true; --- take this out 
    // TileLeftRightAction.Checked := false; --- take this out 
        TileTopBottomAction.ImageIndex := 47; { hilighted image } 
        TileLeftRightAction.ImageIndex := 14; { regular image } 
    end 
    else begin 
        ElTree.Align := alLeft; 
    // TileTopBottomAction.Checked := false; --- take this out 
    // TileLeftRightAction.Checked := true; --- take this out 
        TileTopBottomAction.ImageIndex := 13; { regular image } 
        TileLeftRightAction.ImageIndex := 48; { hilighted image } 
    end; 
    

Teraz obrazy będą wyglądać na pasku narzędzi:

toolbar

i tak w menu:

menu

Przyjemną rzeczą w tej metodzie jest to, że działa ona również w menu i możesz mieć wiele obrazów do przedstawienia tego, co chcesz. Nie spowoduje to również zniszczenia motywu (XP, Vista, Windows 7 itd.), Który został zastosowany przez program.

Wadą tej metody jest: Masz ograniczoną do 16x16 powierzchnię obrazu, z którą możesz się bawić i nie możesz narysować wokół niej ramek, które są poza tymi limitami, tak jak dzieje się, gdy ustawisz właściwość "checked" na true.

+1

Nie podoba mi się to. Lubię wyraźny prostokąt wokół wybranego/opuszczonego przedmiotu. –

Powiązane problemy