Вверх ↑
Ответов: 2433
Рейтинг: 693
#1: 2025-06-26 14:23:55 ЛС | профиль | цитата
nesco, понимаю что лето и возможно ты лежишь где-то на плЯжу потягиваешь махИто и отгоняешь назойливых дам предлагающих тебе "пошалить". Но надо что-то решать с таблицей
Если смотрел мои наработки по менеджеру RowDrag, то что думаешь.
И вот еще тебе интересный момент в таблице:
Есть ItemAtPos которое выдает индекс строки, который получает по текущей позиции курсора, и подиндекс (столбца) который присваиваться переменной NewCurIdx как раз в WndProcTabGrid.

Выходи что при подключении MST_UseEditCtrl отключается WndProcTabGrid переменная NewCurIdx не обновляется и у ItemAtPos подиндекс всегда равен 0.

Мало того что ItemAtPos выдает точный подиндекс только после нажатия на строку таблицы (WM_MOUSEMOVE не задействован), так еще и не работает нормально при подключении MST_UseEditCtrl.

Вот тестовая схема, на случай
nesco писал(а):
Ни хрена не понял, но очень интересно.


Add(MainForm,4046509,140,182)
{
Width=561
Height=599
Font=[MS Sans Serif,12,0,0,1]
Caption="Кликать по ячейке чтоб получить индекс столца"
Position=1
link(onCreate,10146517:doEnum,[])
}
Add(MTStrTbl,16035729,343,189)
{
Top=35
Width=530
Height=515
Align=5
ParentFont=0
Name="Table_Column"
Layout="ver"
Columns=#10:Страна=220|16:Население=150==2|11:Дата=200==2|18:% Населения=150==2|
FlatScroll=1
Redaction=0
HeaderDragDrop=0
CheckBoxes=0
Grid=0
DrawManager="myDraw"
Point(doHeight)
Point(onMouseMove)
Point(ItemAtPos)
link(onMouseMove,12591694:doAdd,[(390,223)(390,258)])
AddHint(-34,-32,83,13,Name)
}
Add(ArrayEnum,10146517,210,196)
{
link(onItem,2002120:doMT,[])
link(Array,8154399:Array,[])
}
Add(MT_String,2002120,252,189)
{
link(onResult,1274236:doRowAction,[])
}
Add(MST_RowAction,1274236,294,189)
{
MSTControl="Table_Column"
}
Add(StrList,8154399,196,133)
{
Strings=#41:Индия;1 434 725 000;14 января 2025;17.55%|40:Китай;1 409 670 000;1 января 2024;17.24%|35:США;341 169 410;1 января 2025;4.09%|40:Индонезия;282 477 584;30 июня 2024;3.45%|39:Пакистан;241 499 431;1 марта 2023;2.95%|40:Нигерия;226 826 390;14 января 2025;2.79%|41:Бразилия;203 080 756;1 августа 2022;2.48%|40:Бангладеш;169 828 911;15 июня 2022;2.08%|38:Россия;146 150 789;1 января 2024;1.79%|39:Мексика;133 649 565;1 января 2021;1.63%|36:Япония;123 890 000;1 июня 2024;1.52%|39:Эфиопия;118 550 298;1 января 2024;1.45%|42:Филиппины;115 498 982;14 января 2025;1.41%|62:Демократическая Республика Конго;108 407 721;1 июля 2022;1.33%|37:Египет;105 914 499;1 января 2024;1.3%|30:Вьетнам;100 309 200;2023;1.23%|39:Турция;85 279 553;31 декабря 2022;1.04%|33:Иран;85 000 000;16 мая 2023;1.04%|41:Германия;84 669 326;31 декабря 2023;1.04%|43:Великобритания;68 265 209;1 июля 2023;0.83%|38:Франция;66 150 0001;февраля 2024;0.81%|40:Таиланд;65 969 270;1 сентября 2024;0.81%|33:ЮАР;63 020 000;30 июля 2024;0.77%|41:Танзания;61 741 120;23 августа 2022;0.76%|37:Италия;58 966 453;31 марта 2024;0.72%|37:Кения;57 564 296;25 августа 2021;0.7%|35:Мьянма;54 045 000;1 июля 2019;0.66%|47:Республика Корея;51 780 579;1 января 2020;0.63%|36:Судан;49 320 450;14 января 2025;0.6%|40:Колумбия;49 258 494;30 октября 2018;0.6%|38:Испания;46 934 632;1 января 2021;0.57%|34:Алжир;46 653 000;1 июля 2021;0.57%|38:Аргентина;46 082 160;18 мая 2022;0.56%|35:Уганда;45 935 046;10 мая 2024;0.56%|33:Ирак;41 310 000;1 июля 2019;0.51%|36:Канада;41 012 563;1 апреля 2024;0.5%|39:Марокко;37 997 370;14 января 2025;0.46%|37:Польша;37 749 000;1 января 2023;0.46%|42:Узбекистан;37 587 639;14 января 2025;0.46%|40:Малайзия;35 208 885;14 января 2025;0.43%|35:Ангола;34 825 000;1 июля 2019;0.43%|41:Афганистан;34 262 840;1 апреля 2022;0.42%|46:Саудовская Аравия;32 175 224;10 мая 2022;0.39%|36:Перу;32 162 184;1 декабря 2018;0.39%|33:Гана;31 418 000;1 июля 2019;0.38%|37:Мозамбик;31 366 000;1 июля 2019;0.38%|34:Йемен;31 162 000;1 июля 2019;0.38%|37:Непал;29 164 578;25 ноября 2021;0.36%|39:Мадагаскар;28 680 342;1 июня 2018;0.35%|
}
Add(Label,13313098,504,252)
{
Left=495
Top=280
Height=25
Align=2
ParentFont=0
AutoSize=1
}
Add(FormatStr,10252950,448,252)
{
Mask="строка: %1 столбец: %2"
link(onFString,13313098:doText,[])
}
Add(MT_Add,12591694,399,252)
{
InputMT=2
link(onAdd,10252950:doString,[])
link(Data,16035729:ItemAtPos,[(405,240)(377,240)])
}
Add(MST_UseEditCtrl,9771810,420,161)
{
@Hint=#44:Удалить элемент чтоб получать индекс столбца|
MSTControl="Table_Column"
AddHint(-8,-46,180,26,@Hint)
}

Как и в теме по MST_DragRowManage предлагаю чтоб MST_UseEditCtrl не отключал WndProcTabGrid, как видно из описанного выше, от работы этой функции зависят другие участки кода таблицы.
Добавить обработку WM_MOUSEMOVE чтоб обновлять NewCurIdx и блокировать необходимые участки кода при подключении MST_UseEditCtrl.

Но тут тебе виднее как это реализовать. Насколько понял то WndProcTabGrid отключается только чтоб не происходило
EscCell(NewLine);
Мое предложении в теме по MST_DragRowManage
if FUseEdit then exit;
не годится.
карма: 11

0
Редактировалось 3 раз(а), последний 2025-06-26 14:28:06