![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ListView изменение ширины столбца? [D7, WinXP]
AndrewVolkov © (2004-06-26 02:29:00)Доброго всем вечера.
Столкнулся с проблемой. Хочу отловить момент изменения ширины столбца у листВью в режиме vsReport. Смотрю, что он не посылает никаких сообщений в момент когда я изменяю ширину столбца. Если кто сталкивался с такой пролемой, подскажите...
AndrewVolkov (2004-06-27 12:56:00) [1]не объявляется в Type
Спасибо, в принципе все ясно. Но жутко мудренно.
Без подсказки сам такое через неделю не напишу...
Mim1 (2004-06-27 01:13:00) [2]getwindow(ListView1.Handle,GW_CHILD) \\ ищем дескриптор дочернего окна (шапки таблицы)
OldWndProc := SetWindowLong(getwindow(ListView1.Handle,GW_CHILD),GWL_WNDPROC,integer(@MessageDlgWndProc)); \\ заменяем оконную процедуру для найденого окна, и созраняетм адрес старой в переменной
> Почему она не объявляется
кто не обявляется?
и что там внутри делает процедура
> z
вызывает старую оконную процедуру.
AndrewVolkov (2004-06-26 23:28:00) [3]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-26 18:55:00) [4]
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 12:34:00) [5]Почему то заголовок не является частью самого Листвью. У них разные хендлы. Поэтому отлавливая событие онМаусАп - я ничего не вижу, если МаусАп происходит с заголовком
Mim1 (2004-06-26 04:03:00) [6]
> , что он не посылает никаких сообщений
Можно проверять изменилась ли ширина столбца в onmouseup событии.