Вверх ↑
Этот топик читают: Гость
Ответов: 1291
Рейтинг: 47
#1: 2019-02-21 06:58:26 ЛС | профиль | цитата
Глюк с цифрами в пути.
Как хранить эти пути в схеме и как автоматически
генерировать экранирующие символы?

Как сохранить в компоненте путь с цифрами в начале имени файла или папки и передавать его внутри схемы?

Вот глючная схема того что мне надо. Типа слайдшоу. Создайте рядом с прогой папку "фотки" и накидайте туда фоток с именами вида 1.jpg 2.jpg 3.jpg и попробуйте их добавить кнопкой добавления. И чтобы потом этот список сохранился в файл. Че-то не хочет сохраняться и грузиться потом при старте программы автоматом если есть такие имена. Еще странно что если из диалога выбора файлов имена попадают в список - то нормально отображаются, а если вручную тот же список им созданный прописать в компоненте Мемо до компиляции, то при старте там все пути искажены, если только не поставить экранирующий слеш.


Add(Memo,15221221,336,427)
{
Top=200
Width=450
Align=4
FileName="paths.txt"
Strings=#45:D:\HP_Probook\Docs\Hiasm\Projects\фотки\1.jpg|45:D:\HP_Probook\Docs\Hiasm\Projects\фотки\2.jpg|46:D:\HP_Probook\Docs\Hiasm\Projects\фотки\\3.jpg|
ScrollBars=3
Point(doLoad)
Point(doSave)
link(onChange,13533170:doEvent1,[])
}
Add(MainForm,5760284,483,301)
{
Left=20
Top=105
Width=466
Height=319
Caption="Image Viewer"
Position=1
link(onCreate,15221221:doLoad,[(527,321)(527,391)(324,391)(324,461)])
}
Add(Button,10902724,70,427)
{
@Hint=#27:Запуск диалога выбора файла|
Top=170
Width=450
Height=30
Align=4
Font=[MS Sans Serif,10,1,0,1]
TabOrder=-1
Caption="Добавить фото с цифрой в начале названия файла"
link(onClick,5049552:doExecute,[])
}
Add(ODialog,5049552,119,427)
{
Filter="Файлы рисунков( png )|*.png|Файлы рисунков( jpg )|*.jpg|Файлы рисунков( gif )|*.gif|Файлы рисунков( bmp )|*.bmp|All files|*.*|"
FileName=""
link(onExecute,9889022:doEvent1,[])
}
Add(AlphaImage,2282639,623,588)
{
Width=450
Height=170
Align=5
}
Add(Img_Loader,2555054,574,588)
{
link(onLoad,2282639:doLoad,[])
}
Add(Timer,10725271,217,588)
{
link(onTimer,3525988:doNext,[])
}
Add(ArrayRW,7391299,448,588)
{
link(onRead,1534064:doEvent1,[])
link(Array,15221221:Array,[(454,482)(356,482)])
}
Add(CounterEx,3525988,357,588)
{
Point(doMax)
link(onNext,7391299:doRead,[])
}
Add(DoData,6873056,301,602)
{
link(onEventData,3525988:doMax,[(345,608)(345,601)])
link(Data,15221221:Count,[(307,488)(349,488)])
}
Add(Hub,1534064,504,588)
{
link(onEvent1,2555054:doLoad,[])
link(onEvent2,5760284:doCaption,[(530,601)(530,454)(471,454)(471,307)])
}
Add(Hub,13533170,406,427)
{
InCount=2
link(onEvent1,6873056:doData,[(432,433)(432,521)(289,521)(289,608)])
link(onEvent2,11743706:doEvent2,[(432,440)(432,458)(212,458)(212,475)])
}
Add(Hub,9889022,182,427)
{
link(onEvent1,15221221:doAdd,[])
link(onEvent2,11743706:doEvent1,[(210,440)(210,468)])
}
Add(DoData,2726866,273,462)
{
Data=String(paths.txt)
link(onEventData,15221221:doSave,[])
}
Add(Hub,11743706,224,462)
{
InCount=2
link(onEvent1,2726866:doData,[])
}
Add(InfoTip,14730098,245,294)
{
Info=#22:Глюк с цифрами в пути.|49:Как хранить эти пути в схеме и как автоматически |34:генерировать экранирующие символы?|
Width=190
Height=81
}


--- Добавлено в 2019-02-21 07:06:36

Как србственно программную подстановку экранирущего слеша организовать? Хочу массив с путями на картинки загруженные пользователем перебирать и выводить, а вдруг у пользователя картинка с цифры начинается? Как ее программно тогда вывести?
Неужели все выводят пользователю табличку с предупреждением "Имя файла не должно начинаться с цифры!" ?))

--- Добавлено в 2019-02-21 07:34:08

Чего я только не пробовал - обрабатывать пути с цифрами после слешей как строки и автозаменой добавлять два слеша вместо одного - ничего не получалось. .

Редактировалось 5 раз(а), последний 2019-02-21 07:34:08
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 16884
Рейтинг: 1239
#2: 2019-02-21 08:39:47 ЛС | профиль | цитата
Выдели ODialog->нажми F1->Посмотри пример.
Как говорит nesco - "Не смеши мои тапочки"
Aziz писал(а):
"Файлы рисунков( png )*.png|Файлы рисунков( jpg )|*.jpg|Файлы рисунков( gif )|*.gif|Файлы рисунков( bmp )|*.bmp|All files|*.*|"
Особенно смешно это перечисление смотрится на фоне последнего
Aziz писал(а):
All files|*.*


Редактировалось 2 раз(а), последний 2019-02-21 09:11:11
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 1291
Рейтинг: 47
#3: 2019-02-21 09:42:44 ЛС | профиль | цитата
Tad, поясни что смешного? Этот компонент и фильтр типов файлов делал не я. Я лишь хочу на стандартных компонентах не влезая в коды компонентов реализовать то что описал. Эта схема взята для примера путем модификации схемы из примеров. Думаю можно было бы догадаться.

--- Добавлено в 2019-02-21 09:45:35

Ты наверное не понял то о чем я писал. Схему ODialog посмотрел. Это не решает задачу поставленную никак.

--- Добавлено в 2019-02-21 09:48:43

Flowstone справляется с такой задачей на раз-два. Видимо придется писать свой компонент для работы с путями.

Редактировалось 3 раз(а), последний 2019-02-21 09:48:43
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 4628
Рейтинг: 749
#4: 2019-02-21 12:31:34 ЛС | профиль | цитата
Aziz писал(а):
Как хранить эти пути в схеме и как автоматически генерировать экранирующие символы?
Достаточно почитать о "Панели свойств" в справке. В строковых свойствах есть специальная обработка символа "\" и следующих за ним. А именно:
\r, \n, \t трансформируются в символы с кодами 13, 10 и 9 соответственно
\xxx, где 'xxx' - цифры, превращается в символ с кодом xxx. Например, \1 - превращается в символ с кодом 1.
Чтобы избежать специальной обработки после \, нужно удвоить слеш, то-есть:
D:\HP_Probook\Docs\Hiasm\Projects\фотки\\1.jpg
C:\Windows\\notepad.exe
Это требуется только при написании свойств внутри схемы. Тексты, полученные в процессе работы программы не подвержены данному поведению.

Редактировалось 1 раз(а), последний 2019-02-22 11:23:55
карма: 26

0
Ответов: 1291
Рейтинг: 47
#5: 2019-02-21 12:40:56 ЛС | профиль | цитата
Netspirit, это все понятно. Мне нужно не ручное задание путей. Вы пример запустите выше и поймете вто мне нужно.
Еще раз:
1) Пользователь добавляет в строковый массив имена файлов которые он хочет чтобы потом воспроизводились при старте программы;
2) Эти имена файлов автоматически сохраняются при каждом изменеии строк в компоненте (добавлении нового пути к файлу картинки);
3) При старте программы эти пути должны подгрузиться из файла paths.txt и загружать картинку в компонент alpha image.
Но ничего этого невозможно реализовать. Не сохраняются пути и не воспроизводятся.

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

--- Добавлено в 2019-02-21 12:43:03

Netspirit писал(а):
Aziz писал(а):
Это требуется только при написании свойств внутри схемы. Тексты, полученные в процессе работы программы не подвержены данному поведению.


В том то и дело что подвержены. Любой путь попробуйте сохранить в memory или dodata и попробуйте их оттуда извлечь на месседжбокс хотябы. С цифрами со слешем не выйдет без использования экранирующих слешей. Только как атоматом добавлять соеши-экраны в те пути что генерируются внутри программы? Пробовал не выходит. Обрезается повсюду.

--- Добавлено в 2019-02-21 12:50:43

Как вариант решения этой проблемы - на лету переименовывать все файлы в удобоваримый для Хиасм формат. То есть убирая цифры из имени файла и сохраняя их в папку без цифр в пути к папке.

Это пожалуй единственное ограничение Хиасм что мне встретилась за все годы. И я так понимаю, что даже IC тут не поможет. Если дело в кодогенераторе. Может можно как-то быстро его пофиксить парой строк?

Редактировалось 5 раз(а), последний 2019-02-21 12:58:23
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 4628
Рейтинг: 749
#6: 2019-02-21 13:11:08 ЛС | профиль | цитата
Aziz писал(а):
Любой путь попробуйте сохранить в memory или dodata и попробуйте их оттуда извлечь на месседжбокс хотябы.
Ну, попробовал (сохранил не в Memory, а в Memo, но это ничем не будет отличаться):
Add(MainForm,2953706,21,105)
{
Position=1
link(onCreate,12219131:doData,[])
}
Add(Button,14202740,322,168)
{
Left=20
Top=110
link(onClick,1445486:doEnum,[])
}
Add(Message,8382886,546,273)
{
link(Message,6616999:Text,[])
}
Add(Application,1764857,63,70)
{
}
Add(DoData,12219131,63,119)
{
link(onEventData,6408439:doAdd,[])
link(Data,1764857:AppFileName,[])
}
Add(Memo,6408439,357,119)
{
Left=20
Top=10
Width=350
Strings=#14:c:\docs\\1.jpg|23:c:\windows\\notepad.exe|
ScrollBars=3
}
Add(Memo,6616999,546,168)
{
Left=20
Top=155
Width=350
ScrollBars=3
}
Add(ArrayEnum,1445486,371,168)
{
link(onItem,6616999:doAdd,[])
link(onEndEnum,8382886:doMessage,[(475,181)(475,279)])
link(Array,6408439:Array,[])
}

Aziz писал(а):
Вы пример запустите выше и поймете вто мне нужно
Ты в Memo в одном пути слеш удвоил, а в остальных нет.

Редактировалось 2 раз(а), последний 2019-02-21 13:15:43
карма: 26

0
Ответов: 1291
Рейтинг: 47
#7: 2019-02-21 13:24:50 ЛС | профиль | цитата
Netspirit, и что у тебя работает моя схема? Я на работе проверить ничего не смогу до вечера. А удвоил я пути специально для наглядности чтобы показать как экранировка работает.

--- Добавлено в 2019-02-21 13:26:14

Поймите, удвоенные слеши и прочее - это все ручная обработка на этапе дизайна программы. У пользователя удваивать слеши в путях возможности не будет.

Редактировалось 2 раз(а), последний 2019-02-21 13:34:51
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 4628
Рейтинг: 749
#8: 2019-02-21 13:40:03 ЛС | профиль | цитата
Aziz писал(а):
У пользователя удваивать слеши в путях возможности не будет.
А я для чего написал
Netspirit писал(а):
Тексты, полученные в процессе работы программы не подвержены данному поведению.

А ты мне в ответ
Aziz писал(а):
В том то и дело что подвержены.
Разберись основательно. В моей схеме нет никакой обработки двойных слешей во время работы программы.

Aziz писал(а):
Netspirit, и что у тебя работает моя схема?
Я не запускал твою схему. Это не требуется для решения проблемы со слешами в строковых свойствах. А если она не работает по каких-то других причинах, то надо вникать в её логику и в твою задачу - а сейчас у меня такой возможности нет.

Редактировалось 3 раз(а), последний 2019-02-21 13:45:55
карма: 26

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#9: 2019-02-21 14:12:27 ЛС | профиль | цитата
Netspirit, насколько я понял, то ему надо, чтобы вот это работало

Схема


Add(MainForm,14807199,119,175)
{
Position=1
link(onCreate,12219131:doData,[])
}
Add(Button,14202740,252,238)
{
Left=20
Top=120
link(onClick,1445486:doEnum,[])
}
Add(Message,8382886,476,343)
{
link(Message,6616999:Text,[])
}
Add(Application,1764857,161,140)
{
}
Add(DoData,12219131,161,189)
{
link(onEventData,6408439:doAdd,[])
link(Data,231000:Text,[(167,180)(223,180)])
}
Add(Memo,6408439,287,189)
{
Left=20
Top=10
Width=350
Strings=#14:c:\docs\\1.jpg|23:c:\windows\\notepad.exe|
ScrollBars=3
}
Add(Memo,6616999,476,238)
{
Left=20
Top=155
Width=350
ScrollBars=3
}
Add(ArrayEnum,1445486,301,238)
{
link(onItem,6616999:doAdd,[])
link(onEndEnum,8382886:doMessage,[(405,251)(405,349)])
link(Array,6408439:Array,[])
}
Add(Edit,231000,217,140)
{
Left=25
Top=95
Width=345
Text="c:\docs\2.jpg"
}
карма: 22

0
Ответов: 4628
Рейтинг: 749
#10: 2019-02-21 14:16:46 ЛС | профиль | цитата
Ну, так рецепт тот же.
карма: 26

0
Ответов: 1291
Рейтинг: 47
#11: 2019-02-21 14:28:04 ЛС | профиль | цитата
Netspirit, вечером дома изучу, спасибо. И если твоя схема практически решает эту проблему - создание пользователем списка путей на файлы картинок с цифрами после слеша, и последующей автоматической загрузкой при старте программы этого списка, то тогда здорово, спасибо. У меня именно это сочетание - последовательность функционала программы не работает. И пути можно прописать заранее и динамически загрузить их в компонент через диалог, но сохранить все это как предустановку, список файлов картинок с путями не выходит.

Редактировалось 1 раз(а), последний 2019-02-21 14:29:52
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#12: 2019-02-21 14:28:21 ЛС | профиль | цитата
Aziz писал(а):
1) Пользователь добавляет в строковый массив имена файлов которые он хочет чтобы потом воспроизводились при старте программы;
2) Эти имена файлов автоматически сохраняются при каждом изменеии строк в компоненте (добавлении нового пути к файлу картинки);
3) При старте программы эти пути должны подгрузиться из файла paths.txt и загружать картинку в компонент alpha image.

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

Редактировалось 5 раз(а), последний 2019-02-21 14:39:22
карма: 22

0
Ответов: 4628
Рейтинг: 749
#13: 2019-02-21 14:37:50 ЛС | профиль | цитата
Aziz, просто: если ты пишешь пути в схеме - удваиваешь слеши. Если пути вводит/выбирает пользователь после запуска программы, эти пути потом сохраняются/загружаются в/из файла - никаких телодвижений со слешами делать не нужно.
карма: 26

0
Ответов: 1291
Рейтинг: 47
#14: 2019-02-21 14:38:22 ЛС | профиль | цитата
nesco, ну попробуй тогда список путей сохранить в виде текстового файла (без двойных слешей!) и сделать чтобы он загружался из него в компонент и отображались картинки соответствующие этим путям. Ну не выходит это. И это уже не дизайн программы, а ее работа. . У тебя хочешь сказать работает? А динамически автоматом гернерировать эти пути с двойными слешами в файл тоже не получается. Такое ощущение что вы мой пример никто не запускал. Поэтому не понимаете о чем я. Неужели никто не делал некое слайдшоу на основе плейлиста, и я первый кто до этого додумался? Да, если тупо проигрывать все картинки подряд из папки то все ок. Но через плейлист с этими цифровыми путями не выходит. Такой плейлист невозможно создать на этапе работы программы - тк двойные слеши не сохраняются, вырезаясь, либо не сохраняются как нормальные пути если там есть цифра. Тупик. Ладно, прости Неско опять запарил вам мозг, просто буду тупо переименовывать файлы пользователя и дублировать их с уже кошерными именами, раз иначе никак.

Редактировалось 2 раз(а), последний 2019-02-21 14:41:30
карма: 3
Hiasm + Flowstone + CopperCube + GoDot + JS
0
Ответов: 4628
Рейтинг: 749
#15: 2019-02-21 14:39:26 ЛС | профиль | цитата
Aziz писал(а):
ну попробуй тогда список путей сохранить в виде текстового файла (без двойных слешей!) и сделать чтобы он загружался из него в компонент

Да что ж такое то...
Add(MainForm,2953706,21,105)
{
Position=1
}
Add(Button,14202740,133,140)
{
Left=20
Top=90
Width=120
Caption="Сохранить в файл"
link(onClick,6408439:doSave,[])
}
Add(Memo,6408439,196,112)
{
Left=20
Top=10
Width=350
FileName="files.txt"
Strings=#14:c:\docs\\1.jpg|23:c:\windows\\notepad.exe|
ScrollBars=3
Point(doSave)
AddHint(38,13,47,13,FileName)
}
Add(Memo,6616999,469,126)
{
Left=20
Top=165
Width=350
FileName="files.txt"
ScrollBars=3
Point(doLoad)
AddHint(48,10,47,13,FileName)
}
Add(Button,9579402,378,154)
{
Left=20
Top=140
Width=120
Caption="Загрузить из файла"
link(onClick,6616999:doLoad,[])
}

Редактировалось 1 раз(а), последний 2019-02-21 14:49:15
карма: 26

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