2016-11-17 34 views
1

我有一個工具欄,我正在使用以下過程在其中一個工具按鈕中更改矩形的顏色。 ImageList的ColorDepthcl24Bit而是dsTransparent。該過程正常工作。在運行時更改工具按鈕的圖片不再有效

procedure TANewMain.BtReplaceHighOnClick(Sender: TObject); 
var 
    ABitmap: TBitmap; 
    ARect: TRect; 
begin 
    ABitmap := TBitmap.Create; 
    try 
    ImgList.GetBitmap(1, ABitmap); 
    ABitmap.Canvas.Brush.Color := ColorToRGB(clRed); // S04 
    ABitmap.Canvas.Pen.Color := ColorToRGB(clBlue); 
    ARect := Rect(5, 1, 11, 15); 
    ABitmap.Canvas.Rectangle(ARect); 
    ImgList.ReplaceMasked(1, ABitmap, clWhite); 
    finally 
    ABitmap.Free; 
    end; 
end; 

如果我將程序添加到存儲庫重用它工作正常。但是,如果我從頭開始一個新程序並使用完全相同的過程,我會看到一個白色按鈕。我確信圖像列表和工具欄的屬性在兩個程序中都是相同的。這個程序是很久以前寫的。問題可能與Windows更新有關嗎?我正在使用Windows 10和Delphi 10.

回答

2

有兩種解決方案可以解決您的問題。

1)禁用您的應用程序

禁止通過取消勾選的「啓用運行時主題」複選框的更換主題皮膚「項目 - 選項 - 應用」。

這種方法的缺點是應用程序看起來的Windows 95

2)以下的ImageList

  • 顏色質量彙總的性能變化發展:cdDeviceDependent
  • DrawingStyle:dsNormal
  • 將ImageType
  • :itMask

結果l ooks這樣在Windows 10(以及對於按鈕的位置,也同樣在Windows 7):

enter image description here

我修改您的代碼以充當按鈕的切換,所以兩個按鈕有紅長方形。

這些數字只是64 x 64像素的位圖,在白色背景上有黑色文字。

注意:複製原理 - 修改 - 反覆複製可能導致圖像質量下降。一個更好的方法可能是有兩個圖像列表,一個是原始圖像,另一個是容易繪製的矩形。

話雖如此,看來矩形的目的是指示某種'活躍'狀態。這也可以通過按鈕的Down屬性來實現。

+0

我的按鈕確實反映了選定的背景和前景色,用於突出顯示RichEdit控件中的文本(類似於Microsoft Word的字體顏色按鈕中的下劃線)。謝謝。問題解決了。 – Rudi

+0

那麼是什麼問題,W10不再支持24位位圖? –

+0

@Sertac Akyuz我使用在Windows 10上運行的Delphi 10。圖像列表的顏色深度設置爲cl24Bit,運行時主題被禁用。通過這些設置,該程序可以提供所需的結果。使用Windows屬性對話框檢查導入到圖像列表中的位圖顯示的位深度爲24.因此,Windows 10/Delphi 10似乎可以處理這種情況。 – Rudi