Jump to content

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


Recommended Posts

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

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

procedure TForm1.Button1Click(Sender: TObject);

begin

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

end;

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

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

Edited by Skif
Link to comment
Share on other sites

Привет

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

Link to comment
Share on other sites

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'

Link to comment
Share on other sites

Skif:

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

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

Edited by Тролль
Link to comment
Share on other sites

Тролль:

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

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

while (StringGrid1.Cells [gridY, gridX] <> '') and (StringGrid1.Cells [gridY, gridX+1] <> '' ) do
Link to comment
Share on other sites

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

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;

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...