SendMessage(panel2.Handle,LB_SETHORIZONTALEXTENT, panel2.Width+30,   0);
这个方式可以给LISTBOX添加横向滚动条,但是换成PANEL就不行了,为什么,论坛中说是可以的,但是我就是实现不了,请教是什么原因,我用的是DELPHI7,谢谢。顺便再问一下,想学习VCL控件开发,有没有比较合适的书籍?

解决方案 »

  1.   

    TPanel应该没有处理LB_SETHORIZONTALEXTENT这条消息的HANDLER吧。这条消息是专门针对LISTBOX的。 看前缀LB_就是这个意思了。但是SendMessage(panel2.Handle,LB_SETHORIZONTALEXTENT, panel2.Width+30,   0);
    还是可以实现panel2.Width+30的。
      

  2.   

    TFormDemo = class(TForm)
        Panel: TPanel;
        ButtonDemo: TButton;
        procedure FormCreate(Sender: TObject);
        procedure ButtonDemoClick(Sender: TObject);
      private
        OldPanelWndProc: TWndMethod;
        procedure NewPanelWindowProc(var Message: TMessage);
      public
        { Public declarations }
      end;var
      FormDemo: TFormDemo;implementation{$R *.dfm}procedure TFormDemo.FormCreate(Sender: TObject);
    begin
      OldPanelWndProc := Panel.WindowProc;
      Panel.WindowProc := NewPanelWindowProc;
    end;procedure TFormDemo.NewPanelWindowProc(var Message: TMessage);
    begin
      if Message.Msg = LB_SETHORIZONTALEXTENT then
        Panel.Width := Message.WParam;
      OldPanelWndProc(Message);
    end;procedure TFormDemo.ButtonDemoClick(Sender: TObject);
    begin
      SendMessage(Panel.Handle,LB_SETHORIZONTALEXTENT, Panel.Width+30, 0);
    end;
      

  3.   

    但是实现归实现, 与LB_SETHORIZONTALEXTENT这条消息没有什么直接的关系啊, 发送这条消息和发送其他的消息没有什么区别的。
      

  4.   

    谢谢 sanmaotuo(老冯)  的回答,对我帮助很大