Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StringGrid, удаление строки 
:(
    Опции темы
Romikgy
Дата 29.9.2006, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

    TGridRect myRect;
  myRect.Left = 0;
  myRect.Top = 1;
  myRect.Right = StringGrid1->ColCount-1;
  myRect.Bottom = 1;

StringGrid1->Selection=myRect;



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
docwar
Дата 30.9.2006, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо большое, но я не пойму... куда вставить этот код, а то куда бы не вставлял - эффекта нет...
PM MAIL   Вверх
Romikgy
Дата 30.9.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



туда где выделяешь строку


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
docwar
Дата 30.9.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



В обрабочик кнопки? Не выделяет он строки...  smile 
PM MAIL   Вверх
Romikgy
Дата 30.9.2006, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



в конце обработчика передай фокус стринггриду!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
docwar
Дата 30.9.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



В конец кнопки удалить уже пробовал добавлять.... результатов ноль...

Добавлено @ 21:44 
Мне кажется, что всему виной центрирование хидеров и проблемы с прорисовкой....
Посмотри, пожалуйста, код формы с первой страницы.  smile 
PM MAIL   Вверх
Romikgy
Дата 30.9.2006, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Цитата(docwar @  30.9.2006,  20:36 Найти цитируемый пост)
В конец кнопки удалить уже пробовал добавлять.... результатов ноль...

Добавлено @ 20:44 
Мне кажется, что всему виной центрирование хидеров и проблемы с прорисовкой....
Посмотри, пожалуйста, код формы с первой страницы.  

К чему это все?
Цитата(Romikgy @  29.9.2006,  21:46 Найти цитируемый пост)
StringGrid1->Selection=myRect;

после этого добавь StringGrid1->SetFocus();



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Бывалый
*


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

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



Очищаются все строки + хидеры.... smile
PM MAIL   Вверх
docwar
Дата 8.10.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Пересобрал весь проект. Помогите, пожалуйста, разобраться в удалением и редактированием выделенной строки!
Предложенные варианты удаления строки либо удаляют все строки, либо ничего вообще не делают! smile
PM MAIL   Вверх
Romikgy
Дата 8.10.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



У тя билдер какой?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
docwar
Дата 9.10.2006, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Шестой.
PM MAIL   Вверх
Aline
Дата 9.10.2006, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



docwar, 

Посмотри свойство Options, там есть goRowSelect, поставь в true, чтобы выделить целую строку.

Объявляешь класс как советовал Vyacheslav :

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



а потом в обработчик кнопки, например, ставишь:

  ((TPublicGrid*)StringGrid1)->DeleteRow(sRow);


Значение sRow - индекс выбранной строки, можно получить в событии OnSelectCell. Кстати, совсем необязательно выделять целую строку, дастаточно встать в одну из ячеек этой строки.

Для редактирования, опять же используй Options, goEditing

void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
      int ARow, bool &CanSelect)
{
  sCol = ACol;
  sRow = ARow;
}

Добавлено @ 15:41 
docwar, 
Да, ещё, можно программно выделить строку.

Для этого устанавливаешь StringGrid->Row номер строки, которую нужно выделить и в Options должно быть установлено goRowSelect и goDrawFocusSelected

У меня по крайней мере выделяет нужную строку...
PM MAIL   Вверх
Romikgy
Дата 9.10.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  StringGrid1->Options<<goRowSelect;
}

void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
//delete row
int rrow,i;
if (StringGrid1->RowCount==1) return;
TStringList * sl=new TStringList();

rrow=StringGrid1->Row;
for (i=0;i< StringGrid1->ColCount;i++)
{
 sl->Assign(StringGrid1->Cols[i]);
 sl->Delete(rrow);
 StringGrid1->Cols[i]->Assign(sl);
}
sl->Free();
StringGrid1->RowCount--;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
 //add row
 int rrow,i;
 StringGrid1->RowCount++;
if (StringGrid1->RowCount==1) return;
TStringList * sl=new TStringList();

rrow=StringGrid1->Row;
for (i=0;i< StringGrid1->ColCount;i++)
{
 sl->Assign(StringGrid1->Cols[i]);
 sl->Insert(rrow,"Add");
 StringGrid1->Cols[i]->Assign(sl);
}
sl->Free();

}



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

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


Эксперт
****


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

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



Romikgy, 
Ну зачем выдавать такой навороченный код 
Давали же уже.

Код

//удаление выделенной строки
void __fastcall TForm1::Button2Click(TObject *Sender)
{

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


}



Что тут непонятного ?

Вот этот код работать не будет 
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  StringGrid1->Options<<goRowSelect;
}



Надо делать вот так 

Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  StringGrid1->Options = StringGrid1->Options << goRowSelect;

И зачем использовать FormCreatе? Вместо него  используем конструктор.
Цитата

Note:    Use of the OnCreate event is discouraged in C++Builder because it can interact badly with the form’s constructor (see OldCreateOrder). It is recommended that you override the form constructor instead.


Цитата

Note:    Use of the OnCreate event is discouraged in C++Builder because it can interact badly with the form’s constructor (see OldCreateOrder). It is recommended that you override the form constructor instead.


И еще.
Вот это выглядит довольно забавно 
Код

sl->Free();

Может все таки стоит хоть немного внимать рекомендациям Borland
Цитата

Do not call the Free method of an object. Instead, use the delete keyword, which invokes Free to destroy an object. Free automatically calls the destructor if the object reference is not NULL.

"Не вызывайте метод Free. Вместо него используйте delete



  






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


Бывалый
*


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

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



Спасибо Вам огромное за ответы!!!

Только у меня опять вопросы! smile
Удаляю как советует Vyacheslav, добавление данных у меня оформлено так:
Код
if(!Edit1->Text.IsEmpty() && !Edit2->Text.IsEmpty()){
Form1->StringGrid1->Cells[0][Form1->StringGrid1->RowCount-1] = Edit1->Text;
Form1->StringGrid1->Cells[1][Form1->StringGrid1->RowCount-1] = Edit2->Text;
...
Form1->StringGrid1->Cells[1][Form1->StringGrid1->RowCount-1] = Edit6->Text;
Edit1->Clear();
Edit2->Clear();
...
Edit6->Clear();
Form1->StringGrid1->RowCount++;
}

Потом делаю следующее:
1) Добавляю данные
2) Удаляю эту строку
3) Добавляю новую
и в результате в таблицу выводится вторая строка, потом первая...  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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