国立台北大学:ListView列宽改变时的消息响应

来源:百度文库 编辑:中财网 时间:2024/04/27 22:24:10

ListView列宽改变时的消息响应

分类: Delphi 2009-02-10 22:49 453人阅读 评论(4) 收藏 举报

[delphi] view plaincopy?

  1. unit Unit1;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  7.   Dialogs, StdCtrls, ComCtrls,CommCtrl;  
  8.   
  9. type  
  10.   PHD_NOTIFY=^HD_NOTIFY;  
  11.   TForm1 = class(TForm)  
  12.     ListView1: TListView;  
  13.     Button1: TButton;  
  14.     procedure FormDestroy(Sender: TObject);  
  15.     procedure Button1Click(Sender: TObject);  
  16.   private  
  17.     { Private declarations }  
  18.     oldProc:  TWndMethod;  
  19.     procedure NewProc(var Message: TMessage);  
  20.   public  
  21.     { Public declarations }  
  22.   end;  
  23.   
  24. var  
  25.   Form1: TForm1;  
  26.   
  27. implementation  
  28.   
  29. {$R *.dfm}  
  30.   
  31. procedure TForm1.NewProc(var Message: TMessage);  
  32. var hn:PHD_NOTIFY;  
  33. begin  
  34.   if message.Msg=WM_NOTIFY then  
  35.   begin  
  36.     hn:=PHD_NOTIFY(Message.LParam);  
  37.     if(hn^.Hdr.code=HDN_BEGINTRACKA)or(hn^.hdr.code=HDN_BEGINTRACKW) then  
  38.     begin  
  39.       // Message.Result   :=   1;     加入这一行就使的列头不能改变宽度   
  40.       //   如果要在拖动完成后作处理,可以判断hn->hdr.code是否   
  41.       //   等于HDN_ENDTRACKA或HDN_ENDTRACKW,然后作处理。   
  42.       ShowMessage('hehe');  
  43.     end  
  44.     else  
  45.       ListView1.Dispatch(Message);  
  46.   end;    
  47. end;  
  48.   
  49. procedure TForm1.FormDestroy(Sender: TObject);  
  50. begin  
  51.   ListView1.WindowProc:=OldProc;  
  52. end;  
  53.   
  54. procedure TForm1.Button1Click(Sender: TObject);  
  55. begin  
  56.   OldProc:= ListView1.WindowProc;  
  57.   ListView1.WindowProc:= NewProc;  
  58. end;  
  59.   
  60. end.