当前位置: 首页 > 知识库问答 >
问题:

如何截断德尔福组合框中选定的文本?

江展
2023-03-14

我有一个组合框,其样式设置为csDropDown。我试图在OnSelect事件处理程序中做到这一点;

if cboEndTime.ItemIndex > -1 then
  cboEndTime.Text := AnsiLeftStr(cboEndTime.Text, 5);

但它没有效果。

组合项目如下所示;

09:00(0分钟)
09:30(30分钟)
10:00(1小时)
10:30(1.5小时)
。。。

例如,如果我选择第二项,我希望组合框的文本显示为09:30,即截断。这会将ItemIndex设置为-1。

我怎样才能做到这一点?

共有2个答案

范哲
2023-03-14

您可以将样式设置为OwnerDraw修复,并使用OnDrawItem自己绘制希望的文本。本示例中的查找将显示所有,所选内容仅显示修剪过的字符串。

procedure TForm3.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);

  var
   C:TComboBox;

  Function Strip(const s:String):String;
    begin
       if C.DroppedDown then result := s
       else Result := Copy(s,1,pos('(',s)-1);
    end;
begin
     C := TComboBox(Control);
     C.Canvas.FillRect(Rect);
     C.Canvas.TextOut(Rect.left + 1,Rect.Top + 1, Strip(C.Items[Index] ));
end;
壤驷安和
2023-03-14

您在OnSelect事件中对Text所做的更改似乎随后会被框架覆盖。不管是Windows API还是VCL,我还没有研究哪个。

一种解决方案是推迟实际更改,直到原始输入事件的处理完成。像这样:

const
  WM_COMBOSELECTIONCHANGED = WM_USER;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    procedure ComboBox1Select(Sender: TObject);
  protected
    procedure WMComboSelectionChanged(var Msg: TMessage); message WM_COMBOSELECTIONCHANGED;
  end;

implementation

{$R *.dfm}

procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  PostMessage(Handle, WM_COMBOSELECTIONCHANGED, 0, 0);
end;

procedure TForm1.WMComboSelectionChanged(var Msg: TMessage);
begin
  if ComboBox1.ItemIndex<>-1 then
  begin
    ComboBox1.Text := Copy(ComboBox1.Text, 1, 1);
    ComboBox1.SelectAll;
  end;
end;
 类似资料:
  • 我不知道它是否会像重复需要做什么来获得那么简单,所以我也想包含它,以防需要做一些不同的事情。

  • 我有一个网页渲染使用extjs。它用一些生成的ID呈现多个组合框。和每个组合框都选择了不同的选项。我怎样才能找出在每个组合中选择了哪个值? 在调试HTML DOM时,我观察到ExtJS呈现DIV是不同的,可选择的选项在最后呈现在不同的DIV中。因此,我无法定义任何XPath来找出所选值。

  • 问题内容: 我使用Tkinter在python中制作了一个简单的组合框,我想检索用户选择的值。搜索后,我认为可以通过绑定选择事件并调用将使用box.get()之类的函数来实现此目的,但这不起作用。程序启动时,将自动调用该方法,并且不打印当前选择。当我从组合框中选择任何项目时,不会调用任何方法。这是我的代码片段: 当我从框中选择一个项目时,应该调用此方法: 谁能告诉我如何获得选定的值? 编辑:我通过

  • 我正在尝试设置组合框的文本颜色。 我尝试的代码

  • 我对Laravel截断的数据有一个小问题。我将传递给我的后端值,该值可以是表中定义的“百分比”或“金额”,但在表中也可以为null,但每次尝试将其设置为null时,都会出现如下错误: {"discount_currency":["您输入的值无效。"]} 或者当我从处理请求中删除enum时,它会说 所以我传递数据抛出API从我的Vue,这个婴儿车的请求看起来像: 所以如果我删除...我有第二个错误。

  • 假设我有以下html代码: 这是一个组合框 当前已选择值MyDivision。 使用Selenium WebDriver我试图获得选定的值,但没有成功。 我尝试了: 但这会返回组合框中的所有值。 请帮忙? 编辑: