Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Мой первый дельфин.


Рекомендуемые сообщения

Надоело мыкаться по другим темам. Надеюсь в отдельно взятой теме мои вопросы не потеряются и найдётся хоть кто-то, кто сможет ответить. Не думаю, что моя проблема сложна, для имеющих хоть какой-то опыт.

После перерыва вернулся к написанию своей первой проги. Продвинулся вперёд, но застрял на одной мелочи, которой нет ни в одном из моих учебников (дикость!). Поясню на упрощённом примере: есть кнопка "1" и таблица StringGrid (без фиксированной зоны).

procedure TForm1.Button1Click(Sender: TObject);

begin

StringGrid1.Cells [1,0]:= '1';

end;

Всё работает, но как заставить прогу при каждом новом нажатии кнопки ставить "1" в следудующий пустой ряд данного столбца (если следующий ряд в другом столбце занят, этот ряд тоже надо пропустить!)? Внешне это должно быть похоже на табло, что стоит возле колеса рулетки. Выпадает красное - занимает первый ряд в первом столбце, выпадает чёрное - второй ряд во втором столбце и т.д. Только у меня столбцов намного больше.

В учебниках есть примеры использования StringGrid. Увы, они мне не подходит. Пытался эксперементировать с "NRow", "inc(NRow)", но Делфи их отвергает.

Изменено пользователем Skif
Ссылка на комментарий
Поделиться на другие сайты

Привет

Сначало надо нам надо сделат 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 как нужно

Ссылка на комментарий
Поделиться на другие сайты

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'

Ссылка на комментарий
Поделиться на другие сайты

Skif:

Там у Darhazer не символы кавычек, а по два символа апострофа, то есть пустые строки. И загони оба сравнения с пустыми строками каждое в скобки, чтобы and было между двумя заключенными в скобки выражениями.

P.S. Проверил, какие символы у тебя в сообщении, все правильно, у тебя не кавычки, а апострофы, мне они сначала показались кавычками. Так что остается только второе предложение.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль:

Я скоби неправильно поставил

Извините, но у меня только Visual C++ стоить, нет где проверят

while (StringGrid1.Cells [gridY, gridX] <> '') and (StringGrid1.Cells [gridY, gridX+1] <> '' ) do
Ссылка на комментарий
Поделиться на другие сайты

УРА!!! ЗАРАБОТАЛО!!!

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;

Тролль, спасибо за ")". Отсутствие опыта следить за каждым знаком сказалось.

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...