Delphi信息系统开发中下拉弹出窗体,或者按钮弹出窗体的开发思路

作者: koic 分类: 他山之石 发布时间: 2025-05-25 10:14

本文是Delphi盒子的一些文章集锦,仅供参考

DBGridEh如何自动弹出DropDownForm下拉列表,或按条件弹出?

Delphi信息系统开发中下拉弹出窗体,或者按钮弹出窗体的开发思路

如图,怎么在单元格里输入的时候,如何自动显示DropDownForm呢,
我在DBGridEh的事件里中可判断是否是‘商品名称’列,
如果是的话,怎么弹出DropDownForm呢?就行点击了下拉箭头一样。

或者是在一定条件下(如输入错误时)弹出DropDownForm?


TCombobox的下拉效果是否可以取消

想点击 下拉箭头时,自己放一个 TListBox到下面。
所以,想把 TCombobox本身的下拉效果取消。
目前设置 DropDownCount = 0,但还是有个 下拉的效果。

原先TCombobox里有数据,想点击下拉时,TListBox显示扩展的内容
刚才自己想到,索性TCombobox里不加载数据了,另外用个TStringList 。
因为我看 TCombobox里没有数据时,不会有下拉效果。呵呵

如果能用第三方解决,可以使用dev的 cxPopupEdit,自己搞,有很多消息要处理

是要类似ide编辑器的自动完成功能?
可以去看看IAutoComplete接口,是ie浏览器提供的自动完成组件,大概应用如下:

 IUnknown *pUnk = NULL;
 HRESULT hResult = CoCreateInstance(CLSID_AutoComplete, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IUnknown, (void**)&pUnk);
 if (SUCCEEDED(hResult))
 {
  IAutoComplete *pObj = NULL;
  IAutoComplete2 *pObjEx = NULL;
  if (S_OK == pUnk->QueryInterface(IID_IAutoComplete, (void**)&pObj))
  {
   if (S_OK == pUnk->QueryInterface(IID_IAutoComplete2, (void**)&pObjEx))
   {
    pObjEx->SetOptions(ACO_AUTOSUGGEST | ACO_FILTERPREFIXES | ACO_UPDOWNKEYDROPSLIST);
    pObjEx->Release();
   }
   CArray<CString, CString &> *pList = new CArray<CString, CString &>();
   pList->Add(CString(_T("adsf")));
   pList->Add(CString(_T("ccasadf")));
   pList->Add(CString(_T("caserwer")));
   pList->Add(CString(_T("dfasdf")));
   pList->Add(CString(_T("dde34")));
   pList->Add(CString(_T("cvre43")));
   pList->Add(CString(_T("sdfsfc")));
   pList->Add(CString(_T("23423dsdfsfs")));
   IEnumString *pEnumString = new CEnumString(pList);
   pObj->Init(m_edt1.GetSafeHwnd(), pEnumString, NULL, NULL);
   pEnumString->Release();
   pList->RemoveAll();
   delete pList;
   pObj->Release();
  }
  else
   MessageBox(_T("不支持的对象类型"));
  pUnk->Release();
 }
 else
  MessageBox(_T("com组件创建失败"));

当然还有扩展接口IAutoComplete2。
具体看msdn

JPEG 图像

combobox可以通过style来控制类型,有一个类型就是一个edit加一个listbox的模式,但是不能随时隐藏显示。
你实在不行就自己去用控件堆一个复合控件出来就是了。本身combobox就是复合控件。
说抓消息就甭想了,combobox内部的edit消息你抓不到的。除非你去hook


哪个控件有下拉多选框(TCheckComboBox)

哪个控件有类似cxGrid的下拉多选框(TCheckComboBox)?(如图)
Raize中好像没有。
下拉多选框中能支持多列显示更好(图中只有一列)。
记得DevExpress中有个TcxCheckComboBox,但它依赖DevExpress(用它得安装DevExpress,太大),有没有单独的控件,不依赖各控件包相关控件的?

PNG 图像

TcxCheckComboBox以及tms有、jvcl也有的.. 才几mb.


Delphi 按钮单击下拉显示窗体

实现单击按钮下拉窗体,并计算显示窗体的位置和方向。
含源码下载:

按钮单击下拉显示窗体.rar  (访问密码: 310772)

展示效果图:

Delphi信息系统开发中下拉弹出窗体,或者按钮弹出窗体的开发思路

编译不通过,提示
[dcc32 Fatal Error] SelFaceFrm.pas(7): F2613 Unit ‘Global’ not found.

删除Global该单元引用就可以了

就是因为mlskin的代码不给,所以自己写啊。 比mlskin使用简单多了
mlskin问题多多,窗体太多了地址报错的东西找不到原因。

如何实现类是combox下拉的操作但是下拉的列表是个GRID和button的组合

我做了一个,但在combox的change事件中执行打开dropdown,应为dropdown后其实是显示一个新窗体,可是这时combox的焦点也失去了 ,不能连续的输入筛选 ,简单的说就是点击一个combox后再起下方弹出个窗体 ,但combox不要失去焦点,该怎么写 我是delphi新手 麻烦 各位写的详细一点 急用 谢了

这个要控制 combox弹出框的焦点,具体看下combobox的源码,我很久以前折腾过

我用的是TEdit+TPanel,然后用edit的onchange+onexit搞的,TPanel可以放好多东西

用cxgrid只设一列伪装。

RzDBComboBox不知道能满足要求不?


这种下拉如何实现

输入前面的编号能自动定位到记录,输入后面的汉字也能自动定位到记录,请高手帮忙。

JPEG 图像

LoockUP


如何在按下回车时combobox就会显示出下拉列表

TComboBox->OnKeyPress

事件加入

if key=#13

then

postMessage(Combobox1.handle,CB_SHOWDROPDOWN,1,0);
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
  if Sender is TComboBox then
    with Sender as TComboBox do
    begin
      if (Key = #13) and not DroppedDown then
      begin
        Key:= #0;
        DroppedDown:= True;
      end;
    end;
end;

 

发表回复