|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.08.2011, 16:26 | #1 |
Регистрация: 02.08.2011
Сообщений: 5
|
Проблема с Memo
Добрый день, проблема заключается в следующем: сохранил в файл memo. Далее при открытии данной программы, она обращается к файлу, чтоб считать данные и снова записывает их в memo. Делаю memo1.Visible:=true; показывает все правильно..затем пробую считать отдельные линии:
Memo1.Lines.LoadFromFile('Save.cys' ); Form1color:=Memo1.Lines[0]; Panel1color:=Memo1.Lines[1]; KoordColor:=Memo1.Lines[2]; QuadColor:=Memo1.Lines[3]; LinesColor:=Memo1.Lines[4]; DQuadColor:=Memo1.Lines[5] Все вышеуказанные переменные типа string Вместо того, чтоб им присвоить значение по линии, она присваивает им значения по символу. То есть если в файле было: 16777215 14215660 15524115 0 255 8388736 То значения переменных выдает как 1,6,7,7,7,2 то есть первые цифры Пробовал делать Memo2.Lines:=Memo1.Lines; Мемо второе имело вид 1 6 7 7 и т.д. Надеюсь на вашу помощь) Код: var Form1: TForm1; Form1color,Panel1color,QuadColor,Ko ordColor,DQuadColor,LinesColor: string; X0,Y0,XA,XB,XC,XD,YA,YB,YC,YD,i,k1, n,k2: integer; a: TColor; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Form1.Width:=Screen.Width; Form1.Height:=Screen.Height; Form1.Left:=0; Form1.Top:=0; Form1.Panel1.Top:=0; Form1.Panel1.Left:=Form1.Width-Form1.Panel1.Width; Form1.Panel1.Width:=105; Form1.Panel1.Height:=625; // if FileExists('Save.cys') then Begin Memo1.Lines.LoadFromFile('Save.cys' ); Form1color:=Memo1.Lines[0]; Panel1color:=Memo1.Lines[1]; KoordColor:=Memo1.Lines[2]; QuadColor:=Memo1.Lines[3]; LinesColor:=Memo1.Lines[4]; DQuadColor:=Memo1.Lines[5]; end else Begin Form1color:=inttostr(RGB(255,255,25 5)); Panel1color:=inttostr(RGB(236,233,2 16)); KoordColor:=inttostr(RGB(19,225,236 )); QuadColor:=inttostr(RGB(0,0,0)); LinesColor:=inttostr(RGB(255,0,0)); DQuadColor:=inttostr(RGB(128,0,128) ); end; // Form1.Color:=strtoint(Form1color); Panel1.Color:=strtoint(Panel1color) ; // {Memo1.Visible:=false;} end; procedure TForm1.Button1Click(Sender: TObject); begin Canvas.Pen.Color:=strtoint(QuadColo r); XA:=StrToInt(Edit1.text)+X0; XB:=StrToInt(Edit3.text)+X0; XC:=StrToInt(Edit5.text)+X0; XD:=StrToInt(Edit7.text)+X0; YA:=Y0-StrToInt(Edit2.text); YB:=Y0-StrToInt(Edit4.text); YC:=Y0-StrToInt(Edit6.text); YD:=Y0-StrToInt(Edit8.text); Canvas.MoveTo(XA,YA); Canvas.LineTo(XB,YB); Canvas.MoveTo(XB,YB); Canvas.LineTo(XC,YC); Canvas.MoveTo(XC,YC); Canvas.LineTo(XD,YD); Canvas.MoveTo(XD,YD); Canvas.LineTo(XA,YA); end; procedure TForm1.Button5Click(Sender: TObject); begin Canvas.MoveTo(0,y0); Canvas.LineTo(2*x0,y0); Canvas.MoveTo(x0,0); Canvas.LineTo(x0,2*y0); Canvas.Pen.Color:=strtoint(KoordCol or); n:=StrToInt(Edit10.text); k1:=y0 div n; k2:=x0 div n; for i:=1 to n do Begin Canvas.MoveTo(0,i*k1+y0); Canvas.LineTo(2*x0,i*k1+y0); Canvas.MoveTo(0,y0-i*k1); Canvas.LineTo(2*x0,y0-i*k1); end; for i:=1 to n do Begin Canvas.MoveTo(i*k2+x0,0); Canvas.LineTo(i*k2+x0,2*y0); Canvas.MoveTo(x0-i*k2,0); Canvas.LineTo(x0-i*k2,2*y0); end; end; procedure TForm1.Figure1Click(Sender: TObject); begin if ColorDialog1.Execute then Form1.Color:=ColorDialog1.Color; end; procedure TForm1.Panel5Click(Sender: TObject); begin if ColorDialog1.Execute then Form1.Panel1.Color:=ColorDialog1.Co lor; end; procedure TForm1.Quadrangle1Click(Sender: TObject); begin if colorDialog1.Execute then Begin Canvas.Pen.Color:=ColorDialog1.colo r; QuadColor:=inttostr(Canvas.Pen.Colo r); XA:=StrToInt(Edit1.text)+X0; XB:=StrToInt(Edit3.text)+X0; XC:=StrToInt(Edit5.text)+X0; XD:=StrToInt(Edit7.text)+X0; YA:=Y0-StrToInt(Edit2.text); YB:=Y0-StrToInt(Edit4.text); YC:=Y0-StrToInt(Edit6.text); YD:=Y0-StrToInt(Edit8.text); Canvas.MoveTo(XA,YA); Canvas.LineTo(XB,YB); Canvas.MoveTo(XB,YB); Canvas.LineTo(XC,YC); Canvas.MoveTo(XC,YC); Canvas.LineTo(XD,YD); Canvas.MoveTo(XD,YD); Canvas.LineTo(XA,YA); end; end; procedure TForm1.Koord1Click(Sender: TObject); begin if colordialog1.Execute then Begin Canvas.Pen.Color:=colordialog1.colo r; KoordColor:=inttostr(Canvas.Pen.Col or); for i:=1 to n do Begin Canvas.MoveTo(0,i*k1+y0); Canvas.LineTo(2*x0,i*k1+y0); Canvas.MoveTo(0,y0-i*k1); Canvas.LineTo(2*x0,y0-i*k1); end; for i:=1 to n do Begin Canvas.MoveTo(i*k2+x0,0); Canvas.LineTo(i*k2+x0,2*y0); Canvas.MoveTo(x0-i*k2,0); Canvas.LineTo(x0-i*k2,2*y0); end; end; end; procedure TForm1.Save1Click(Sender: TObject); begin Memo1.Lines.Add(inttostr(Form1.colo r)); Memo1.Lines.Add(inttostr(Panel1.col or)); Memo1.Lines.Add(Koordcolor); Memo1.Lines.Add(Quadcolor); Memo1.Lines.Add(Linescolor); Memo1.Lines.Add(DQuadcolor); Memo1.Lines.SaveToFile('Save.cys'); end; end. |
02.08.2011, 16:46 | #2 |
Пользователь
Регистрация: 19.07.2011
Сообщений: 28
|
А для переменных типа String разве не надо указывать их длину?
Цель оправдывает средства.
|
02.08.2011, 17:11 | #3 |
Пользователь
Регистрация: 04.07.2009
Сообщений: 61
|
правильно передавать строки так:
Код:
|
02.08.2011, 17:37 | #4 |
Форумчанин
Регистрация: 26.07.2009
Сообщений: 489
|
Ошибка в том, что программисту необходимо понимать весь алгоритм своей программы, а поскольку человеческий мозг может запоминать и обрабатывать только несколько вещей одновременно, то код, который пишет программист, должен быть разбит на более простые элементы. При этом, станет легче отлаживать программу, возможно исчезнут логические ошибки (если они есть).
Не хочется разбираться в этом большом коде, надеюсь, Вы прислушаетесь к моим советам.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
|
02.08.2011, 18:00 | #5 | ||
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Цитата:
Цитирую оригинальную дельфийскую справку от Борланд: Цитата:
|
||
02.08.2011, 18:04 | #6 |
Форумчанин
Регистрация: 26.07.2009
Сообщений: 489
|
На счет строк в Delphi, они обладают возможностью изменять размер самостоятельно.
Например: S := 'а'; здесь Length(S) = 1 S := 'ab'; здесь Length(S) = 2 Но можно изменять размер самому, потому что строка это массив, правда нумерация начинается с 1, а не с 0. 1) это удобно человеку, 2) раньше 1-ый байт использовали для хранения размер строки, это когда строки содеражали макс. 255 симв
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
|
03.08.2011, 11:23 | #7 |
Регистрация: 02.08.2011
Сообщений: 5
|
Пробывал уже писать Memo1.Lines.Strings[1] то же самое, но не могу пожаловаться на сам Делфи, так как на новой программе все нормально)
|
03.08.2011, 11:35 | #8 | |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Цитата:
Есть же TIniFile, вот и пиши в ini-файл целочисленные параметры (такие как значения св-в Color в твоем случае) методом WriteInteger. И считывай из потом непосредственно в соотв. свойство соотв. объекта вызовом ReadInteger. К чему тут Memo вообще ? Очевидного резона не наблюдается, потому иначе как 5-м колесом у телеги использование мемо для этой цели не назвать) |
|
03.08.2011, 14:54 | #9 |
Регистрация: 02.08.2011
Сообщений: 5
|
Дело в том, что мне нужно сделать это именно в Memo)Спасибо за подсказки, я разобрался, у Memo1 свойство WordWrap было true.
Последний раз редактировалось Zakharyan; 03.08.2011 в 15:37. |
03.08.2011, 17:07 | #10 |
Форумчанин
Регистрация: 26.07.2009
Сообщений: 489
|
Молодца, мне кажется, из тебя выйдет хороший программист...
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с Memo, символы | Delphinchik | Общие вопросы Delphi | 3 | 31.08.2010 09:10 |
Проблема с печатью из Memo | Poltev86 | Общие вопросы Delphi | 0 | 19.05.2010 09:15 |
проблема с memo | D_E_N | Общие вопросы Delphi | 2 | 07.01.2010 22:29 |
Проблема с кодировкой в MEMO | hacknet | Общие вопросы Delphi | 29 | 14.11.2008 19:15 |
проблема с Memo | KlErik | Компоненты Delphi | 9 | 27.07.2008 15:57 |