Skif Posted March 7, 2007 Report Share Posted March 7, 2007 (edited) Надоело мыкаться по другим темам. Надеюсь в отдельно взятой теме мои вопросы не потеряются и найдётся хоть кто-то, кто сможет ответить. Не думаю, что моя проблема сложна, для имеющих хоть какой-то опыт. После перерыва вернулся к написанию своей первой проги. Продвинулся вперёд, но застрял на одной мелочи, которой нет ни в одном из моих учебников (дикость!). Поясню на упрощённом примере: есть кнопка "1" и таблица StringGrid (без фиксированной зоны). procedure TForm1.Button1Click(Sender: TObject);begin StringGrid1.Cells [1,0]:= '1'; end; Всё работает, но как заставить прогу при каждом новом нажатии кнопки ставить "1" в следудующий пустой ряд данного столбца (если следующий ряд в другом столбце занят, этот ряд тоже надо пропустить!)? Внешне это должно быть похоже на табло, что стоит возле колеса рулетки. Выпадает красное - занимает первый ряд в первом столбце, выпадает чёрное - второй ряд во втором столбце и т.д. Только у меня столбцов намного больше. В учебниках есть примеры использования StringGrid. Увы, они мне не подходит. Пытался эксперементировать с "NRow", "inc(NRow)", но Делфи их отвергает. Edited March 7, 2007 by Skif Link to comment Share on other sites More sharing options...
Darhazer Posted March 7, 2007 Report Share Posted March 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 как нужно Link to comment Share on other sites More sharing options...
Skif Posted March 7, 2007 Author Report Share Posted March 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' Link to comment Share on other sites More sharing options...
Тролль Posted March 7, 2007 Report Share Posted March 7, 2007 (edited) Skif: Там у Darhazer не символы кавычек, а по два символа апострофа, то есть пустые строки. И загони оба сравнения с пустыми строками каждое в скобки, чтобы and было между двумя заключенными в скобки выражениями. P.S. Проверил, какие символы у тебя в сообщении, все правильно, у тебя не кавычки, а апострофы, мне они сначала показались кавычками. Так что остается только второе предложение. Edited March 7, 2007 by Тролль Link to comment Share on other sites More sharing options...
Darhazer Posted March 8, 2007 Report Share Posted March 8, 2007 Тролль: Я скоби неправильно поставил Извините, но у меня только Visual C++ стоить, нет где проверят while (StringGrid1.Cells [gridY, gridX] <> '') and (StringGrid1.Cells [gridY, gridX+1] <> '' ) do Link to comment Share on other sites More sharing options...
Skif Posted March 8, 2007 Author Report Share Posted March 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; Тролль, спасибо за ")". Отсутствие опыта следить за каждым знаком сказалось. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now