Поискал по форуму, нашёл много информации по данному объекту, но всё же остались некоторые вопросы. В данном компоненте у меня есть 3 колонны (они не меняются). Перввый столбик номер элемента списка, второй - товар в магазине (тип стринг), 3й - цена товара типа integer. У меня есть процедура добавления товара в список, осталось реализовать её визуально с помощью данного компонента. Есть глобальная переменная (допустим N), которая отвечает за количество элементов в списке. При добавлении элемента она величивается, а при удалении сответственно уменьшается. С организацией данного цикла проблем не возникает :
for k := 1 to N do StringGrid1.Cells[0,k] :=IntToStr(K);
Но изначально я установил количество рядов = 5, а если товара больше то скролл вниз не появляется (вроде инспектор просмотрел, ничего хорошего не вышло). Получается так что клетки по идее заполняются в цикле но увидеть их пользователь не может.
Scorp_Freeman
27.04.2007 20:41
Цитата
рядов = 5, а если товара больше то скролл вниз не появляется
а ты програмно увеличивай и кол-во строк стрингрида( они сами не добавляются), например так: inc(StringGrid1.RowCount) и dec(StringGrid1.RowCount)
Tan
27.04.2007 20:59
спасибо, но с inc ошибку выдаёт, а
StringGrid1.RowCount := StringGrid1.RowCount + 1
работает как надо!
Tan
27.04.2007 21:21
А как можно удалить строку стрингрида через её порядковый номер ?
volvo
27.04.2007 21:51
procedure SGDeleteRow(SG:TStringGrid; RowToDelete:Integer); var i: Integer; begin with SG do begin if (RowToDelete>=0) and (RowToDelete<RowCount) then begin for i:=RowToDelete to RowCount-2 do Rows[i].Assign(Rows[i+1]); RowCount:= RowCount-1; end; end; end;
Спасибо в который раз! Разобравшись с этим, появился ещё вопрос, а как выделить N - нный ряд StringGrid`а ? Знаю, что есть встроенная функция Selection, но там мне непонятен параметр с типом TGridRect.
volvo
27.04.2007 23:43
На самом деле все достаточно просто (это, кстати, свойство, а не функция) - ты указываешь границы выделяемой области, и ...
procedure TForm1.Button5Click(Sender: TObject); var myrect: TGridRect; begin with myrect do begin Left := 0; Top := strtoint(edit1.Text); // <--- вот этот ряд будем выделять Right := StringGrid1.ColCount - 1; Bottom := Top; // Одна и та же строка end; StringGrid1.Selection := myrect; end;
Tan
28.04.2007 2:00
С этим разобрался, а можно ли сделать так, чтобы если элемент находится в ряду, который ниже видимого и пользователь его не видет, то чтобы при выделении, описанном выше, автоматически прокручивалось до этого элемента (нечто подобное поиску в worde) ?
volvo
28.04.2007 2:14
Добавь
StringGrid1.Selection := myrect; StringGrid1.TopRow := myrect.Top; // <--- Вот это
к предыдущему коду, и будет тебе та строка, которая выделена - верхней...
Tan
28.04.2007 13:35
Спасибо всем, всё понял!
Tan
28.04.2007 19:08
Появился небольшой вопросик, а можно как - то одной командой (ака .Clear) очистить StringGrid ??
volvo
28.04.2007 19:57
Одной командой - вряд ли... Можно попробовать так - одним циклом:
for I := 0 to StringGrid1.RowCount - 1 do StringGrid1.Rows[I].Clear();
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.