如何做到鼠标滚动时,下拉列表的值不更改(100分)

  • 主题发起人 主题发起人 timlee
  • 开始时间 开始时间
T

timlee

Unregistered / Unconfirmed
GUEST, unregistred user!
滚动鼠标的本意是要下翻Grid记录,但如果光标在下拉列表上,则会先改变下拉列表的值,怎样做到鼠标的滚动时,下拉列表的值不变动?
 
听说要用API函数,有没有熟悉API函数的高手指点下[?]
 
用消息吧
 
这个还没听说谁去把它给搞定过呢。感觉蛮麻烦的,看看你的ComboBox中有没有相关事件吧。。。
 
LZ看下是否你想要的
两个下拉框,限定了1 2没限定
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
ComboBox2: TComboBox;
procedure FormMouseWheel(Sender: TObject;
Shift: TShiftState;
WheelDelta: Integer;
MousePos: TPoint;
var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormMouseWheel(Sender: TObject;
Shift: TShiftState;
WheelDelta: Integer;
MousePos: TPoint;
var Handled: Boolean);
begin
if self.ActiveControl is TCombobox then
begin
if self.ActiveControl.Name <> 'ComboBox1' then
exit;
Handled:=true;
if WheelDelta<0 then
Combobox1.Perform(WM_VSCROLL,SB_LINEDOWN,0)
else
Combobox1.Perform(WM_VSCROLL,SB_LINEUP,0);
end;
end;

end.
 
试过了
但好像滚动条也不支持鼠标滚动了。
接分,人人有分,永不落空
 
TComboBoxex = class(TComboBox)
protected
procedure WndProc(var Message: TMessage);override;
//直接处理WM_MOUSEWHEEL也行,这里直接覆盖这个消息过程
end;
自己定义一个combobox控件自己处理滚动事件
procedure TComboBoxex.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_MOUSEWHEEL then
begin
Message.Result := 0;
end
else
inherited WndProc(Message);
end;
 
后退
顶部