Вверх ↑
Этот топик читают: Гость
Ответов: 2433
Рейтинг: 693
#241: 2025-06-18 13:33:38 ЛС | профиль | цитата
strannik_nebes, если все работает, то выкладывать ничего и не нужно.
strannik_nebes писал(а):
Я толком и не понял, что привело к поломке.
Скорее всего в одной папке с файлом проекта (sha) лежал старый файл кода (pas), что и привело к ошибки.
карма: 11

0
Разработчик
Ответов: 26300
Рейтинг: 2146
#242: 2025-06-18 19:37:23 ЛС | профиль | цитата
strannik_nebes писал(а):
я бы рад выложить файл, да он, после восстановления компонентов с SVN (обновления), пропал

В папке %HiAsm%/Save искал?

--- Добавлено в 2025-06-18 19:45:04

sla8a, ты закончил правки с селектором? Когда выкладывать будем?

Редактировалось 1 раз(а), последний 2025-06-18 19:45:04
карма: 22

0
Ответов: 197
Рейтинг: 5
#243: 2025-06-19 11:28:36 ЛС | профиль | цитата
nesco, Самого файла нет во всех папках Hiasm.
карма: 1

0
Ответов: 2433
Рейтинг: 693
#244: 2025-06-20 14:32:35 ЛС | профиль | цитата
nesco писал(а):
ты закончил правки с селектором?
Была идея сделать свойство которое позволяло бы оставлять выделенную строку в независимости от действий пользователя. И свойство IgnoreEmptyField как изначально казалось решит эту проблему, но увы. Что-то изменять в IgnoreEmptyField думаю не нужно, пусть работает как есть, с своей задачей он справляется. Но изначальную идею реализовать пока не получается и решения пока не видно.
Если получится прикрутить DragRow как менеджер к таблице, то выложу получившееся. Если не получится, то на данный момент это последнее правки.
карма: 11

0
Разработчик
Ответов: 26300
Рейтинг: 2146
#245: 2025-06-20 17:40:40 ЛС | профиль | цитата
sla8a писал(а):
Была идея сделать свойство которое позволяло бы оставлять выделенную строку в независимости от действий пользователя

Ни хрена не понял, но очень интересно.
карма: 22

0
Ответов: 2433
Рейтинг: 693
#246: 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;
не годится.

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

0
Разработчик
Ответов: 26300
Рейтинг: 2146
#247: 2025-06-26 15:06:14 ЛС | профиль | цитата
Но ты намутил. Делаем одно, и тут выясняется, что куча всего другого вылазит, которое надо либо блокировать, либо не блокировать. И я вообще не знаю пока, как работает конкретно твой модуль, что бы что-то менять в других. У меня сейчас пока нет много времени на серьезное углубление в код.
карма: 22

0
Ответов: 2433
Рейтинг: 693
#248: 2025-06-26 15:11:57 ЛС | профиль | цитата
nesco писал(а):
Но ты намутил.
Сейчас разговор не о моих доработках. Ошибка не от моих правок. Проверь выложенную мной тестовую схему. ItemAtPos не работает правильно. И тут вначале надо решить это, а уже потом я подгоню элемент. Только предлагаю не отключать WndProcTabGrid.
карма: 11

0
Разработчик
Ответов: 26300
Рейтинг: 2146
#249: 2025-06-26 15:33:36 ЛС | профиль | цитата
Я еще пока толком не смотрел. Но возник вопрос -- а нам точно надо иметь два обработчика с одинаковым именем? Нельзя ли их сделать независимыми?
карма: 22

0
Ответов: 2433
Рейтинг: 693
#250: 2025-06-26 16:07:17 ЛС | профиль | цитата
nesco писал(а):
точно надо иметь два обработчика с одинаковым именем?

Уточни о каких двух речь?
В ошибки описанной мной выше речь об одном WndProcTabGrid
карма: 11

0
Разработчик
Ответов: 26300
Рейтинг: 2146
#251: 2025-06-26 16:39:43 ЛС | профиль | цитата
sla8a писал(а):
В ошибки описанной мной выше речь об одном WndProcTabGrid

Я про него и говорю. Может стоит их сделать вообще независимыми.
карма: 22

0
Разработчик
Ответов: 26300
Рейтинг: 2146
#252: 2025-07-01 01:05:07 ЛС | профиль | цитата
Таак. Первое, что нужно сделать, так это сделать вот так в MST_UseEditCtrl, тогда у тебя заработают все события основного контрола таблицы.


function THIMST_UseEditCtrl._OnMessage;
...
begin
Result := false;
TRY
...
FINALLY
Result := Result or _hi_OnMessage(OldMessage, Msg, Rslt);
END;
end;
карма: 22

0
Разработчик
Ответов: 26300
Рейтинг: 2146
#253: 2025-07-01 03:02:14 ЛС | профиль | цитата
Вот. Первая редакция по мотивам темы про ItemAtPos -- https://forum.hiasm.com/getfile/40592

Редактировалось 1 раз(а), последний 2025-07-01 03:02:49
карма: 22

0
файлы: 1MTStrTbl_ItemAtPos_001.zip [15.8KB] [20]
Ответов: 2433
Рейтинг: 693
#254: 2025-07-01 10:31:02 ЛС | профиль | цитата
nesco, вроде все хорошо, ItemAtPos сейчас выдает постоянно правильные данные. Но вопрос с ThiMTStrTbl.detachwndproc остался открытым. hiMST_Groups тоже отключает detachwndproc, соответственно перестанет работать и ItemAtPos. Если по итогам твоих последних правок отключать detachwndproc в hiMST_Groups не планируется, то не проще ли удалить из ThiMTStrTbl detachwndproc вообще?
карма: 11

0
Разработчик
Ответов: 26300
Рейтинг: 2146
#255: 2025-07-01 12:50:09 ЛС | профиль | цитата
sla8a писал(а):
Если по итогам твоих последних правок отключать detachwndproc в hiMST_Groups не планируется, то не проще ли удалить из ThiMTStrTbl detachwndproc вообще?

Да он в группах, похоже, и нах не нужен, тк ничего там с таблицей не связано. Добавил в обработчик групп TRY...FINALLY и отключил detachwndproc. Но удалять пока его не буду. Исправления в архиве групп.

Редактировалось 1 раз(а), последний 2025-07-01 12:51:30
карма: 22

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