Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо