Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2011, 16:26   #1
Zakharyan
 
Регистрация: 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.
Zakharyan вне форума Ответить с цитированием
Старый 02.08.2011, 16:46   #2
LSpirit
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 28
По умолчанию

А для переменных типа String разве не надо указывать их длину?
Цель оправдывает средства.
LSpirit вне форума Ответить с цитированием
Старый 02.08.2011, 17:11   #3
art-programs
Пользователь
 
Регистрация: 04.07.2009
Сообщений: 61
По умолчанию

правильно передавать строки так:
Код:
Form1color:=memo1.Lines.Strings[0];
длину строк можно и не указывать
art-programs вне форума Ответить с цитированием
Старый 02.08.2011, 17:37   #4
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Ошибка в том, что программисту необходимо понимать весь алгоритм своей программы, а поскольку человеческий мозг может запоминать и обрабатывать только несколько вещей одновременно, то код, который пишет программист, должен быть разбит на более простые элементы. При этом, станет легче отлаживать программу, возможно исчезнут логические ошибки (если они есть).
Не хочется разбираться в этом большом коде, надеюсь, Вы прислушаетесь к моим советам.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 02.08.2011, 18:00   #5
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
правильно передавать строки так
А мужики-то из Борланд и не знали)

Цитирую оригинальную дельфийскую справку от Борланд:

Цитата:
In Delphi, Strings is the default property of TStrings objects. The Strings identifier can be omitted when accessing the Strings property of a descendant of TStrings. For example, the following two lines of code are both acceptable and do the same thing:

MyStrings.Strings[0] := 'This is the first string';

MyStrings[0] := 'This is the first string';
mss вне форума Ответить с цитированием
Старый 02.08.2011, 18:04   #6
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

На счет строк в Delphi, они обладают возможностью изменять размер самостоятельно.
Например:
S := 'а'; здесь Length(S) = 1
S := 'ab'; здесь Length(S) = 2

Но можно изменять размер самому, потому что строка это массив, правда нумерация начинается с 1, а не с 0. 1) это удобно человеку, 2) раньше 1-ый байт использовали для хранения размер строки, это когда строки содеражали макс. 255 симв
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 03.08.2011, 11:23   #7
Zakharyan
 
Регистрация: 02.08.2011
Сообщений: 5
По умолчанию

Пробывал уже писать Memo1.Lines.Strings[1] то же самое, но не могу пожаловаться на сам Делфи, так как на новой программе все нормально)
Zakharyan вне форума Ответить с цитированием
Старый 03.08.2011, 11:35   #8
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Пробывал уже писать Memo
Скажи, любезный, а зачем вообще пользовать мемо для сохранения-загрузки параметров, да еще и нестроковых ?
Есть же TIniFile, вот и пиши в ini-файл целочисленные параметры (такие как значения св-в Color в твоем случае) методом WriteInteger. И считывай из потом непосредственно в соотв. свойство соотв. объекта вызовом ReadInteger.

К чему тут Memo вообще ? Очевидного резона не наблюдается, потому иначе как 5-м колесом у телеги использование мемо для этой цели не назвать)
mss вне форума Ответить с цитированием
Старый 03.08.2011, 14:54   #9
Zakharyan
 
Регистрация: 02.08.2011
Сообщений: 5
По умолчанию

Дело в том, что мне нужно сделать это именно в Memo)Спасибо за подсказки, я разобрался, у Memo1 свойство WordWrap было true.

Последний раз редактировалось Zakharyan; 03.08.2011 в 15:37.
Zakharyan вне форума Ответить с цитированием
Старый 03.08.2011, 17:07   #10
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Молодца, мне кажется, из тебя выйдет хороший программист...
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с 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