Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26287
Рейтинг: 2145
#196: 2025-04-23 17:00:23 ЛС | профиль | цитата
Да че-то не работает нормально. Черт бы с ним, оставим как есть

--- Добавлено в 2025-04-23 17:19:02

Кстати, фокус можно скрыть проще. Вот код на Delphi


  SendMessage(ListView1.Handle, WM_UPDATEUISTATE, MakeLong(UIS_SET, UISF_HIDEFOCUS), 0);

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

0
Ответов: 2415
Рейтинг: 691
#197: 2025-04-29 10:43:03 ЛС | профиль | цитата
nesco писал(а):
фокус можно скрыть проще. Вот код на Delphi
Я бы этот код в некоторые элементы бы вставил и как свойство вывел. В такие как RadioButton,CheckBox,Button.
карма: 11

0
Разработчик
Ответов: 26287
Рейтинг: 2145
#198: 2025-04-29 16:25:13 ЛС | профиль | цитата
sla8a писал(а):
Я бы этот код в некоторые элементы бы вставил и как свойство вывел. В такие как RadioButton,CheckBox,Button.

Да можно сделать. Я пока этим не занимался. Есть интересный проект по таблице. Пока не буду говорить, что это такое, что бы не сглазить
карма: 22

0
Ответов: 2415
Рейтинг: 691
#199: 2025-05-04 13:44:17 ЛС | профиль | цитата
nesco, если что то пока не обновляй, буду менять свойство IgnoreEmptyField. Нужно добиться чтоб при получении фокуса при нажатии на пустое поле таблицы, выделение с строки не удалялось.
карма: 11

0
Разработчик
Ответов: 26287
Рейтинг: 2145
#200: 2025-05-05 03:19:17 ЛС | профиль | цитата
sla8a писал(а):
если что то пока не обновляй, буду менять свойство IgnoreEmptyField. Нужно добиться чтоб при получении фокуса при нажатии на пустое поле таблицы, выделение с строки не удалялось.

Понял. Пока не обновляю.
карма: 22

0
Разработчик
Ответов: 26287
Рейтинг: 2145
#201: 2025-05-15 15:39:09 ЛС | профиль | цитата
Вот над каким проектом я сейчас работаю. Точнее, почти его закончил -- MST_Groups.
Единственное, что только немного напрягает, так это обязательное наличие стиля XP. Для штатного fpc это требует наличия прилинковки манифеста. Что вполне несложно сделать. Вот скриншот откомпилированной в штатном fpc версии с прилинковкой манифеста



--- Добавлено в 2025-05-15 15:47:13

Что еще можно добавить, так это то, что компонент крайне сложен в понимании (и не только в понимании, но и в создании тоже ) и требует наличия знаний схемотехники и функционала HiAsm. Но зато дает вам отличный схемный функционал. И вспоминая недавние телодвижения с мульти-таблицами, при наличии такого компонента, задача решилась бы на ура.

Редактировалось 4 раз(а), последний 2025-05-15 15:51:10
карма: 22

2
Голосовали:sla8a, Gunta
Ответов: 2415
Рейтинг: 691
#202: 2025-05-19 14:50:04 ЛС | профиль | цитата
nesco, смотрится интересно. Когда тестировать будем?
карма: 11

0
Разработчик
Ответов: 26287
Рейтинг: 2145
#203: 2025-05-19 22:58:49 ЛС | профиль | цитата
sla8a писал(а):
nesco, смотрится интересно. Когда тестировать будем?

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

Редактировалось 1 раз(а), последний 2025-05-19 22:59:11
карма: 22

0
Разработчик
Ответов: 26287
Рейтинг: 2145
#204: 2025-05-24 01:17:03 ЛС | профиль | цитата
Почти закончил. Вот, что получилось



Редактировалось 1 раз(а), последний 2025-05-24 01:17:53
карма: 22

0
Разработчик
Ответов: 26287
Рейтинг: 2145
#205: 2025-05-25 00:31:28 ЛС | профиль | цитата
Что-то не могу скопировать файлы в файлообменник. Вот временная ссылка на архив с компонентом - https://disk.yandex.ru/d/VfrFpcLh-VNb-Q. Можете проверить его работоспособность. Проверено на обоих штатных компиляторах, но с поддержкой манифеста XP-стиля.

Редактировалось 2 раз(а), последний 2025-05-25 00:35:01
карма: 22

2
Голосовали:sla8a, Gunta
Ответов: 2415
Рейтинг: 691
#206: 2025-05-25 11:17:21 ЛС | профиль | цитата
nesco, очень хорошо получилось! Есть куча вопросов:
1. Иконку элемента забыл в архив положить.
2. При включении отображения групп и включенной решетке (Grid = true) вертикальные линии границ столбцов не отображаются. Это фича или баг?
3. Нет свойства для того чтоб сразу отображались группы (только когда толкнешь doEnableGroupViewer = 1). Есть какие-то ограничения или можно добавить свойство?
4. При загрузки схемы всплывает что у тебя есть свойство HideFocus, это ты уже внес у себя в WinControl.ini для всех элементов? У меня при свойстве у таблицы FocusFrame=false на строках нет селектора, а на названия групп отображается. Селектор с названий групп можно отключить?
5. От стиля XP получится избавится в будущем сохраняя работу групп?
6. Шрифт (размер) названия групп можно изменить? А то даже при увеличении размера шрифта в таблице, шрифт групп остается маленьким (8 скорее всего).
7. При выборе группы (кликом курсора по названию группы) происходит задержка и только потом выбор группы. Это заметно как на твоей схеме из архива, так и на моей где всего две группы. С чем связана такая задержка?
8. Если в группе нет дочерних строк, то она не отображается. К примеру в твоей схеме удалить Петрова из группы Админ и группа перестает отображаться. Это можно сделать по свойству (ShowEmptyGroupe = True/False)?

Схему ты конечно тестовую сделал хорошую, но не мешало бы и сделать еще одну попроще, чтоб было понятно как начать работать с таким элементом. Как вариант что-то вот такое:

Add(MainForm,2953706,315,413)
{
Width=802
Height=424
link(onCreate,15053014:doEnum,[])
}
Add(MTStrTbl,6747634,672,420)
{
Width=786
Height=385
Align=5
Font=[MS Sans Serif,12,0,0,1]
Name="myTable"
Columns=#12:Название=400|12:Значение=120|
Alternating=1
AlternatingColor=15793151
}
Add(MST_Groups,8543499,609,469)
{
GroupCollapsable=1
MSTControl="myTable"
}
Add(StyleXP,8844878,315,371)
{
}
Add(StrList,6353263,371,378)
{
Strings=#26:0;Редактора форм;0;55295;1|14:1;Ширина;400;1|14:1;Высота;600;1|19:1;Цвет поля;White;1|15:1;Маркеры;нет;1|22:0;Таблица;0;12639424;2|12:1;Сетка;да;2|20:1;Высота строки;24;2|
}
Add(ArrayEnum,15053014,385,427)
{
link(onItem,7302297:doSplit,[])
link(onEndEnum,5178369:doData,[(425,440)(425,545)])
link(Array,6353263:Array,[])
}
Add(MST_RowAction,6457972,609,420)
{
MSTControl="myTable"
}
Add(MT_String,1985565,553,420)
{
link(onResult,6457972:doRowAction,[])
link(Str1,8779871:Var3,[(559,411)])
}
Add(If_else,11801584,476,427)
{
Op2=String(1)
link(onTrue,1985565:doMT,[])
link(onFalse,481735:doMT,[(527,440)(527,482)])
AddHint(-5,-21,31,13,Op2)
}
Add(MultiStrData,7302297,434,427)
{
Count=1
link(onPart1,11801584:doCompare,[])
}
Add(MT_String,481735,539,469)
{
link(onResult,8543499:doInsertGroup,[])
link(Str1,8779871:Var2,[])
}
Add(DoData,5178369,539,539)
{
Data=Integer(1)
link(onEventData,8543499:doEnableGroupViewer,[(590,545)(590,482)])
AddHint(-1,-21,21,13,Data)
}
Add(GetDataEx,8779871,539,406)
{
Angle=3
link(Data,7302297:RemaindStr,[(519,411)(519,483)(440,483)])
}
карма: 11

0
Ответов: 897
Рейтинг: 190
#207: 2025-05-26 19:12:29 ЛС | профиль | цитата
Мне тоже элемент понравился. Кажется, что он будет востребован.
И не такой уж сложный.
Пример группировки по любому столбцу.
https://forum.hiasm.com/getfile/40584
К данным не придираемся. Они просто сгенерированы

Редактировалось 3 раз(а), последний 2025-05-26 20:11:52
карма: 18

0
файлы: 1Группировка в таблице.zip [2.7KB] [19]
Ответов: 2415
Рейтинг: 691
#208: 2025-05-26 21:07:04 ЛС | профиль | цитата
nesco, продолжу вопросы по элементу:
9. Если включено редактирование в таблице Redaction=Tru. При двойном клике на названии группы начинается редактирования выбранной строки в группе (при свойстве GroupCollapsable=False). При свойстве GroupCollapsable=true редактирование начинается при раскрытии группы. Как по мне то нужно заглушку на это дело делать.
Элемент MST_UseEditCtrl правильно реагирует на двойной клик по названию группы и выдает сообщение только при двойном клике по строке (может эта информация поможет внести нужные изменения):
Add(MainForm,2953706,301,539)
{
Width=802
Height=424
link(onCreate,15053014:doEnum,[])
}
Add(MTStrTbl,6747634,658,546)
{
Width=786
Height=385
Align=5
Font=[MS Sans Serif,12,0,0,1]
Name="myTable"
Columns=#12:Название=400|12:Значение=120|
CheckBoxes=0
Alternating=1
AlternatingColor=15793151
}
Add(StrList,6353263,357,504)
{
Strings=#26:0;Редактора форм;0;55295;1|14:1;Ширина;400;1|14:1;Высота;600;1|19:1;Цвет поля;White;1|15:1;Маркеры;нет;1|22:0;Таблица;0;12639424;2|12:1;Сетка;да;2|20:1;Высота строки;24;2|22:0;Тестовая;0;2345345;3|
}
Add(ArrayEnum,15053014,371,553)
{
link(onItem,7302297:doSplit,[])
link(onEndEnum,5178369:doData,[(411,566)(411,671)])
link(Array,6353263:Array,[])
}
Add(MST_RowAction,6457972,595,546)
{
MSTControl="myTable"
}
Add(MT_String,1985565,539,546)
{
link(onResult,6457972:doRowAction,[])
link(Str1,8779871:Var3,[(545,537)])
}
Add(If_else,11801584,462,553)
{
Op2=String(1)
link(onTrue,1985565:doMT,[])
link(onFalse,481735:doMT,[(513,566)(513,608)])
AddHint(-5,-21,31,13,Op2)
}
Add(MultiStrData,7302297,420,553)
{
Count=1
link(onPart1,11801584:doCompare,[])
}
Add(MT_String,481735,525,595)
{
link(onResult,8543499:doInsertGroup,[])
link(Str1,8779871:Var2,[])
}
Add(DoData,5178369,525,665)
{
Data=Integer(1)
link(onEventData,8543499:doEnableGroupViewer,[(576,671)(576,608)])
AddHint(-1,-21,21,13,Data)
}
Add(GetDataEx,8779871,525,532)
{
Angle=3
link(Data,7302297:RemaindStr,[(505,537)(505,609)(426,609)])
}
Add(StyleXP,8844878,301,497)
{
}
Add(Message,11634716,686,742)
{
}
Add(MST_UseEditCtrl,16282395,623,735)
{
MSTControl="myTable"
link(onEnterCell,11634716:doMessage,[])
}
Add(MST_Groups,8543499,595,595)
{
MSTControl="myTable"
}
10. Нет события на раскрытие и закрытие группы onCollapseGroupe, не добавлял по какой-то причине или не дошли руки?
11. Не задействован Foщter (LVGF_FOOTER строка в нижней части группы). Он вроде работает (проверял). Думаешь не нужен или были причины не добавлять?

Редактировалось 1 раз(а), последний 2025-05-26 21:11:19
карма: 11

0
Разработчик
Ответов: 26287
Рейтинг: 2145
#209: 2025-05-26 23:30:50 ЛС | профиль | цитата
1.Добавил в архив по ссылке
2.Если ты про грид в группах, то он не будет работать. Не предусмотрено системой
3. Метод doEnableGroupViewer запускает отображение групп через системное сообщение. Никто не мешает подать 1 в любой момент для запуска отображения. Не вижу надобности делать это автоматически. И не стоит, КМК.
4. Да, внес. Но пока не добавлял на SVN.
5. Нет. Это наложенное ограничение системой. Группы работают только при наличии commctrl 6-й версии, а это и есть стиль XP, которое включается манифестом.
6. Я даже не в курсе. Системных сообщений по изменению шрифта групп не существует. Может он как-то наследуется, но я пока не знаю как.
7. Понятия не имею с чем это связано. Но у меня она тоже есть.
8. Так предусмотрено системой -- пустые группы не отображаются. В msdn специально даже на это сделан упор.
9. Оставим пока под вопросом.
10. А смысл в нем? И там два режима -- doHidden и doCollapse
11. Я отказался от футера. Отвратно смотрится. А усложнять компонент чтобы было мне не импонирует.

--- Добавлено в 2025-05-26 23:40:33

Уточнение по 9-му пункту. Мы не избавимся от этого, тк таблица и группы отрабатывают каждый по своему двойной клик. Да и не обязательно вызывать контекстное меню по двойному клику. Можно вызвать, например, по Shift-ЛКМ (в начале у меня так и было).
Да и блокировать двойной клик при редактировании надо ли?
Ладно, я еще подумаю на этим.

--- Добавлено в 2025-05-26 23:51:49

А вот, кстати, что пишут про шрифт групп -- https://stackoverflow.com/questions/1887214/is-it-possible-to-change-the-font-size-of-tlistview-groups

--- Добавлено в 2025-05-26 23:54:28

Надо будет еще вот это рассмотреть, но никакой гарантии нет, что будет работать -- https://www.kansoftware.ru/?tid=14528

--- Добавлено в 2025-05-27 00:09:56

Gunta писал(а):
И не такой уж сложный.

Он не сложный в режиме простого применения. В полнофункциональном режиме еще тот геморрой. Я там чуть не кончился, пока все это синхронизировал.

--- Добавлено в 2025-05-27 00:17:30

Добавил на SVN правки Win.pas со свойством HideFocus

Редактировалось 10 раз(а), последний 2025-05-27 02:29:36
карма: 22

0
Разработчик
Ответов: 26287
Рейтинг: 2145
#210: 2025-05-27 02:08:46 ЛС | профиль | цитата
sla8a, вот, что я отловил. И похоже, что это связано с управлением цветом селектора


карма: 22

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