На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Невидимые символы в строке
    Всем доброго времени суток.
    Вопрос такой: я присваиваю свойству Text узла дерева TreeView значение, составленное из нескольких переменных типа String. В дальнейшем мне нужно, используя это свойство, восстановить эти переменные. Можно ли, формируя значение Text, ввести в него невидимые на экране символы, чтобы потом, перебирая Text, выделить исходные строки? Хотел воспользоваться свойством узла Data, но дерево сохраняется в файл, а объекты вроде не сохраняются? Прошу подсказать, что можно сделать.
      В общем случае - сложно. Но можно попробовать такую ахинею:
      1.после первой строки идёт 0 (завершение).
      2.после нуля ставим число переменных, кои будут хранимыми строками.
      3.и так (по порядку, одна за другой) пишем каждую следующую строку.
      4.читаем по нашему договорённому формату.

      Трудности:
      1.если кто-то ещё полезет менять узел Text, то нашим данным - хана.
      2.надо сделать (себе) прямой доступ к полю Text, что тоже несколько нетривиально.

      Добавлено
      В итоге будет примерно так: "мама\02мыла\0раму\0", где \0 означает символ с кодом 0.
        можно написать свой аналог SaveToFile (TTreeStrings.SaveTreeToStream), в котором собрать в одну строку Node.Text и StringList из Data (например, с помощью CommaText или DelimitedText)
          Цитата Славян @

          Программка для личного пользования. Св-во Text изменяется только программно.
          2.после нуля ставим число переменных, кои будут хранимыми строками.
          А зачем? Я знаю, что там 6 строк. Т.е. мне достаточно вставить между строк символ с кодом 0 при формировании значения Text, а потом идти по значению Text и ловить этот символ. А как его вставить в строку?
          Сообщение отредактировано: newkaz -
            В Си есть функция класса - c_str(), коя возвращала указатель на хранимую строку. Его можно было использовать для прямого доступа и записи чего угодно в строку (в набор байт). В Паскале=Дельфи как-то аналогично можно, уверен я.
              С чем работаем? С текстом или с потоком битов.
              Цитата Славян @
              В Си есть функция класса - c_str()

              /n/О/и другие EC последовательности тоже?
                Работаю с текстом. Вроде нашел выход, но нет времени полностью проверить часть кода. Есть такой код - #160, неразрывный пробел, на экране не отображается. Начал пробовать - вроде должно подойти. У меня строка состоит из нескольких строк, и в результирующей строке они разделяются пробелами. Разбиваю результирующую строку строкой ' '+#160 или #160+' ', при обработке проверяю на символ #160. Количество объединяемых строк постоянно, поэтому алгоритм извлечения исходных строк несложный. Проверю полностью - отпишу результат.
                  Цитата MBo @
                  можно написать свой аналог SaveToFile (TTreeStrings.SaveTreeToStream), в котором собрать в одну строку Node.Text и StringList из Data (например, с помощью CommaText или DelimitedText)

                  :good:

                  Очень не советую мучится с невидимыми символами и пихать всё в Text. Data для того и создан... Удивительно что нет возможности кастомизации сохранения. Быть может, есть что нибудь в делфях на MVC? Чтобы вообще не юзать этот Text, а использовать, нечто на вроде ListModel<CustomModel> который как раз будет обязан выдать getText(), и getData(), типичный такой LabelProvider.
                  Сообщение отредактировано: VisualProg -
                    Цитата VisualProg @
                    типичный такой LabelProvider.

                    На сколько он типичен? См ниже.
                    Цитата VisualProg @
                    Чтобы вообще не юзать этот Text, а использоват


                    Добавлено
                    Цитата VisualProg @
                    который как раз будет обязан выдать getText(), и getData(),

                    Разница есть, между ф-и?

                    Добавлено
                    В исходники смотрите.
                    Сообщение отредактировано: Bas -
                      Если редактирования дерева не требуется, то перевод строки тоже отлично спрячет хвост метки узла
                      TreeView1.Items.AddChild(nil, 'node caption'#13#10'you wont see me');
                      Сообщение отредактировано: Fr0sT -
                        Извините, не попробовал, но перевод строки в тексте нода не отобразится?
                          Нет
                            К сожалению, да. Жирная вертикальная черта при #13 или #10 и две черты при #13#10.
                            Сообщение отредактировано: newkaz -
                              ExpandedWrap disabled
                                  TreeView1.Items.Add(nil, 'hi'#13#10'invisible');


                              Прикреплённый файлПрикреплённый файлscreenshot_2018_02_16_001.png (559 байт, скачиваний: 566)
                              Прикреплённый файлПрикреплённый файлclipboard.png (1,03 Кбайт, скачиваний: 597)

                              ЧЯДНТ?
                              Сообщение отредактировано: Fr0sT -
                                Не понял ЧЯДНТ?
                                  Гугл поможет
                                    Вот эта строка: 'ZZZ'+#13#10+'XXX' отображается в результате так:
                                    Прикреплённый файлПрикреплённый файл1.jpg (1,04 Кбайт, скачиваний: 412)
                                      Цитата newkaz @
                                      Вопрос такой

                                      ЧТО именно тебе надо сделать, а не как ты пытаешься это сделать?!
                                      Цитата Славян @
                                      можно попробовать такую ахинею

                                      Скока флуда до визарда осталось?
                                        Да я собственно уже сделал то, что мне нужно, используя пары символов ' '+#160 и #160+' '. Для моего конкретного случая все работает прекрасно.
                                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                        0 пользователей:


                                        Рейтинг@Mail.ru
                                        [ Script execution time: 0,0446 ]   [ 21 queries used ]   [ Generated: 29.03.24, 12:53 GMT ]