2017-09-28 46 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

相关问题