IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> StringGrid.
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Поискал по форуму, нашёл много информации по данному объекту, но всё же остались некоторые вопросы. В данном компоненте у меня есть 3 колонны (они не меняются). Перввый столбик номер элемента списка, второй - товар в магазине (тип стринг), 3й - цена товара типа integer. У меня есть процедура добавления товара в список, осталось реализовать её визуально с помощью данного компонента. Есть глобальная переменная (допустим N), которая отвечает за количество элементов в списке. При добавлении элемента она величивается, а при удалении сответственно уменьшается. С организацией данного цикла проблем не возникает :
for k := 1 to N do
StringGrid1.Cells[0,k] :=IntToStr(K);
Но изначально я установил количество рядов = 5, а если товара больше то скролл вниз не появляется (вроде инспектор просмотрел, ничего хорошего не вышло). Получается так что клетки по идее заполняются в цикле но увидеть их пользователь не может.

Сообщение отредактировано: Tan -


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 68
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Цитата

рядов = 5, а если товара больше то скролл вниз не появляется


а ты програмно увеличивай и кол-во строк стрингрида( они сами не добавляются), например так:
inc(StringGrid1.RowCount) и dec(StringGrid1.RowCount)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


спасибо, но с inc ошибку выдаёт, а
StringGrid1.RowCount := StringGrid1.RowCount + 1
работает как надо!


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


А как можно удалить строку стрингрида через её порядковый номер ?


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






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;

© MBo

Вызывать, например, так:
...
SGDeleteRow(StringGrid1, strtoint(Edit1.text));
...

 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Спасибо в который раз! Разобравшись с этим, появился ещё вопрос, а как выделить N - нный ряд StringGrid`а ? Знаю, что есть встроенная функция Selection, но там мне непонятен параметр с типом TGridRect.


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






На самом деле все достаточно просто (это, кстати, свойство, а не функция) - ты указываешь границы выделяемой области, и ...

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;

 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


С этим разобрался, а можно ли сделать так, чтобы если элемент находится в ряду, который ниже видимого и пользователь его не видет, то чтобы при выделении, описанном выше, автоматически прокручивалось до этого элемента (нечто подобное поиску в worde) ?


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Добавь

StringGrid1.Selection := myrect;
StringGrid1.TopRow := myrect.Top; // <--- Вот это


к предыдущему коду, и будет тебе та строка, которая выделена - верхней...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Спасибо всем, всё понял!

Сообщение отредактировано: Tan -


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Появился небольшой вопросик, а можно как - то одной командой (ака .Clear) очистить StringGrid ??


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Одной командой - вряд ли... Можно попробовать так - одним циклом:

   for I := 0 to StringGrid1.RowCount - 1 do
StringGrid1.Rows[I].Clear();
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.09.2020 17:56
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name