gpt4 book ai didi

delphi - 在组合框中显示多列内容

转载 作者:行者123 更新时间:2023-12-03 15:54:15 28 4
gpt4 key购买 nike

我想在组合框下拉列表中显示名字和姓氏。
问题是我应该处理表中存在的 2 个字段。
我检查了 TDBlLookUpComboBox,但 ListFields 属性在 Delphi Xe 中对我不起作用。

我将 TBlLookUpComboBox 的属性设置为

DataSource :my datasource
ListFields : SUR_NAME; FIRST_NAME

现在,我正在通过基本方式做到这一点:

nameClient := Concat( sqlqry1.Fields.FieldByName('FIRST_NAME').AsString,' ',
sqlqry1.Fields.FieldByName('SUR_NAME').AsString);
cbbClient.Items.Add(nameClient);

最佳答案

更改输入
只需通过输入查询来更改进入 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 | test
line2 | part2
line 4 | part3
line 6

这就是将显示的内容: enter image description here

关于delphi - 在组合框中显示多列内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29366006/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com