Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StringGrid, удаление строки 
:(
    Опции темы
Гость_Инна
Дата 17.11.2005, 14:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подскажите как правильно удалить строку с известным номером из StringGrid?
Спасибо.
  Вверх
_hunter
Дата 17.11.2005, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



поднимаем все строки под этой на одну вверх и уменьшаем RowCount на 1


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_Инна
Дата 17.11.2005, 15:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Пытаюсь убрать все строки у который во второй колонке пусто. Как правильно поднимать строки?
int u = Form1->StringGrid1->RowCount;
for (int i = 0; i<u ; i++)
{
if(Form1->StringGrid1->Cells[1][i] == "")
//поднять как?

Form1->StringGrid1->RowCount = Form1->StringGrid1->RowCount-1;
}
  Вверх
_hunter
Дата 17.11.2005, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



поднять -- это перенести значения всех ячеек строки


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_Инна
Дата 17.11.2005, 16:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











int yborka = Form1->StringGrid1->RowCount;
for (int i = 0; i<yborka ; i++)
{
if(Form1->StringGrid1->Cells[1][i] == "")
{
for (int i = 0; i<yborka ; i++)
{
Form1->StringGrid1->Cells[0][i]=Form1->StringGrid1->Cells[0][i+1];
Form1->StringGrid1->Cells[1][i]=Form1->StringGrid1->Cells[1][i+1];
}
Form1->StringGrid1->RowCount = Form1->StringGrid1->RowCount-1;
}
}
Не работает. Где ошибка?
  Вверх
_hunter
Дата 17.11.2005, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



на вопрос
Цитата
Где ошибка?

я могу ответить только "там".

что значит "Не работает"?
Добавлено @ 16:36
P.S.
не стесняемся на кнопку "Код" тыкать...

P.P.S.
два цикла с одной переменной -- не есть гут...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Гость_Инна
Дата 17.11.2005, 16:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











СтрингГрид состоит из двух колонок. Во второй колонке есть пустые ячейки. Строки в которых присутствуют пустые значения во второй колонке надо убрать из СтрингГрид. Код выше с этим не справляется. Остаются пустые строки во второй колонке.
Еще подскажите: при старте приложения всегда выделена первая ячейка в первой колонке СтрингГрида, как сделать, чтобы этого выделения не было. И как менять размеры колонок, установила goColSizing в true, но поменять размер колонок не удается курсором мыши.
У меня СтрингГрид без фиксированных колонок и строк.
Спасибо.

  Вверх
Vyacheslav
Дата 17.11.2005, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Надо нежнее, еще нежнее
Код


void __fastcall TForm1::Button2Click(TObject *Sender)
{


class TPublicGrid: public  TStringGrid
{
    public:
        using TStringGrid::DeleteRow;
};
((TPublicGrid*)StringGrid1)->DeleteRow(1);


}



Добавлено @ 16:51
Код


class TPublicGrid: public  TStringGrid
{
    public:
        using TStringGrid::DeleteRow;
};
for (int i = StringGrid1->RowCount ; i--;)
{
      if(Form1->StringGrid1->Cells[1][i] == "")
        ((TPublicGrid*)StringGrid1)->DeleteRow(i);
}





--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Гость_Инна
Дата 17.11.2005, 18:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо, работает smile
Теоретически это как реализовано? Идет переопределение защищенной переменной из класса TStringGrid? За что отвечает эта переменная в базовом классе TStringGrid? Почему классический TStringGrid не дает так просто удалять?
Еще вопросы:
Подскажите, как программно установить ширину двух колонок в StringGrid в зависимости от самого длинного текста в каждой из них и как снять выделение с первой ячейки StringGrid в момент его появления на форме?
Спасибо.


  Вверх
_hunter
Дата 17.11.2005, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



это называется взлом класса ( и нет там никакой переменой )
а почему удалять не дает -- у разработчиков спрашивать надобно...
ширину установить -- ColWidths
длину текста определить -- stringGrid->Canvas->TextWidth()
выделение убрать -- Col в -1 поставить попробуй ( ну или HideSelection в Design Time' е в true а потом вернуть в false )



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Vyacheslav
Дата 17.11.2005, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Здесь прсото создается некий прокси-класс, у которого всего лишь чисто декоративное отличие:
метод DeleteRow, объявленный как protected, объявляется в новом классе открытым.
Код

class TPublicGrid: public  TStringGrid
{
    public:
        using TStringGrid::DeleteRow;
};


Я бы не назвал, это взломом. Вполне стандартный прием.
Просто разработчики решили, что этот не стоит этот метод делать открытым для данного класса. А Вам он понадобился smile


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Гость_Инна
Дата 17.11.2005, 19:00 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Cпасибо за обяснения.

Кто знает, подскажите где ошибка. Пробую установить ширину двух своих колонок в СтрингГрид:
Код

int with_string1;
int with_string2;
int stolb = 1;
with_string1 = Form1->StringGrid1->Canvas->TextWidth(Form1->StringGrid1->Cells[0][stolb]);
for (int i = Form1->StringGrid1->RowCount; i--;)
{
  if (Form1->StringGrid1->Canvas->TextWidth(Form1->StringGrid1->Cells[0][stolb])<
       Form1->StringGrid1->Canvas->TextWidth(Form1->StringGrid1->Cells[0][stolb+1]))
     {
       with_string1 = Form1->StringGrid1->Canvas->TextWidth(Form1->StringGrid1->Cells[0][stolb+1]);

     }
  stolb++;

}

int stolb2 = 1;
with_string2 = Form1->StringGrid1->Canvas->TextWidth(Form1->StringGrid1->Cells[1][stolb2]);
for (int i = Form1->StringGrid1->RowCount; i--;)
{
  if (Form1->StringGrid1->Canvas->TextWidth(Form1->StringGrid1->Cells[1][stolb2])<
       Form1->StringGrid1->Canvas->TextWidth(Form1->StringGrid1->Cells[1][stolb2+1]))
     {
       with_string2 = Form1->StringGrid1->Canvas->TextWidth(Form1->StringGrid1->Cells[1][stolb2+1]);

     }
  stolb2++;

}

Form1->StringGrid1->ColWidths[0] = with_string1;
Form1->StringGrid1->ColWidths[1] = with_string2;
Form1->StringGrid1->SetFocus();//убрать выделение


Как-то странно работает smile В смысле неправильно smile
  Вверх
_hunter
Дата 17.11.2005, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



странный код...
зачем постоянно вычислять длины ( if (Form1->StringGrid1->Canvas->TextWidth(Form1->StringGrid1->Cells[1][stolb2])<
Form1->StringGrid1->Canvas->TextWidth(Form1->StringGrid1->Cells[1][stolb2+1])) )?
создай перед циклом переменную int maxWidth = 0;
и проверяй больше ли длина столбца этой переменной. если больше -- обновляй значение.
после цикла ставь длину в maxWidth и все...
+ ты, похоже путаеш столбцы и строки ( Cells[int ACol][int ARow] )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
docwar
Дата 27.9.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Здравствуйте!
1) Как в StringGrid удалить выделенную строку? Причем не просто очистить ее ячейки, а удалить полностью.
2) Как сделать выделенную строку доступной для редактирования? Т.е. выбераем строку, жмем на клавишу и можем изменять текст в любой ячейки строки прямо в таблице!
Модератор: зачем подымать старый топик. Я дал ссылку на него, что бы Вы смогли решить проблему с ошибкой. Ответы на это  топик и тот, который Вы  открыли полностью дают ответ на Ваши вопросы http://forum.vingrad.ru/index.php?showtopic=113677
PM MAIL   Вверх
docwar
Дата 29.9.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Извините, но я не могу выделить строку. Это вообще возможно?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.