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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2014, 13:34   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Tstringgrid, расчет подстрок в ячейке

Здравствуйте, в интернете нагуглил программу, которая по нажатию Enter создает новую подстроку в ячейке, где фокус, модернизировал ее, чтоб сохраняла-выводила данные (события formclose,formshow, если кому надо). Теперь возникла такая задача: так как строки ячейки записываются через объект мемо, то нужно проверить, убран ли фокус с ячейки, если да, то проверить: если в ячейке одни цифры, то суммировать их. и перезаписать вместо слагаемых-сумму.

А, чуть не забыл, вот мои наработки по этому поводу:

Код:
procedure TForm1.Memo1Exit(Sender: TObject);
var
  Memo: TMemo;
  jj:Integer;
  summ:real;
  chislo:Boolean;
begin
  chislo:=false;
  Memo := Sender as TMemo;
  //Текст из Мемо записываем в ячейку.
  for  jj:=0 to Memo.Lines.Count-1 do
  begin
  memo.Lines[jj]:=trim(memo.lines[jj]);
    if  not (memo.Lines[jj] in ['0'..'9']) then   chislo:=True;
  end;
  if not chislo then
  begin
  summ:=0;
   for jj:=0 to memo1.Lines.Count-1 do
     summ:=summ+strtofloat(Memo.Lines[jj]);
     Memo.Text:=FormatFloat('0.00'.summ);
  end;
  StringGrid1.Cells[FCol, FRow] := Memo.Text;
  //Прячем Мемо.
  Memo.Visible := False;
end;
Выплывает ошибка: [Error] Unit1.pas(176): Incompatible types: 'String' and 'Char'

в 176 строке код: if not (memo.Lines[jj] in ['0'..'9']) then chislo:=True;
Вложения
Тип файла: zip работа TstringGrid.zip (240.3 Кб, 4 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 23.05.2014 в 13:44.
Алексей_2012 вне форума Ответить с цитированием
Старый 23.05.2014, 13:50   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Сообщение и говорит что memo.Lines[jj] строкового типа, а в данном контексте там должен быть тип char. Так уж устроен паскаль
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2014, 13:50   #3
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Извиняюсь, исправил, заработало, но есть ли способ проще? (Добавление двух лишних переменных для какой-то проверки) И кстати, извиняюсь за глупый вопрос, но сколько символов вмещает в себя переменная s:string? 256? Потому что где-то слышал что какая-то переменая, или что-то вроде может хранить в себе до 2-х гб текста, или я что-то не так понял?

Код:
procedure TForm1.Memo1Exit(Sender: TObject);
var
  Memo: TMemo;
  jj, ii: Integer;
  summ: real;
  s: string;
  chislo: Boolean;
begin
  chislo := false;
  Memo := Sender as TMemo;
  //Текст из Мемо записываем в ячейку.
  for jj := 0 to Memo.Lines.Count - 1 do
  begin
    s := trim(memo.lines[jj]);
    for ii := 1 to Length(S) do
      if not (s[ii] in ['0'..'9', ',', '.']) then
        chislo := True
      else
        if s[ii] = '.' then s[ii] := ',';
    memo.lines[jj] := s;
  end;
  if not chislo then
  begin
    summ := 0;
    for jj := 0 to memo.Lines.Count - 1 do
    if memo.Lines[jj]<>'' then
      summ := summ + strtofloat(Memo.Lines[jj]);
    Memo.Text := FormatFloat('0.00', summ);
  end;
  StringGrid1.Cells[FCol, FRow] := Memo.Text;
  //Прячем Мемо.
  Memo.Visible := False;
end;
from dark to light)

Последний раз редактировалось Алексей_2012; 23.05.2014 в 14:12.
Алексей_2012 вне форума Ответить с цитированием
Старый 23.05.2014, 13:53   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Проще это как - одной командой? Можно - оформите код функцией, а в OnExit одной командой обратитесь к ней.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2014, 13:55   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Проще только функцией? Ладно, оставлю так, сейчас сделаю проверку: если одни числа в подстроках, то начать новый цикл по проверке точек и замены на запятую, дабы уменьшить вероятность недоделок)

Все, готово, надо было быть внимательнее, прежде чем создавать тему, ну да ладно, может кому и пригодиться.
Вложения
Тип файла: zip работа TstringGrid.zip (242.0 Кб, 5 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 23.05.2014 в 14:13.
Алексей_2012 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
предустановленный расчет в ячейке Dima36668 Microsoft Office Excel 1 21.02.2013 10:20
Расчет интервала времени в одной ячейке sadman72 Microsoft Office Excel 5 25.02.2012 00:58
Расчет в ячейке с изменением цвета... Александр_63 Microsoft Office Excel 5 06.06.2010 13:02
TStringGrid. Как удержать фокус на ячейке таблицы? ruma Помощь студентам 1 22.10.2007 12:49