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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2009, 14:28   #1
ARXangel
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 24
По умолчанию StringGrid

Привет всем!
Подскажите где ошибка?
По нажатию на кнопку значения из Edit3 присваивается ячейке StringGridа и переходит к следующей ячейке, когда доходит до последней ячейке значение не присваивается но сообщение выдается.
Как сделать чтобы и к последней ячейке присваивалось значение, а потом уже выводилось сообщение?
Заранее спасибо!
Код:
var
   i,j:integer;
begin
    with StringGrid1 do
      if Col<ColCount-1 then
        begin
             j:=StringGrid1.Col;
             for i:=0 to StringGrid1.ColCount do
                StringGrid1.Cells[j,0]:=Edit3.Text;
                Edit3.Text:='';
                Col:=Col+1;
        end
      else
          if Row < RowCount - 1 then
      begin
            ShowMessage('Закончились ячейки!')
      end;
Если вы хотите защитить вашу систему от «дурака», то всегда найдется один такой, изобретательность которого вы и предвидеть не могли.
ARXangel вне форума Ответить с цитированием
Старый 15.04.2009, 15:38   #2
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

я шото не поймку.. присваиваешь в столбцы
if Col<ColCount-1 then

а проверяешь строки
if Row < RowCount - 1 then begin
ShowMessage('Закончились ячейки!')



зачем тебе переменная i и цыкл??

и еще одно..
for i:=0 to StringGrid1.ColCount-1 do иначе бдет ошибка..

а вообще поробуй переписать код так:

Код:
var
   i,j:integer;
begin
//нумерацыя ячеек идет с 0
if StringGrid1.Col<StringGrid1.ColCount
   then begin
      StringGrid1.Cells[StringGrid1.Col,0]:=Edit3.Text;
      Edit3.Text:='';
      if StringGrid1.Col+1<StringGrid1.ColCount
         then    Col:=Col+1;
         else     ShowMessage('Закончились ячейки!')
   end;
end;
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 15.04.2009, 15:55   #3
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Еще пара вариантов. Страждущий не уточнил что значит в его представлении "последняя ячейка". То ли это последняя ячейка в строке, то ли в таблице, поэтому два варианта: первый, заполнение заканчивается на последней ячейке таблицы, второй, если заполняется последняя ячейка в строке.
Код:
{
  with StringGrid1 do begin
    Cells[Col, Row] := Edit1.Text;
    Edit1.Text:='';
    if Col < ColCount-1 then
      Col := Col + 1
    else begin
      Col := 0;
      Row := Row + 1;
      if Row = RowCount - 1 then
        ShowMessage('Закончились ячейки в таблице!');
    end;
  end;
}
  with StringGrid1 do begin
    Cells[Col, Row] := Edit1.Text;
    Edit1.Text:='';
    if Col < ColCount-1 then
      Col := Col + 1
    else
      ShowMessage(''Закончились ячейки в строке!');
  end;

Последний раз редактировалось Скандербег; 15.04.2009 в 15:59.
Скандербег вне форума Ответить с цитированием
Старый 15.04.2009, 16:03   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
if Row < RowCount - 1 then
=>
Код:
if Row < RowCount then
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 16.04.2009, 08:06   #5
ARXangel
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 24
По умолчанию

Большое спасибо всем за помощь!

И еще один вопрос значение самой верхней строки StringGridа, я сохраняю в INI файл, все в принципе работает, только в процессе работы программы могут быть добавлены (или удалены) столбцы. А сохраняет значение только тех ячеек, которые были установлены в Object Inspector.
Подскажите, как сохранять значение и тех, которые были добавлены в процессе выполнения программы?

Код:
procedure TForm1.FormCreate(Sender: TObject);

  F.ReadSection('access', StringGrid1.Rows[j]);
  for j:=0 to StringGrid1.ColCount-1 do
    StringGrid1.Cells[j,0]:=F.ReadString('access',StringGrid1.Cells[j,0] ,'');

…

procedure TForm1.FormDestroy(Sender: TObject);
for j:= 0 to StringGrid1.ColCount-1 do
 F.WriteString('access', 'el' + IntToStr(j+1), StringGrid1.Cells[j,0]);
Если вы хотите защитить вашу систему от «дурака», то всегда найдется один такой, изобретательность которого вы и предвидеть не могли.
ARXangel вне форума Ответить с цитированием
Старый 16.04.2009, 09:16   #6
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Заголовки лучше сохранять не в INI файл. В нем сложно работать с циклами. Здесь что получается. При запуске программы в таблице определенное кол-во колонок, по которому происходит попытка чтения из INI файла только тех, которые на данный момент есть в таблице
(for j:=0 to StringGrid1.ColCount-1 do), а остальные?

Очень просто сохранить заголовочную строку в отдельный файл, а затем прочитать из него:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var FN : string;
    SL : TStringList;
begin
  FN := ExtractFilePath(Application.ExeName)+'header.txt';
  if FileExists(FN) then begin
    SL := TStringList.Create;
    SL.LoadFromFile(FN);
    SG.ColCount := SL.Count;
    SG.Rows[0].Assign(SL);
    SL.Free;
  end;
//по заголовкам из файла восстанавливается количество колонок, которое было при сохранении
...
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var FN : string;
begin
  FN := ExtractFilePath(Application.ExeName)+'header.txt';
  StringGrid1.Rows[0].SaveToFile(FN);
end;

Последний раз редактировалось Скандербег; 16.04.2009 в 09:50. Причина: Исправление кода
Скандербег вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid Witaliy Общие вопросы Delphi 4 05.04.2012 11:57
stringgrid UROKSAN Общие вопросы Delphi 1 08.04.2008 13:28
StringGrid MAcK Общие вопросы .NET 2 31.03.2008 11:40
StringGrid Dimon88 Компоненты Delphi 15 14.02.2008 11:44
StringGrid bart77 Помощь студентам 9 27.04.2007 09:35