2017-09-28 59 views
0

我能夠使用它的樣式改變DBCombobox物品的顏色csOwnerDrawFixed類似
How do I draw the selected list-box item in a different color?選擇DBListbox項目在不同的顏色和插入文本

procedure TForm1.DBComboBoxDrawItem(Control:TWinControl; 
    Index: Integer; Rect: TRect; State: TOwnerDrawState); 
with (Control as TDBComboBox).Canvas do 
begin 
if odSelected in State then 
    Brush.Color := $00EACAB6; 
    Font.Color := clBlack; 
    FillRect(Rect); 
    TextOut(Rect.Left, Rect.Top, (Control as TDBComboBox).Items[Index]); 
    if odFocused In State then 
    begin 
    Brush.Color := (Control as TDBComboBox).Color; 
    DrawFocusRect(Rect); 
    end; {if} 
    end; {with} 
end; 

一般情況下,在默認情況下,我能夠使用DBCombobox標準(風格:csDropdown)來選擇項目,也可以輸入文本在數據庫Combobox

但我目前面臨的問題是,當我改變DBCombobox的顏色(樣式爲csOwnerDrawFixed或csOwnerDrawVariable)。顏色被改變,但我無法在DBCombobox中輸入文字。

有人能告訴我如何更改項目的顏色,並可以同時在DBCombobox中輸入文本。謝謝 !

enter image description here

注:顯示的顏色是不是默認的,但修改後的一個

+0

你能告訴我們你有什麼,我們可以重現嗎? – Dsm

+0

對不起,我的意思是代碼明智的。我應該說清楚。 – Dsm

+0

對於DBComboBox,幫助明確指出這是不可能的(即在這些模式下用戶不能輸入數據)。作爲一個建議,你可以考慮使用一個普通的TCombobox,並通過實時綁定將其鏈接到數據源,但我明白這可能是一個重大轉變。 – Dsm

回答

0

隨着TComboBox是可能的。嘗試這個。您可以添加CloseUpDropDown事件處理

procedure TForm1.ComboBox1CloseUp(Sender: TObject); 
begin 
TComboBox(Sender).Style := csDropDown 
end; 

procedure TForm1.ComboBox1DropDown(Sender: TObject); 
begin 
TComboBox(Sender).Style := csOwnerDrawFixed; 
end; 

對於TDBComboBox沒有OnCloseUp事件,這樣你可以處理其他事件例如OnChange

procedure TForm1.DBComboBox1Change(Sender: TObject); 
begin 
    TDBComboBox(Sender).Style := csDropDown 
end; 

procedure TForm1.DBComboBox1DropDown(Sender: TObject); 
begin 
    TDBComboBox(Sender).Style := csOwnerDrawFixed; 
end; 

或設置樣式的Application.OnIdle事件處理程序:

procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean); 
begin 
    if (not DBComboBox1.DroppedDown) and (DBComboBox1.Focused) 
    then 
    DBComboBox1.Style := csDropDown; 
    if (not DBComboBox1.DroppedDown) and (not DBComboBox1.Focused) 
    then 
    DBComboBox1.Style := csOwnerDrawFixed; 
end; 
+0

我也想到了這一點,但是當我嘗試它時,它似乎沒有工作。 OnDrawItem事件未被觸發。 – Dsm

+0

@Dsm當'DBComboBox'.'Style'設置爲'csOwnerDraw *'時,它會被觸發 –

+0

這不適合我。我在例程中插入了一個斷點,並且沒有被觸發。也許我錯過了什麼。 – Dsm

相關問題