我用一个combobox1让用户选择要查询的字段,另外combobox2让用户输入选择字段值,也可输入内容.combobox2是用adoquery遍历了数据库的该字段所有不空值.
但是客户输入时有点问题:
假设数据库中:张三,张四
用户输入"张":张三就自己出来了,要查张四的话得修改查询信息,这时delete和backspace哪个都不好用,乱码.
但是客户输入时有点问题:
假设数据库中:张三,张四
用户输入"张":张三就自己出来了,要查张四的话得修改查询信息,这时delete和backspace哪个都不好用,乱码.
解决方案 »
- 开发midas程序,在服务器端定义了一接口方法,客户端调用提示Invalid variant operation
- 求助!!运行时数据转换的错误
- delphi 给flash传数据问题,没指定错误。
- 100分,在线等 paradox 7.0 odbc 的驱动,有地方下载吗 ?
- 如何在DBGride控件中修改数据,而且如何将其写入的数据添入数据库?
- delphi语法
- 改变骤焦颜色
- 我如何引用其它单元的变量?
- 做http的下载,要有续传的,用什么技术?或好的控件?
- 在DELPHI中,如何用ADO调用数据库?
- 不好意思:问一简单问题为何有PAS文件没有FORM
- interface中的var与TYPE里的PUBLIC里面定义的变量有何区别.
!~这个空间本来就是用来查询的,用作输入和查询难免要出现错误!~
能不能编码让程序判断:假如有输入行为就把COMBOBOX给clear了?在哪个事件编码?
在KeyPress事件中执行ComboBox_XPMan_KeyPress可解决北问题。function IsNTSystem:Boolean;
var
info:OSVERSIONINFO;
begin
info.dwOSVersionInfoSize:=sizeof(info);
GetVersionEx(info);
Result:=info.dwPlatformId=VER_PLATFORM_WIN32_NT;
end;procedure ComboBox_XPMan_KeyPress(Sender:TObject;var Key: Char);
function HasSelectedText(CB_HWND:HWND; var StartPos, EndPos: DWORD): Boolean;
begin
SendMessage(CB_HWND, CB_GETEDITSEL, Integer(@StartPos),
Integer(@EndPos));
Result := EndPos > StartPos;
end;
var
StartPos, EndPos: DWORD;
OldText, SaveText: WideString; //关键在此,中间字符串要设为宽字符串型
LastByte: Integer;
TheCB:TComboBox;
CBHandle:HWND;
begin
if not IsNTSystem then Exit; //非NT系统则退出 TheCB:=TComboBox(Sender);
CBHandle:=TheCB.Handle; if not TheCB.AutoComplete then exit; if ord(Key) = VK_BACK then
begin
SaveText := TheCB.Text;
if HasSelectedText(CBHandle, StartPos, EndPos) then
begin
SendMessage(CBHandle,CB_GETEDITSEL,Integer(@StartPos),Integer(@EndPos));
Delete(SaveText, StartPos + 1, EndPos - StartPos);
SendMessage(CBHandle, CB_SETCURSEL, -1, 0);
TheCB.Text := SaveText;
SendMessage(CBHandle,CB_SETEDITSEL,0,MakeLParam(StartPos,StartPos));
Key := #0;
end
else if(TheCB.Style in [csDropDown,csSimple]) and (Length(SaveText)>0) then
begin
LastByte := StartPos;
OldText := Copy(SaveText, 1, LastByte - 1);
SendMessage(CBHandle, CB_SETCURSEL, -1, 0);
TheCB.Text := OldText + Copy(SaveText, EndPos + 1, MaxInt);
SendMessage(CBHandle, CB_SETEDITSEL, 0, MakeLParam(LastByte - 1,
LastByte - 1));
Key := #0;
end;
end;
end;