Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 25427
Рейтинг: 2070
#301: 2019-05-24 15:32:05 ЛС | профиль | цитата
sla8a писал(а):
А где эта строка будет хранится?

Netspirit писал(а):
Для начала можно более простой вариант - когда параметры отрисовки "хранятся" в самой строке таблицы.

Это можно попытаться всунуть даже без наличия модуля отрисовки.

--- Добавлено в 2019-05-24 15:45:17

Можно еще сделать дополнительно точку по типу _data_CodePageSet наверх, с выдачей текста, Row и Col для доступа к внешнему блоку параметров, обратно должна возвращаться готовая форматная строка.

Редактировалось 2 раз(а), последний 2019-05-24 15:45:17
карма: 19

0
Ответов: 3887
Рейтинг: 620
#302: 2019-05-24 15:56:37 ЛС | профиль | цитата
Под "хранением в самой строке" я имел ввиду вычисление "на лету" на базе основных данных в строке.
То-есть, 2 случай из этих двух:
1) Когда пользователь программы выбирает ячейку и задаёт ей параметры (как в таблицах Word) - тогда их надо сохранять где-то.
2) А если параметры ячейки предусматривает программист на основе полезных данных в данной строке/ячейке - тогда ничего хранить не надо. Пример - выделить строки, требующие внимания пользователя (типа "срочный заказ", "долг по заказу", "свой заказ/заказ другого работника", "праздничные дни", "просроченные платежи").

Первый случай переходит во второй, если программист выделит колонку в самой таблице для хранения формата пользователя и сам парсит эту текстовую строку как хочет.
Второй вариант избавляет тебя от необходимости самому придумывать и обрабатывать хранение настроек ячейки.

Редактировалось 2 раз(а), последний 2019-05-24 15:58:07
карма: 18

0
Разработчик
Ответов: 25427
Рейтинг: 2070
#303: 2019-05-24 15:57:22 ЛС | профиль | цитата
Я все еще в сомнениях -- нужно ли это все вообще, да и кто этим будет пользоваться? Отдельно взятые фрики, типа нас...
карма: 19

0
Ответов: 1749
Рейтинг: 604
#304: 2019-05-24 15:58:57 ЛС | профиль | цитата
Как по мне так это лишняя нагрузка на элемент (хранение данных о каждой ячейке) . В большинстве случаев нужна обычная таблица с одинаковыми ячейками.
карма: 7

0
Ответов: 3887
Рейтинг: 620
#305: 2019-05-24 15:59:02 ЛС | профиль | цитата
nesco писал(а):
нужно ли это все вообще, да и кто этим будет пользоваться?
Ну, тут вопрос твоего интереса к этой задаче. Если любопытно и имеешь время - сделай. Если нет - подожди пока кто-то очень сильно попросит.

А у меня есть другой интерес - разделить получение данных, их хранение и их отображение/печать.
Хочу сделать невидимую "виртуальную таблицу" (или дерево элементов) в качестве менеджера. И компонеты работы с ней, как твои для MTStrTbl (типа добавление/удаление строк/колонок, чтение/запись ячеек, поиск, сортировка, экспорт/импорт, форматирование отображения и т.п.). Тогда текущая MTStrTbl могла бы быть просто клиентом к этой таблице для отображения данных и больше ничего.
Компоненты для работы с базами данных тоже могли бы быть лишь клиентами, заполняющими эту таблицу данными.

Редактировалось 2 раз(а), последний 2019-05-24 16:04:46
карма: 18

0
Разработчик
Ответов: 25427
Рейтинг: 2070
#306: 2019-05-24 16:01:55 ЛС | профиль | цитата
Netspirit писал(а):
тогда их надо сохранять где-то.

Сразу встает вопрос -- где?
Netspirit писал(а):
А если параметры ячейки предусматривает программист на основе полезных данных в данной строке/ячейке - тогда ничего хранить не надо. Пример - выделить строки, требующие внимания пользователя (типа "срочный заказ", "долг по заказу", "свой заказ/заказ другого работника", "праздничные дни", "просроченные платежи").

А это как реализовать, только наверное так
nesco писал(а):
Можно еще сделать дополнительно точку по типу _data_CodePageSet наверх, с выдачей текста, Row и Col для доступа к внешнему блоку параметров, обратно должна возвращаться готовая форматная строка.

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

Редактировалось 2 раз(а), последний 2019-05-24 16:06:48
карма: 19

0
Ответов: 3887
Рейтинг: 620
#307: 2019-05-24 16:07:17 ЛС | профиль | цитата
nesco писал(а):
А это как реализовать, только наверное так
Ну, как я с самого начала и говорил - событие отрисовки строки/ячейки с получением в результате параметров цветов и шрифта. А откуда они возьмутся - решает автор схемы. Но быстрый доступ к текущей строке таблицы нужен (предполагаю, можно выдавать индекс рисуемой строки+колонки).
Но, да, надо решить как эти данные возвращать компоненту - в виде строки формата (тогда накладные расходы на формирование/разбор), либо отдельные верхние точки на каждое свойство. В MST_DrawManager и MST_SetColors все равно немного точек - можно добавить.

Редактировалось 3 раз(а), последний 2019-05-24 16:12:05
карма: 18

0
Разработчик
Ответов: 25427
Рейтинг: 2070
#308: 2019-05-24 16:17:57 ЛС | профиль | цитата
Можно вообще выдавать text, item, subitem наверх в самом _OnLVCustomDraw. Вернулся текст, проверяем его на наличие форматной строки, есть -- форматируем, нет -- идем дальше. Да можно вообще не приклеивать форматную строку, в таком случае, к тексту, а ворачивать только ее в качестве параметра, пустая строка будет означать, что применяем дефолтные параметры, если не пустая -- то парсируем и применяем параметры из форматной строки.
Надо будет попробовать вечерком реализовать. Интересно посмотреть, что получится

Редактировалось 7 раз(а), последний 2019-05-24 16:25:25
карма: 19

0
Ответов: 1749
Рейтинг: 604
#309: 2019-05-24 16:29:57 ЛС | профиль | цитата
Отдайте всю ячейку перед отрисовкой, чтоб была возможность нарисовать что хочешь. Там и до многострочности будет не далеко.
карма: 7

0
Разработчик
Ответов: 25427
Рейтинг: 2070
#310: 2019-05-24 16:52:59 ЛС | профиль | цитата
sla8a писал(а):
Отдайте всю ячейку перед отрисовкой, чтоб была возможность нарисовать что хочешь. Там и до многострочности будет не далеко.

Ты имеешь в виду контекст? А высота строки вроде как не изменяется так просто, какая тогда многострочность, вроде надо юзать другое событие -- MeasureItem, но че-то у меня не получилось с первого раза.
И, КМК, народ с отрисовкой чего хочешь не очень дружит, а вот с форматным текстом, думаю, вопросов будет меньше

Редактировалось 1 раз(а), последний 2019-05-24 16:54:54
карма: 19

0
Ответов: 1749
Рейтинг: 604
#311: 2019-05-24 17:04:23 ЛС | профиль | цитата
nesco писал(а):
Ты имеешь в виду контекст?
Да, сейчас набросаю пример как мне это видится.
nesco писал(а):
А высота строки вроде как не изменяется так просто
Останется добавить высоту шрифта для заголовка, насколько помню это не так сложно. И выставляя высоту шрифта для таблицы (высота заголовка не увеличится) увеличивается высота строки, рисуй что хочешь. Но это так в уме, сейчас не нужно этим заморачиваться.

Вот смотрите есть список строк и к нему (и не только к нему) подключается менеджер отрисовки.
Список строк с менеджером отрисовки

Add(MainForm,2953706,511,364)
{
Width=524
Position=1
}
Add(ListBox,11760669,511,420)
{
Left=85
Top=35
Width=365
Height=185
Strings=#4:Кино|4:Вино|6:Домино|
BoxDrawManager="MyDraw"
}
Add(BoxDrawManager,293041,574,364)
{
Name="MyDraw"
StyleBack=1
ImageShift=12
GutterShift=12
GutterWidth=12
}
Все замечательно, дополнительные возможности отрисовки, много свойств. А теперь представьте что вместо элемента менеджер отрисовки был элемент контейнер в котором можно самостоятельно отрисовать как весь элемент так и его части.
Примерно так это должно выглядеть

Add(MainForm,2953706,511,266)
{
Width=594
Height=476
Position=1
}
Add(MTStrTbl,10355073,658,441)
{
Left=5
Top=5
Width=575
Height=430
Font=[MS Sans Serif,33,0,0,1]
Columns=#4:Кино|4:Вино|6:Домино|
Grid=0
}
Add(MultiElementEx,10219707,658,357)
{
}
BEGIN_SDK
Add(EditMultiEx,14675531,21,21)
{
Width=1000
Height=620
}
Add(Shape,3689091,112,210)
{
Width=53
Height=67
Color=-16777201
}
Add(HubEx,7371451,161,210)
{
link(onEvent,15631061:doWork,[])
}
Add(Img_Gradient,12113180,728,210)
{
}
Add(GetDataEx,7094100,112,273)
{
}
Add(If_else,12640788,602,420)
{
Op2=String(Виноград)
link(onTrue,4925789:doDraw,[])
link(Op1,6869198:getVar,[])
AddHint(8,-29,73,13,Op2)
}
Add(LineBreakEx,12217864,112,434)
{
Caption="text"
Type=3
link(_Data,7094100:Var2,[])
}
Add(LineBreakEx,6869198,602,371)
{
Caption="text"
Type=2
}
Add(LineBreakEx,1577409,119,420)
{
Caption="row"
Type=3
link(_Data,6243811:Var2,[])
}
Add(GetDataEx,6243811,119,273)
{
}
Add(GetDataEx,10061695,126,273)
{
}
Add(LineBreakEx,16371791,126,406)
{
Caption="col"
Type=3
link(_Data,10061695:Var2,[])
}
Add(HubEx,9523253,161,217)
{
link(onEvent,2105692:doWork,[])
}
Add(Check,15631061,315,210)
{
Caption="фон всей таблицы"
link(onEvent,12113180:doDraw,[])
}
Add(Check,4558762,476,420)
{
Caption="отрисовка ячейки "
link(onEvent,12640788:doCompare,[])
}
Add(LineBreakEx,4910682,133,392)
{
Caption="x"
Type=3
link(_Data,8466411:Var2,[])
}
Add(LineBreakEx,14446683,140,378)
{
Caption="y"
Type=3
link(_Data,2390818:Var2,[])
}
Add(LineBreakEx,9540935,147,364)
{
Caption="width"
Type=3
link(_Data,1661398:Var2,[])
}
Add(LineBreakEx,7136343,154,350)
{
Caption="hieght"
Type=3
link(_Data,12862610:Var2,[])
}
Add(GetDataEx,8466411,133,273)
{
}
Add(GetDataEx,2390818,140,273)
{
}
Add(GetDataEx,1661398,147,273)
{
}
Add(GetDataEx,12862610,154,273)
{
}
Add(IndexToChanel,426047,427,406)
{
Count=3
Point(Index)
link(onEvent3,4558762:doWork,[])
link(Index,10877107:getVar,[])
}
Add(LineBreakEx,10877107,427,378)
{
Caption="col"
Type=2
}
Add(Img_Text,4925789,714,420)
{
Font=[MS Sans Serif,10,1,255,1]
}
Add(InfoTip,2724382,385,336)
{
Info=#63:Во второй колокне выделяем слово виноград красным жирным цветом|
Width=421
Height=137
}
Add(Check,2105692,182,217)
{
Caption="отрисовка ячейки "
link(onEvent,426047:doEvent,[(307,223)(307,412)])
}
END_SDK

При таком подходе большая часть "хотелок" закроется. И тут не только рюшечки, но и реальное удобство сделать таблицу более информативной.

Как писал выше Netspirit выделить нужную строку при таком подходе, вообще не проблема.

Редактировалось 7 раз(а), последний 2019-05-24 17:23:13
карма: 7

0
Разработчик
Ответов: 25427
Рейтинг: 2070
#312: 2019-05-24 17:51:04 ЛС | профиль | цитата
sla8a писал(а):
А теперь представьте что вместо элемента менеджер отрисовки был элемент контейнер в котором можно самостоятельно отрисовать как весь элемент так и его части.

Не получится только потому, что указатели в своем мультике ты как будешь дешифрировать? А без указателей ты не будешь иметь доступ к свойствам контрола и спискам иконок. Или предлагается весь список свойств контрола и иконки выводить в MT-потоке наверх?

--- Добавлено в 2019-05-24 17:58:34

Netspirit писал(а):
В MST_DrawManager

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

Редактировалось 3 раз(а), последний 2019-05-24 17:58:34
карма: 19

0
Ответов: 1749
Рейтинг: 604
#313: 2019-05-24 18:21:03 ЛС | профиль | цитата
nesco писал(а):
Не получится только потому, что указатели в своем мультике ты как будешь дешифрировать? А без указателей ты не будешь иметь доступ к свойствам контрола и спискам иконок. Или предлагается весь список свойств контрола и иконки выводить в MT-потоке наверх?
Вот на эти вопросы я не смогу ответить. Я представил свое виденье, вот получится ли такое реализовать тоже не уверен.
Большая часть моих попыток добавить что-то в MTStrTbl провалилась. Наработки мои вам знакомы. Не мой уровень.

Редактировалось 1 раз(а), последний 2019-05-24 18:22:32
карма: 7

0
Разработчик
Ответов: 25427
Рейтинг: 2070
#314: 2019-05-24 19:28:29 ЛС | профиль | цитата
sla8a писал(а):
Большая часть моих попыток добавить что-то в MTStrTbl провалилась.

Класс ListViewer очень мудреный, не все еще у нас в KOL реализовано. К примеру, в режиме расширенной отрисовки OnLVCustomDraw запрещено пользоваться методом установки высоты строк на уровне библиотеки, поэтому остается только рекомендованный самим Кладовым метод установки высоты строк размером иконок.
карма: 19

0
Ответов: 4368
Рейтинг: 473
#315: 2019-05-24 21:50:47 ЛС | профиль | цитата
nesco, sla8a,Netspirit, в ListView есть ещё такая фишка как Group и реализовать её очень просто (просто API) возможно вам будет интересно, пример тутhttp://forum.hiasm.com/getfile/38664
вот, делюсь опытом
карма: 4

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