Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

ListView изменение ширины столбца?   Найти похожие ветки 

 
AndrewVolkov   (2004-06-26 02:29) [0]

Доброго всем вечера.

Столкнулся с проблемой. Хочу отловить момент изменения ширины столбца у листВью в режиме vsReport. Смотрю, что он не посылает никаких сообщений в момент когда я изменяю ширину столбца. Если кто сталкивался с такой пролемой, подскажите...


 
Mim1 ©   (2004-06-26 04:03) [1]


> , что он не посылает никаких сообщений

Можно проверять изменилась ли ширина столбца в onmouseup событии.


 
AndrewVolkov   (2004-06-26 12:34) [2]

Почему то заголовок не является частью самого Листвью. У них разные хендлы. Поэтому отлавливая событие онМаусАп - я ничего не вижу, если МаусАп происходит с заголовком


 
Mim1 ©   (2004-06-26 18:55) [3]

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   ListView1: TListView;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 OldWndProc : Integer;

implementation

{$R *.dfm}

function MessageDlgWndProc(wnd:Hwnd; Message:integer;Wparam:WPARAM;
                    LParam:LParam):LongInt; stdcall;
 Procedure z;begin
   if OldWndProc <> 0 then
     Result := CallWindowProc(ptr(OldWndProc),wnd,Message,wParam,lParam);
 end;
begin
 case message of
   WM_LBUTTONUP : Form1.Caption := DateTimeToStr(now);
 end;
 z;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 OldWndProc := SetWindowLong(getwindow(ListView1.Handle,GW_CHILD),GWL_WNDPROC,integer(@MessageDlgWndProc));
end;

end.


 
AndrewVolkov   (2004-06-26 23:28) [4]

to Mim1

если не сложно, можно в двух словах как это работает

function MessageDlgWndProc(wnd:Hwnd; Message:integer;Wparam:WPARAM;
                   LParam:LParam):LongInt; stdcall;
Procedure z;begin
  if OldWndProc <> 0 then
    Result := CallWindowProc(ptr(OldWndProc),wnd,Message,wParam,lParam);
end;
begin
case message of
  WM_LBUTTONUP : Form1.Caption := DateTimeToStr(now);
end;
z;
end;


Почему она не объявляется и что там внутри делает процедура z

и
OldWndProc := SetWindowLong(getwindow(ListView1.Handle,GW_CHILD),GWL_WNDPROC,integer(@MessageDlgWndProc));

что мы получаем здесь.
Спасибо


 
Mim1 ©   (2004-06-27 01:13) [5]

getwindow(ListView1.Handle,GW_CHILD) \\ ищем дескриптор дочернего окна (шапки таблицы)

OldWndProc := SetWindowLong(getwindow(ListView1.Handle,GW_CHILD),GWL_WNDPROC,integer(@MessageDlgWndProc)); \\ заменяем оконную процедуру для найденого окна, и созраняетм адрес старой в переменной


> Почему она не объявляется


кто не обявляется?

и что там внутри делает процедура
> z

вызывает старую оконную процедуру.


 
AndrewVolkov   (2004-06-27 12:56) [6]

не объявляется в Type

Спасибо, в принципе все ясно. Но жутко мудренно.
Без подсказки сам такое через неделю не напишу...



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
1-1087820527
Klerk
2004-06-21 16:22
2004.07.11
Про Excel


3-1087301567
zevsus
2004-06-15 16:12
2004.07.11
Interbase(Firebird 1.5): Опустошение и репликация


14-1087977495
Дмитрий2004
2004-06-23 11:58
2004.07.11
25 кадр


1-1088449248
Godness
2004-06-28 23:00
2004.07.11
Объеденить ячейки в Excel e


4-1086095708
Long
2004-06-01 17:15
2004.07.11
Как послать WM_SYSCOMMAND,SC_RESTORE окну, которое