Skif Опубликовано 7 марта, 2007 Жалоба Поделиться Опубликовано 7 марта, 2007 (изменено) Надоело мыкаться по другим темам. Надеюсь в отдельно взятой теме мои вопросы не потеряются и найдётся хоть кто-то, кто сможет ответить. Не думаю, что моя проблема сложна, для имеющих хоть какой-то опыт. После перерыва вернулся к написанию своей первой проги. Продвинулся вперёд, но застрял на одной мелочи, которой нет ни в одном из моих учебников (дикость!). Поясню на упрощённом примере: есть кнопка "1" и таблица StringGrid (без фиксированной зоны). procedure TForm1.Button1Click(Sender: TObject);begin StringGrid1.Cells [1,0]:= '1'; end; Всё работает, но как заставить прогу при каждом новом нажатии кнопки ставить "1" в следудующий пустой ряд данного столбца (если следующий ряд в другом столбце занят, этот ряд тоже надо пропустить!)? Внешне это должно быть похоже на табло, что стоит возле колеса рулетки. Выпадает красное - занимает первый ряд в первом столбце, выпадает чёрное - второй ряд во втором столбце и т.д. Только у меня столбцов намного больше. В учебниках есть примеры использования StringGrid. Увы, они мне не подходит. Пытался эксперементировать с "NRow", "inc(NRow)", но Делфи их отвергает. Изменено 7 марта, 2007 пользователем Skif Ссылка на комментарий Поделиться на другие сайты Поделиться
Darhazer Опубликовано 7 марта, 2007 Жалоба Поделиться Опубликовано 7 марта, 2007 Привет Сначало надо нам надо сделат var для координатов gridX: integer;gridY: integer; Потом в нашей процедури: procedure TForm1.Button1Click(Sender: TObject);begininc(gridY);while (StringGrid1.Cells [gridY, gridX]) <> '' and (StringGrid1.Cells [gridY, gridX+1] <> '' ) doinc(gridY);StringGrid1.Cells [gridY, gridX]:= '1';end; Надеюсь понял правильно твой вопрос, но если не так, думаю легко отредактируеш код чтоб обходил твой StringGrid как нужно Ссылка на комментарий Поделиться на другие сайты Поделиться
Skif Опубликовано 7 марта, 2007 Автор Жалоба Поделиться Опубликовано 7 марта, 2007 Darhazer, спасибо, что откликнулся, но предложенный вариант не удаётся прогнать. Делфи не нравится эта строка (32): while (StringGrid1.Cells [gridY, gridX]) <> '' and (StringGrid1.Cells [gridY, gridX+1] <> '' ) do [Error]Unit1.pas[32]:Incompatible types:'String' and 'Boolean'[Fatal Error]Project1.drp[5]:Could not compile used unit 'Unit1.pas' Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 7 марта, 2007 Жалоба Поделиться Опубликовано 7 марта, 2007 (изменено) Skif: Там у Darhazer не символы кавычек, а по два символа апострофа, то есть пустые строки. И загони оба сравнения с пустыми строками каждое в скобки, чтобы and было между двумя заключенными в скобки выражениями. P.S. Проверил, какие символы у тебя в сообщении, все правильно, у тебя не кавычки, а апострофы, мне они сначала показались кавычками. Так что остается только второе предложение. Изменено 7 марта, 2007 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Darhazer Опубликовано 8 марта, 2007 Жалоба Поделиться Опубликовано 8 марта, 2007 Тролль: Я скоби неправильно поставил Извините, но у меня только Visual C++ стоить, нет где проверят while (StringGrid1.Cells [gridY, gridX] <> '') and (StringGrid1.Cells [gridY, gridX+1] <> '' ) do Ссылка на комментарий Поделиться на другие сайты Поделиться
Skif Опубликовано 8 марта, 2007 Автор Жалоба Поделиться Опубликовано 8 марта, 2007 УРА!!! ЗАРАБОТАЛО!!! Darhazer, спасибо, что натолкнул на правильный путь. Момент с переменными я прошляпил. Код немного изменил: procedure TForm1.Button1Click(Sender: TObject);begin inc(gridX); while (StringGrid1.Cells [1,gridX] <> '') and (StringGrid1.Cells [1,gridX+1] <> '') do inc(gridX); StringGrid1.Cells [1, gridX]:= '1'; end; Тролль, спасибо за ")". Отсутствие опыта следить за каждым знаком сказалось. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти