Вверх ↑
Разработчик
Ответов: 26112
Рейтинг: 2124
#1: 2022-05-02 21:53:53 ЛС | профиль | цитата
Попробуй заменить код функции WndHDR вот на этот:


function WndHDR(Sender: PControl; var Msg: TMsg; var Rslt: Integer): Boolean;
const
HDN_FIRST = -300; { Header }
HDN_ITEMCHANGINGA = HDN_FIRST - 0;
HDN_ITEMCHANGEDA = HDN_FIRST - 1;
HDN_DIVIDERDBLCLICKA = HDN_FIRST - 5;
HDN_BEGINTRACKA = HDN_FIRST - 6;
HDN_ENDTRACKA = HDN_FIRST - 7;
HDN_ITEMCHANGINGW = HDN_FIRST - 20;
HDN_ITEMCHANGEDW = HDN_FIRST - 21;
HDN_DIVIDERDBLCLICKW = HDN_FIRST - 25;
HDN_BEGINTRACKW = HDN_FIRST - 26;
HDN_ENDTRACKW = HDN_FIRST - 27;
type
tagNMHEADERA = packed record
Hdr: TNMHdr;
Item: Integer;
Button: Integer;
PItem: PHDItemA;
end;
HD_NOTIFY = tagNMHEADERA;
PHDNotify = ^HD_NOTIFY;
PNMHEADER = ^tagNMHEADERA;
var
fClass: ThiMTStrTbl;
ind: integer;
di, dw: TData;
s: string;
begin
Result := false;
fClass := ThiMTStrTbl(Sender.Tag);
with fClass do
begin
case Msg.message of
WM_NOTIFY:
case HD_NOTIFY(Pointer(Msg.LParam)^).Hdr.code of
HDN_ITEMCHANGINGA, HDN_ITEMCHANGINGW:
_hi_onEvent(_event_onChangeWidth, Sender.LVColWidth[HD_NOTIFY(Pointer(Msg.LParam)^).Item]);
HDN_ENDTRACKA, HDN_ENDTRACKW:
begin
ind := HD_NOTIFY(Pointer(Msg.LParam)^).Item;
s := Sender.LVColText[ind] + _ColDlm +
int2str(PHDNotify(PNMHEADER(Msg.LParam))^.pItem^.cxy) + _ColDlm +
int2str(Sender.LVColImage[ind]) + _ColDlm +
int2str(ord(Sender.LVColAlign[ind]));
CList.Items[ind] := InitColStr(s);
dtInteger(di, ind);
dtInteger(dw, PHDNotify(PNMHEADER(Msg.LParam))^.pItem^.cxy);
di.ldata := @dw;
// _hi_onEvent_(_event_onChangeWidth, di);
end;
HDN_BEGINTRACKA, HDN_BEGINTRACKW, HDN_DIVIDERDBLCLICKA, HDN_DIVIDERDBLCLICKW:
if not FChangeWidth then
begin
Rslt := 1;
Result := True;
end;
end;
// Костыль для борьбы с лагом отрисовки сетки при скроллинге со cтилем XP;
WM_HSCROLL, WM_VSCROLL:
case LOWORD(Msg.wParam) of
SB_THUMBPOSITION, SB_THUMBTRACK, SB_ENDSCROLL: Sender.Invalidate;
end;
end;
end;
end;
карма: 22

0