![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
memo. запись в строку
Arthur © (2016-09-28 00:38:00)вот часть кода...есть матрица и мемо...нужно вывести количество нечетных чисел в каждом столбе..как сделать чтобы в мемо числа выводились в одну строку(т.е. под каждым столбом)
kilkennycat (2016-09-29 15:54:00) [1]
> s = ' '; //тут пробелами задается первый отступ
двоеточие пропустил. s := ' ';
kilkennycat (2016-09-29 15:53:00) [2]ну тогда как-то так:
procedure TForm1.Button2Click(Sender: TObject);
var
col,row,err,chislo,counter:integer;
s : string;
begin
counter:=0;
s = ' '; //тут пробелами задается первый отступ
for row := 0 to StringGrid1.RowCount-1 do begin
for col := 0 to StringGrid1.ColCount-1 do begin
Val(StringGrid1.Cells[col,row],chislo,err);
if err<>0 then begin
ShowMessage('ошибка синтаксиса в матрице');
Exit;
end;
if chislo mod 2 = 1 then inc(counter);
end;
s := s + IntToStr(counter) + ' '; //тут пробелами задается расстояние между числами
counter:=0;
end;
Memo1.Text = s;
end;
Arthur (2016-09-29 02:17:00) [3]> а вообще, я правильно понимаю, что это всё выглядит как стринггрид с расположенным под ним мемо??
да, правильно.
> в этом случае почему бы просто не отрисовывать это всё в последней строке стринггрида?
это слишком для меня)
kilkennycat (2016-09-29 01:01:00) [4]
> kilkennycat © (29.09.16 00:56) [9]
в этом случае почему бы просто не отрисовывать это всё в последней строке стринггрида?
если проблема связана с вертикальным скроллингом, то отрисовывать самому в TStringGrid.OnDrawCell, выводя в последнюю строку вместо "данных" стринггрида то самое кол-во чисел. Другим цветом. или на другом фоне.
kilkennycat (2016-09-29 00:56:00) [5]а вообще, я правильно понимаю, что это всё выглядит как стринггрид с расположенным под ним мемо??
kilkennycat (2016-09-29 00:53:00) [6]
> Arthur (28.09.16 18:47) [6]
> чтобы вывести количество нечетн чисел под каждым столбом,
> щас попробую
Да?
тогда что делает эта:
Memo1.Lines.Add(IntToStr(counter)); ?
Arthur (2016-09-28 18:51:00) [7]> kilkennycat © (28.09.16 02:51) [2]
а куда вставить эту строку?
Arthur (2016-09-28 18:47:00) [8]> это зачем, да еще в цикле?
чтобы вывести количество нечетн чисел под каждым столбом, щас попробую
kilkennycat (2016-09-28 15:24:00) [9]
> Игорь Шевченко © (28.09.16 10:25) [4]
да, забыл про это. но и вредное свойство тоже есть - сепараторы не поддерживаются.
Игорь Шевченко (2016-09-28 10:25:00) [10]
> > Val
>
> устарела.
Нифига. У этой функции есть полезное свойство - возвращать индекс первого нечислового символа.
kilkennycat (2016-09-28 02:55:00) [11]
> for j:=0 to m-1 do
> begin
> for i:=0 to n-1 do
> begin
> Val(StringGrid1.Cells[j,i]
небезопасное обращение к массиву ячеек, нет проверки и\или обработки выхода за пределы
kilkennycat (2016-09-28 02:51:00) [12]
> как сделать чтобы в мемо числа выводились в одну строку(т.
> е. под каждым столбом)
для этого главное: использовать моноширинный шрифт - где ширина у всех символов, в том числе пробелов, одинаковая.
> SendMessageA(Memo1.Handle,EM_SETHANDLE,LongInt(counter),0);
это зачем, да еще в цикле?
> Val
устарела.
Arthur (2016-09-28 00:38:00) [13]procedure TForm1.Button2Click(Sender: TObject);
var x:array of array of integer;
i,j,Cod,counter:integer;
begin
SetLength(x,n,m);
counter:=0;
for j:=0 to m-1 do
begin
for i:=0 to n-1 do
begin
Val(StringGrid1.Cells[j,i],x[i,j],Cod);
if Cod<>0 then begin
ShowMessage('ошибка синтаксиса в матрице');
SetLength(x,0,0); Exit;
end;
if x[i,j] mod 2 = 1 then
counter:=counter+1;
end;
SendMessageA(Memo1.Handle,EM_SETHANDLE,LongInt(counter),0);
Memo1.Lines.Add(IntToStr(counter));
counter:=0;
end;
end;