Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 25999
Рейтинг: 2104
#76: 2022-05-01 21:38:03 ЛС | профиль | цитата
ric писал(а):
посмотри ошибку

Убери XP-стиль, и ошибка исчезнет.

--- Добавлено в 2022-05-01 22:01:00

Можно еще попытаться добавлять нужную ширину при добавлении столбца, но обязательно отличную от дефолтной
Схема

Add(MainForm,5412717,434,154)
{
Height=386
Name="form"
Position=1
Point(Handle)
Point(Width)
link(onCreate,8279789:doTimer,[(473,174)(473,202)(263,202)(263,216)])
}
Add(MST_ColAction,935753,385,210)
{
MSTControl="tab"
}
Add(DoData,5286389,336,210)
{
Data=String(col;110)
link(onEventData,935753:doColAction,[])
}
Add(MTStrTbl,2452207,371,154)
{
Top=32
Width=384
Height=315
Align=5
Font=[MS Sans Serif,8,1,0,204]
TabOrder=-1
Name="tab"
ColorSp=12639424
ColDelimiter=";"
ColumnWidth=120
ColorItems=0
HeaderDragDrop=0
TextAlign=2
Grid=0
InfoTip=1
SmallIconsManager="ico2"
DrawManager="userE"
Point(Handle)
Point(ItemAtPos)
Point(onDblClick)
Point(doFont)
}
Add(Timer,8279789,273,210)
{
Interval=500
Enable=1
AutoStop=6
link(onTimer,5286389:doData,[])
}
Add(StyleXP,1464817,273,154)
{
}

Я пока не вижу решения на уровне компонента.

Редактировалось 2 раз(а), последний 2022-05-01 22:01:18
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 161
Рейтинг: 3
#77: 2022-05-01 22:12:20 ЛС | профиль | цитата
это я знаю а как со стилем.
карма: 1

0
Разработчик
Ответов: 25999
Рейтинг: 2104
#78: 2022-05-01 22:24:42 ЛС | профиль | цитата
ric писал(а):
это я знаю а как со стилем.

Пост выше, примерная схема. Решения на уровне компонента я не вижу.

Редактировалось 1 раз(а), последний 2022-05-01 22:25:35
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Разработчик
Ответов: 25999
Рейтинг: 2104
#79: 2022-05-02 00:50:48 ЛС | профиль | цитата
Обновись с SVN, я исправил добавление колонок для XP-стиля.
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 161
Рейтинг: 3
#80: 2022-05-02 01:01:02 ЛС | профиль | цитата
Хорошо, спасибо посмотрю.
карма: 1

0
Ответов: 161
Рейтинг: 3
#81: 2022-05-02 10:56:49 ЛС | профиль | цитата
nesco теперь со стилем и без такая проблема, исчезает разметка столба, сделай откат назад, лучше ширину буду менять.
ScreenGif
Add(MainForm,5412717,273,217)
{
Height=386
Name="form"
Position=1
Point(Handle)
Point(Width)
link(onCreate,8279789:doTimer,[])
}
Add(MST_ColAction,935753,490,231)
{
MSTControl="tab"
}
Add(DoData,5286389,392,231)
{
Data=String(col;110)
link(onEventData,9976398:doEvent1,[])
}
Add(MTStrTbl,2452207,476,168)
{
Top=32
Width=384
Height=315
Align=5
Font=[MS Sans Serif,8,1,0,204]
TabOrder=-1
Name="tab"
ColorSp=12639424
ColDelimiter=";"
ColumnWidth=110
ColorItems=0
HeaderDragDrop=0
TextAlign=2
Grid=0
InfoTip=1
Point(Handle)
Point(ItemAtPos)
Point(onDblClick)
Point(doFont)
}
Add(Timer,8279789,343,231)
{
Interval=500
Enable=1
AutoStop=6
Point(onStop)
link(onTimer,5286389:doData,[])
}
Add(MST_RowAction,4842353,490,280)
{
MSTControl="tab"
}
Add(Hub,9976398,441,231)
{
link(onEvent1,935753:doColAction,[])
link(onEvent2,4842353:doRowAction,[(473,244)(473,286)])
}
Add(StyleXP,2073371,273,182)
{
}


Редактировалось 2 раз(а), последний 2022-05-02 10:58:03
карма: 1

0
Разработчик
Ответов: 25999
Рейтинг: 2104
#82: 2022-05-02 13:47:46 ЛС | профиль | цитата
ric писал(а):
теперь со стилем и без такая проблема, исчезает разметка столба, сделай откат назад, лучше ширину буду менять.
ScreenGif

Это не поможет, я уже пробовал. Так же точно иногда пропадает, если вернуть назад.
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 161
Рейтинг: 3
#83: 2022-05-02 14:28:07 ЛС | профиль | цитата
не пропадало, вроде бы не замечал, переотресовка формы помогает но это не то, моргает то и дело.
карма: 1

0
Разработчик
Ответов: 25999
Рейтинг: 2104
#84: 2022-05-02 15:00:42 ЛС | профиль | цитата
ric писал(а):
не пропадало, вроде бы не замечал, переотресовка формы помогает но это не то, моргает то и дело.

Это лаг самой системы, никак не зависящий от правок, тк я ничего не добавлял, а просто разбил метод добавления столбца на две части -- 1-е: создание столбца нулевой ширины; 2-е: уже после создания столбца назначение ему ширины, а не сразу при создании. В таком случае, отрисовка скроллинга после добавления столбца происходит нормально, тк меняется ширина уже созданного столбца с нулевой до нужной.

P.S. Если после пропадания части сетки сдвинуть форму за экран и обратно, то сетка отрисуется нормально (это и есть перерисовка формы на уровне системы). Пока я не знаю решения этого вопроса. В любом случае надо попытаться найти событие для перерисовки, тк перерисовка необходима. Я пробовал отловить событие окончания скроллинга, но это не помогло, лаг так и остался. Я так же не исключаю, что это лаг даже не системы, а самой библиотеки KOL, те на уровне библиотеки не подается команда на перерисовку в нужный момент.

Редактировалось 11 раз(а), последний 2022-05-02 15:47:45
карма: 22
Если что-то хочешь сделать хорошо -- сделай сам!
0
Ответов: 161
Рейтинг: 3
#85: 2022-05-02 15:56:45 ЛС | профиль | цитата
ок
карма: 1

0
Разработчик
Ответов: 25999
Рейтинг: 2104
#86: 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
Ответов: 161
Рейтинг: 3
#87: 2022-05-03 19:20:36 ЛС | профиль | цитата
nesco писал(а):
Попробуй заменить код функции WndHDR

Работает красота
Благодарствую.
карма: 1

0
87
Сообщение
...
Прикрепленные файлы
(файлы не залиты)