none
Winfomr不能实现ListView的标题加高(是标题),可是Delphi能实现,谁帮我翻译一下 RRS feed

  • 问题

  • 以下是Delphi实现的标题加高的代码:
    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, ComCtrls, CommCtrl;

    type
      TForm1 = class(TForm)
        ListView1: TListView;
        ListView2: TListView;
        Label1: TLabel;
        Label2: TLabel;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
        Form1: TForm1;
        lvhOldProc, lvhNewProc: TFarProc;
        hHeader: THandle;

    implementation

    {$R *.dfm}

    function LvHeaderNewWndProc(h: THandle; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
    var
        phdl: PHDLayout;
        prct: PRect;
        pwp: PWindowPos;
    begin
        Result := CallWindowProc(lvhOldProc, h, uMsg, wParam, lParam);

        if uMsg = HDM_LAYOUT then
        begin
            phdl := PHDLayout(lParam);
            prct := PRect(phdl.Rect);
            pwp := PWindowPos(phdl.WindowPos);
            pwp.cy := pwp.cy + 10; // Header默认高是17,修改成17 + 10 = 27;
            prct.top := pwp.cy + 2;
        end;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
        hHeader := ListView_GetHeader(ListView1.Handle);

        lvhOldProc := FARPROC(GetWindowLong(hHeader, GWL_WNDPROC));
        SetWindowLong(hHeader, GWL_WNDPROC, Longint(@LvHeaderNewWndProc));
    end;

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
        SetWindowLong(hHeader, GWL_WNDPROC, Longint(lvhOldProc));
    end;

    end.
    2009年6月29日 16:21

答案

全部回复

  • 你好!
         在.NET下ListView的标题栏很难实现增加高度的效果啊!
    周雪峰
    2009年6月30日 4:14
    版主
  • 你好!
         在.NET下ListView的标题栏很难实现增加高度的效果啊!
    周雪峰
    Delphi能作的事,难道C#就不能作吗??C#不是号称最大强的语言吗?说什么具有C++的行动力吗...
    2009年6月30日 5:52
  • 我感觉这个不是C#的问题,是这个控件设计的时候没有这样设计,你也可以自己实现这样一个ListView!
    周雪峰
    2009年6月30日 9:14
    版主