怎样使下拉框部件的编辑部分只读?(50分)

  • 主题发起人 vagabond1998
  • 开始时间
V

vagabond1998

Unregistered / Unconfirmed
GUEST, unregistred user!

我的目的是,当设置“只读”状态时,
原来的下拉框显示只读信息:既不能在
编辑框里输入;又不能在供选条目中
选择。而且不设置它的enabled为false。
(因为我还想要它显示提示信息)
我试过以下两种方法:
(1) OnKeyDown,并把Key参数设置为0,但是不管用
(2)OnKeyPress,但是不能屏蔽光标键,所以仍然可以通过
光标键选择下拉框里的条目
我该怎么办呢?
多谢你的解答。
 
设置风格为csSimple!
需要选择时,再设回来.
 
单纯设置为csSimple还是不行的。
因为用户可以用光标键选择另外的项!
 
Sorry!
csSimple只屏蔽了鼠标,没屏蔽键盘.不好意思!
要屏蔽键盘只能自己继承个控件了.因为光标/Tab等键不触发OnkeyDown.
因为OnkeyDown由CN_KeyDown触发,而光标/Tab等键触发cm_WantSpecial消息.
eg:
TMyButton = Class(TButton)
procedure cmWantSpecial(var Message: TCMWantSpecialKey);
message cm_WantSpecial;
...
procedure cmWantSpecial(var Message: TCMWantSpecialKey) ;
begin
if (Message.CharCode <> VK_UP)
and (Message.CharCode <> VK_DOWN) then
inherited;
end;

然后使用该控件即可!
 
不想自己写控件只好用笨办法了.
1.将Style置为csSimple.去鼠标.
2.将Items暂存在另外的TStringList(如MyList1)中,
myList1.Assign(ComboBox1.Items);
然后,ComboBox1.Items.Clear,使光标无法选择.
3.在OnkeyPress中,Key:=#0;屏蔽输入.
4. 需要时,将暂存的数据再拷回来.ComboBox1.Items.Assign(MyList1);
 
sigh,看来只能这样了。多谢DSP的解答!
另外还有问题请教。
你刚才说光标键键盘动作不触发OnKeyDown似乎跟我跟踪的
结果有出入。因为键盘上的任何按键动作,都会触发这个
事件。所以我想,如果写OnKeyDown事件处理就可以解决的话
应该是再好不过了。但是问题是:
(1)该事件的Key参数的含义是什么,它是可变参数,怎样
改变它的值,使得这个参数值不再被翻译、传递下去。

新手求教,不好意思。

 
procedure TForm1.ComboBox1KeyPress(Sender: TObject;
var Key: Char);
begin
key := #0;
end;

procedure TForm1.ComboBox1KeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
begin
key := 0;
end;

已经搞定,hehe!
 
接受答案了.
 
顶部