2011-02-03 7 views
5

Tôi muốn làm nổi bật các biểu tượng trên thanh công cụ của mình khi hành động được liên kết của nó có thuộc tính "được chọn" được đặt thành true. Tôi muốn thực hiện nó theo cách tương tự như cách Microsoft Office 2003 thực hiện nó, ví dụ: nhìn thấy các biểu tượng Bold và Align Left trong hình ảnh này:Làm cách nào để triển khai biểu tượng thanh công cụ nổi bật với Delphi?

Toolbar example

Những hình ảnh được vẽ với một hộp xung quanh nó và nền đã được thay đổi màu da cam.

Làm cách nào để triển khai điều này bằng Delphi 2009?

Là tiền thưởng, cũng có cách để thực hiện điều tương tự với biểu tượng trong menu cho mục được liên kết không? ví dụ. như dưới đây với các mục Thước và Markup:

Menu example


followup:

Cảm ơn bạn Andreas, cho một câu trả lời đơn giản và chính xác cho câu hỏi của tôi là gì. Là một lập trình viên Delphi 4 chuyển đổi sang Delphi 2009, tôi không đủ quen thuộc với các bổ sung VCL của Delphi từ 5 đến 7, vì vậy TActionManager, TActionToolbar và các hoạt động của chúng không nằm trong từ vựng Delphi của tôi. Và điều này dựa trên khả năng của Delphi để sử dụng một phong cách tương tự như chủ đề của Microsoft O/S.

Tuy nhiên, với câu trả lời của bạn và một chút nghiên cứu sử dụng nó, tôi xác nhận rằng tôi không muốn làm điều này theo cách này. Một trình đơn bật lên Embarcadero: Popup menus: "Checked" items with icon no longer shown as sunken? với Peter Dưới đây đóng góp chuyên môn của mình, làm cho tôi nhận ra rằng tôi không muốn thay đổi chủ đề XP, vì điều đó sẽ làm mọi thứ cho người dùng Vista và Windows 7, đưa họ trở lại thời đại đồ đồng.

Thủ phạm thực sự ở đây là có một số điều nhất định mà chủ đề O/S muốn bạn tôn trọng. Delphi cố gắng tuân theo các quy tắc. Tôi có thể quay trở lại XP, phong cách/chủ đề XP và Bản đồ màu XP. Ở chế độ này, các mục được chọn sẽ bị ẩn. Và đây thực sự là tất cả những gì tôi muốn - để làm nổi bật các mục đã chọn. Tôi đã sử dụng Office 2003 làm ví dụ, bởi vì đó là loại hilight mà tôi muốn. Nhưng tôi thực sự không muốn thay đổi hoàn toàn chủ đề và tạo ra một cái nhìn hoàn toàn mới về chương trình của mình. Nó sẽ đặc biệt làm cho mọi thứ trông không tự nhiên đối với người dùng Vista và Windows 7.

Điều gì lý tưởng là nếu tôi có thể có một bộ hình ảnh khác sẽ áp dụng khi đối tượng được chọn ... nhưng không có thuộc tính "Đã kiểm tra hình ảnh". Hoặc một cách lập trình hoặc tự động sửa đổi hình ảnh nếu nó được chọn (ví dụ như hình ảnh bị vô hiệu hóa có phiên bản màu xám của hình ảnh đã bật).

Tôi vẫn không ngại nghe bất cứ ai nếu có bất kỳ cách nào để thực hiện điều này hoặc điều gì khác có thể hoạt động tốt như nhau, mà không thay đổi toàn bộ giao diện chương trình của tôi.

+1

Đừng tiêu chuẩn 'TToolbar', 'TMainMenu' và' TPopupMenu' làm điều này chưa? Và chúng thậm chí còn tốt hơn những cái bạn có ảnh chụp màn hình vì chúng làm theo cách riêng! –

+0

Cá nhân tôi sử dụng Toolbar2000 + SpTBX và thích chúng với các thành phần TToolbar và TActionManager. –

Trả lời

2

Bạn cũng có thể sử dụng số điện thoại TToolBar thông thường, với được đặt thành dsGradient, tôi vừa phát hiện ra.

Sample toolbar with dsGradient as DrawingStyle http://privat.rejbrand.se/toolbar2.png

+0

Đây là giải pháp tốt hơn và đơn giản hơn. Nó sẽ không thay đổi chủ đề chung cho XP như là phương pháp khác của bạn. Nó quá tệ một số tính năng nhỏ này được ẩn giấu trong số 50 thuộc tính của Thanh công cụ và rất khó tìm. – lkessler

13

Thêm TActionManager vào biểu mẫu và tạo một số hành động (ví dụ: in đậm, in nghiêng và gạch dưới). Đảm bảo đặt thuộc tính AutoCheck thành true cho mỗi hành động. Sau đó, thêm TActionToolbar. Nhấp đúp vào trình quản lý tác vụ và kéo ba tác vụ vào thanh công cụ. Bây giờ, hãy thêm TXPColorMap vào biểu mẫu và gán nó cho trình quản lý hành động. Ngoài ra, hãy thêm TImageList và thêm các biểu tượng cho chữ in đậm, in nghiêng và gạch dưới (từ C:\Program Files (x86)\Common Files\CodeGear Shared\Images\GlyFX\Icons\BMP\16x16). Chỉ định danh sách hình ảnh cho trình quản lý tác vụ.

Đặt biểu tượng thanh công cụ để chỉ hiển thị hình tượng và không phải chú thích. Cuối cùng, đặt thuộc tính Style của ActionManager thành XP Style.Kết quả cuối cùng là những gì bạn tìm kiếm.

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

+1

+1 Làm tốt lắm! Hơi ngạc nhiên khi thấy bạn giới thiệu các thành phần tích hợp hơn là một thành phần tùy chỉnh! ;-) –

+0

@David: Tôi cũng vậy (hoặc, các điều khiển Windows gốc). Nhưng điều này trả lời câu hỏi của mình khá tốt, mặc dù. –

0

Nếu không có thay đổi toàn bộ theme, tôi nghĩ rằng đây là một cái gì đó mà có thể làm việc một nửa decently:

  1. Thêm hình ảnh bổ sung cho các ImageList, để cho một hành động nào đó, có hai (hoặc nhiều hơn) hình ảnh để lựa chọn.

  2. Thay vì thay đổi "đã kiểm tra" tài sản để đúng hay sai, thay đổi ImageIndex đến hình ảnh thay thế, ví dụ:

    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; 
    

Bây giờ những hình ảnh sẽ trông như thế này trên thanh công cụ:

toolbar

và như thế này trên menu:

menu

Những điều tốt đẹp về phương pháp này là nó cũng hoạt động trên menu và bạn có thể có nhiều hình ảnh đại diện cho những gì bạn muốn. Ngoài ra, nó sẽ không phá hủy các chủ đề (XP, Vista, Windows 7, vv) mà chương trình đã thực hiện.

Điểm bất lợi của phương pháp này là: Bạn bị giới hạn ở khu vực hình ảnh 16x16 và không thể vẽ hộp xung quanh các giới hạn đó khi bạn đặt thuộc tính "đã chọn" thành true.

+1

Tôi không thích nó. Tôi thích một hình chữ nhật rõ ràng xung quanh mục đã chọn/xuống. –