Вверх ↑
Этот топик читают: Гость
Ответов: 1173
Рейтинг: 49
#1: 2012-06-17 04:00:44 ЛС | профиль | цитата
Всем доброго времени суток!
Сейчас делал система сохранений для своей программы. Имеется от нуля до множества панелей (панель состоит из простого Memo), для каждой нужно сделать свою "ячейку", то есть нужно хранить путь к файлу (если пути нет -- открывать диалог и записывать то, что юзер выбрал). Это часть, в общем-то, сделана, но почему-то не работает. Прошу помочь, кто разбирается.
Вот выдранный из схемы кусок, отвечающий за сохранения, с комментариями:
code_28219.txt
карма: 0

0
файлы: 1code_28219.txt [3KB] [94]
Разработчик
Ответов: 26324
Рейтинг: 2148
#2: 2012-06-17 04:11:41 ЛС | профиль | цитата
Ex_ писал(а):
но почему-то не работает

А что не работает
------------ Дoбавленo в 04.11:
Ex_ писал(а):
если пути нет -- открывать диалог и записывать то, что юзер выбрал

И куда ты его писать собрался, если пути в списке нет, то и индекса массива тоже может не быть, особенно, если это первый раз Если ты ничего не нашел по индексу, то не записывать надо в массив, а добавлять. А еще лучше, при старте или добавлении оформит количество пустых строк в списке по количеству панелей, тогда твой метод прокатит и будет перезаписываться нужный индекс
карма: 22

0
Ответов: 1173
Рейтинг: 49
#3: 2012-06-17 15:45:31 ЛС | профиль | цитата
nesco писал(а):
при старте или добавлении оформит количество пустых строк в списке по количеству панелей
Вот это мне подойдёт. Спасибо.
------------ Дoбавленo в 15.45:
nesco, сделал так, как вы сказали. Но теперь у меня не проходит проверка на "пустоту" строки, что странно, ведь при подключении MessageBox он вызывается с пустыми данными. Но проверки If_Else на пустой String или на Null не проходят. Вот схема, где я попробовал вставить проверку на основе Mask -- не помогает:

Add(MultiElement,244294,476,119)
{
@Hint=#19:Загрузка/сохранение|
@Color=10395294
AddHint(111,-98,126,13,@Hint)
}
BEGIN_SDK
Add(EditMulti,187998,21,21)
{
EventCount=2
WorkCount=3
DataCount=1
Width=517
Height=340
VOffset=14
HOffset=14
link(doWork1,9384621:doWork2,[])
link(doWork2,818536:doDelete,[(200,48)(200,125)])
link(doWork3,1626449:Cable,[])
}
Add(ODialog,7713191,406,49)
{
link(onExecute,6965158:doEvent1,[])
}
Add(SDialog,12235347,413,301)
{
link(onExecute,4730080:doEvent1,[])
}
Add(DoData,14218371,406,119)
{
link(onEventData,14837280:doWork2,[])
link(Data,9024490:Value,[(412,100)(334,100)(334,155)(286,155)])
}
Add(HubEx,14837280,511,119)
{
Angle=3
link(onEvent,187998:onEvent2,[(515,48)])
}
Add(Hub,4730080,476,301)
{
@Color=11657983
link(onEvent1,10330756:doWrite,[(502,307)(502,269)(226,269)(226,230)])
link(onEvent2,14837280:doWork3,[(515,314)])
}
Add(StrList,818536,224,105)
{
Point(doGetString)
Point(onGetString)
link(onGetString,9024490:doValue,[])
}
Add(ArrayRW,10330756,238,217)
{
link(Array,818536:Array,[])
link(Index,15643759:Var3,[(251,201)])
}
Add(DoData,14634535,161,147)
{
link(onEventData,818536:doGetString,[])
link(Data,7854828:Var3,[(167,124)])
}
Add(Memory,9024490,280,112)
{
link(onData,1169939:doCompare,[])
}
Add(If_else,8235826,98,147)
{
Type=5
Op2=Integer(-1)
link(onTrue,14634535:doData,[])
link(Op1,7854828:Var2,[])
}
Add(If_else,7269235,98,301)
{
Type=5
Op2=Integer(-1)
link(onTrue,5923219:doWork2,[])
link(Op1,15643759:Var2,[])
}
Add(GetDataEx,15643759,98,196)
{
Angle=3
link(Data,16192339:Var2,[(41,201)])
}
Add(GetDataEx,16192339,35,119)
{
link(Data,187998:Data1,[])
}
Add(GetDataEx,7854828,98,119)
{
Angle=3
link(Data,16192339:Var3,[])
}
Add(CableEvent,1626449,49,49)
{
Count=3
link(Wire1,7713191:doExecute,[])
link(Wire2,8235826:doCompare,[(81,62)(81,153)])
link(Wire3,7269235:doCompare,[(72,69)(72,307)])
}
Add(DoData,10128082,161,35)
{
Data=String(
)
link(onEventData,818536:doAdd,[(209,41)(209,111)])
}
Add(Hub,6965158,455,49)
{
@Color=11657983
link(onEvent1,187998:onEvent1,[(488,55)(488,41)])
link(onEvent2,9384621:doWork1,[(481,62)(481,32)(116,32)])
}
Add(HubEx,9384621,112,35)
{
link(onEvent,10128082:doData,[])
}
Add(StrMask,1169939,343,112)
{
Mask="?*"
link(onFalse,5923219:doWork1,[(389,118)])
link(onTrue,14218371:doData,[])
}
Add(HubEx,5923219,385,301)
{
link(onEvent,12235347:doExecute,[])
}
END_SDK
карма: 0

0
Разработчик
Ответов: 26324
Рейтинг: 2148
#4: 2012-06-17 17:12:28 ЛС | профиль | цитата
Ex_, я че, буду виртуально рассматривать твою схему Прицепи к мультику хоть какие-то данные, где будет видна ошибка
------------ Дoбавленo в 17.12:
Ex_, на кой черт там вообще перевод строки при добавлении, добавляется пустая строка простым doAdd, а ты туда еще пытаешься что-то загнать, и маска там совсе не нужна, достаточно обычный Case поставить на выходе с проверкой на пустую строку
карма: 22

0
Ответов: 1173
Рейтинг: 49
#5: 2012-06-17 17:56:39 ЛС | профиль | цитата
nesco писал(а):
я че, буду виртуально рассматривать твою схему
Извините, что-то не учёл.
nesco писал(а):
на кой черт там вообще перевод строки при добавлении
nesco писал(а):
обычный Case
Сейчас попробую.
------------ Дoбавленo в 17.56:
nesco, сейчас последовал вашему совету, убрал /r/n и поставил Case. Однако тут был ещё один косяк -- дело в том, что я немного не туда впилил хаб, и в doAdd у меня подавалось название схемы (то, что подавалось в ##add экс-панели), соответственно, проверка на пустую строку никогда не проходила. Теперь всё работает (правда, с закрытием вкладок что-то не то, но это я и сам поправлю). Спасибо за помощь!
карма: 0

0
Разработчик
Ответов: 26324
Рейтинг: 2148
#6: 2012-06-17 18:11:33 ЛС | профиль | цитата
Ex_ писал(а):
и поставил Case

Вообще-то Case можно заменить на If_Else, если нужно проверять данные сверху, а не из потока, а то Case для проверки данных сверху лишний компонент нужен
карма: 22

0
Ответов: 1173
Рейтинг: 49
#7: 2012-06-17 18:24:21 ЛС | профиль | цитата
nesco писал(а):
если нужно проверять данные сверху
Нет, всё нужное поступает в потоке.
------------ Дoбавленo в 18.24:
Благодаря Case я даже избавился от Memory и doData - он ведь на NextCase выдаёт исходные данные.
карма: 0

0
Разработчик
Ответов: 26324
Рейтинг: 2148
#8: 2012-06-17 18:34:02 ЛС | профиль | цитата
Ex_ писал(а):
он ведь на NextCase выдаёт исходные данные

If_Else тоже выдает, на оба выхода
карма: 22

0
Ответов: 1173
Рейтинг: 49
#9: 2012-06-17 18:56:06 ЛС | профиль | цитата
[offtop]
nesco писал(а):
If_Else тоже выдает, на оба выхода
И правда -- выдаёт. А я чего-то думал, что не выдаёт [/offtop]
карма: 0

0
Разработчик
Ответов: 26324
Рейтинг: 2148
#10: 2012-06-17 18:59:51 ЛС | профиль | цитата
Ex_, у Case есть одно неоспоримое преимущество -- он более быстрый, чем If_Else
карма: 22

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