改变输入
只要改变源数据进入DBCombo通过在查询中输入:
select concat(SUR_NAME,' ',FIRST_NAME) as NAME, * from mytable;
现在您可以在组合框中显示数据。
使输出看起来不错,在下拉列表
很明显,你将使用一个TDBILookUpComboBox
但一切是一样的。
为了在下拉菜单中制作多列,您必须执行自己的绘图。
这可以通过将style
更改为csOwnerDrawFixed
并指定OnDrawItem
事件来完成。
请参见下面的示例代码:
unit Unit18;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm18 = class(TForm)
ComboBox1: TComboBox;
procedure ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
private
public
end;
var
Form18: TForm18;
implementation
uses
System.Types,
StrUtils;
{$R *.dfm}
procedure TForm18.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
Columns: TStringDynArray;
ColCount: Integer;
ItemText: string;
DC: HDC;
DrawRect: TRect;
Middle: integer;
begin
ItemText:= ComboBox1.Items[index];
Columns:= SplitString(ItemText, '|');
ColCount:= Length(Columns);
// For Demo purposes only the first 2 columns are displayed.
DC:= ComboBox1.Canvas.Handle;
Combobox1.Canvas.FillRect(Rect);
Middle:= Rect.Left + Rect.Width div 2;
Combobox1.Canvas.MoveTo(Middle, Rect.Top);
Combobox1.Canvas.LineTo(Middle, Rect.Bottom);
if ColCount > 0 then begin
DrawRect:= Rect;
OffsetRect(DrawRect,1,0);
DrawRect.Right:= DrawRect.Right - DrawRect.Width div 2;
DrawText(DC, Columns[0], Length(Columns[0]), DrawRect, 0);
end;
if ColCount > 1 then begin
DrawRect:= Rect;
OffsetRect(DrawRect,1,0);
DrawRect.Left:= DrawRect.Left + DrawRect.Width div 2;
DrawText(DC, Columns[1], Length(Columns[1]), DrawRect, 0);
end;
end;
end.
把下面的文字中Items
:
测试| test
line2 | part2
line 4 |第三部分
线6
而这正是将显示:
在你的选择你应该这样做。这是更容易 – EProgrammerNotFound 2015-03-31 14:10:10