Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.22.77.149] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Всем доброго времени суток.
Вопрос такой: я присваиваю свойству Text узла дерева TreeView значение, составленное из нескольких переменных типа String. В дальнейшем мне нужно, используя это свойство, восстановить эти переменные. Можно ли, формируя значение Text, ввести в него невидимые на экране символы, чтобы потом, перебирая Text, выделить исходные строки? Хотел воспользоваться свойством узла Data, но дерево сохраняется в файл, а объекты вроде не сохраняются? Прошу подсказать, что можно сделать. |
Сообщ.
#2
,
|
|
|
В общем случае - сложно. Но можно попробовать такую ахинею:
1.после первой строки идёт 0 (завершение). 2.после нуля ставим число переменных, кои будут хранимыми строками. 3.и так (по порядку, одна за другой) пишем каждую следующую строку. 4.читаем по нашему договорённому формату. Трудности: 1.если кто-то ещё полезет менять узел Text, то нашим данным - хана. 2.надо сделать (себе) прямой доступ к полю Text, что тоже несколько нетривиально. Добавлено В итоге будет примерно так: "мама\02мыла\0раму\0", где \0 означает символ с кодом 0. |
Сообщ.
#3
,
|
|
|
можно написать свой аналог SaveToFile (TTreeStrings.SaveTreeToStream), в котором собрать в одну строку Node.Text и StringList из Data (например, с помощью CommaText или DelimitedText)
|
Сообщ.
#4
,
|
|
|
Цитата Славян @ Программка для личного пользования. Св-во Text изменяется только программно. 2.после нуля ставим число переменных, кои будут хранимыми строками. А зачем? Я знаю, что там 6 строк. Т.е. мне достаточно вставить между строк символ с кодом 0 при формировании значения Text, а потом идти по значению Text и ловить этот символ. А как его вставить в строку? |
Сообщ.
#5
,
|
|
|
В Си есть функция класса - c_str(), коя возвращала указатель на хранимую строку. Его можно было использовать для прямого доступа и записи чего угодно в строку (в набор байт). В Паскале=Дельфи как-то аналогично можно, уверен я.
|
Сообщ.
#6
,
|
|
|
С чем работаем? С текстом или с потоком битов.
Цитата Славян @ В Си есть функция класса - c_str() /n/О/и другие EC последовательности тоже? |
Сообщ.
#7
,
|
|
|
Работаю с текстом. Вроде нашел выход, но нет времени полностью проверить часть кода. Есть такой код - #160, неразрывный пробел, на экране не отображается. Начал пробовать - вроде должно подойти. У меня строка состоит из нескольких строк, и в результирующей строке они разделяются пробелами. Разбиваю результирующую строку строкой ' '+#160 или #160+' ', при обработке проверяю на символ #160. Количество объединяемых строк постоянно, поэтому алгоритм извлечения исходных строк несложный. Проверю полностью - отпишу результат.
|
Сообщ.
#8
,
|
|
|
Цитата MBo @ можно написать свой аналог SaveToFile (TTreeStrings.SaveTreeToStream), в котором собрать в одну строку Node.Text и StringList из Data (например, с помощью CommaText или DelimitedText) Очень не советую мучится с невидимыми символами и пихать всё в Text. Data для того и создан... Удивительно что нет возможности кастомизации сохранения. Быть может, есть что нибудь в делфях на MVC? Чтобы вообще не юзать этот Text, а использовать, нечто на вроде ListModel<CustomModel> который как раз будет обязан выдать getText(), и getData(), типичный такой LabelProvider. |
Сообщ.
#9
,
|
|
|
Цитата VisualProg @ типичный такой LabelProvider. На сколько он типичен? См ниже. Цитата VisualProg @ Чтобы вообще не юзать этот Text, а использоват Добавлено Цитата VisualProg @ который как раз будет обязан выдать getText(), и getData(), Разница есть, между ф-и? Добавлено В исходники смотрите. |
Сообщ.
#10
,
|
|
|
Если редактирования дерева не требуется, то перевод строки тоже отлично спрячет хвост метки узла
TreeView1.Items.AddChild(nil, 'node caption'#13#10'you wont see me'); |
Сообщ.
#11
,
|
|
|
Извините, не попробовал, но перевод строки в тексте нода не отобразится?
|
Сообщ.
#12
,
|
|
|
Нет
|
Сообщ.
#13
,
|
|
|
К сожалению, да. Жирная вертикальная черта при #13 или #10 и две черты при #13#10.
|
Сообщ.
#14
,
|
|
|
TreeView1.Items.Add(nil, 'hi'#13#10'invisible'); Прикреплённый файлscreenshot_2018_02_16_001.png (559 байт, скачиваний: 568) Прикреплённый файлclipboard.png (1,03 Кбайт, скачиваний: 599) ЧЯДНТ? |
Сообщ.
#15
,
|
|
|
Не понял ЧЯДНТ?
|