Riva |
Отправлено: 20.02.2007, 16:06 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
Помогите разобратся с StringGrid, как удалить строку со сдвигом вверх? |
|
Riva |
Отправлено: 21.02.2007, 16:46 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
Частично разобрался.
Вот что получилось. Удаление со сдвигом работает просто супер, а вот запись результата удаления в файл не выходит. Как же всё это сохранить?
void __fastcall TForm5::Button2Click(TObject *Sender)
{
int ind=MessageBox(0,"Удалить раздел?","Вопрос",MB_YESNO);
if(ind==IDYES)
{
StringGrid1->Cells[c][r]="";
int curRec = StringGrid1->Selection.Top;
if (curRec != StringGrid1->RowCount-1)
{
for (int i=curRec; iRowCount-1; i++)
StringGrid1->Rows[i] = StringGrid1->Rows[i+1];
}
StringGrid1->RowCount--;
TIniFile *ini;
ini = new TIniFile(
ChangeFileExt( Application->ExeName, ".ini" ) );
ini->WriteString ( "Topics", r, StringGrid1->Cells[c][r] );
delete ini;
Edit1->Clear();
}
else if(ind==IDNO) return;
} |
|
Termi_uc |
Отправлено: 21.02.2007, 18:14 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 61
|
QUOTE (Riva @ 21.02.2007, 16:46) | Вот что получилось. Удаление со сдвигом работает просто супер, а вот запись результата удаления в файл не выходит. Как же всё это сохранить? |
Что ты имееш введу под запись результата удаления?
Ты хочеш записать строку, которую удалил?
Пиши перед удалением...
|
|
Riva |
Отправлено: 21.02.2007, 18:37 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
Нет я имею ввиду, что в StringGrig удаление происходит а в файле при этом ни чего не изменяется |
|
Grigoriy |
Отправлено: 21.02.2007, 19:11 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Я думаю, что тут какое-то гонево...
Во первых фрагмент текста программы
QUOTE |
for (int i=curRec; iRowCount-1; i++)
|
я понимаю, что переменной iRowCount не существует, а просто это опечатка.
И еще вот
CODE |
ini->WriteString ( "Topics", r, StringGrid1->Cells[c][r] );
|
не пойму, как это могло компилироваться, если r — это должен быть строковый параметр, а не целочисленный.
|
|
Termi_uc |
Отправлено: 21.02.2007, 19:57 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 61
|
Cудя по
CODE | StringGrid1->RowCount--;
TIniFile *ini;
ini = new TIniFile(
ChangeFileExt( Application->ExeName, ".ini" ) );
ini->WriteString ( "Topics", r, StringGrid1->Cells[c][r] );
delete ini; |
ты пытаешся переписать значение StringGrid1->Cells[c][r], в эллемент с номером r.
Хм...
По идеи, у тебя должно быть примерно так:
Перед удалением
[Topics]
0=Line1
1=Line2
2=Line3
3=Line4
И так после удаления строки 2, например:
[Topics]
0=Line1
1=Line3
2=Line3
3=Line4
Вывод: тебе надо сохранять в файл все строки начиная с удалённой.
Вообще, для данного сохранения лучше подойдёт
CODE | StringGrid1->Cols[0]->SaveToFile(ChangeFileExt( Application->ExeName, "._ini" ) ); |
Сохраняет в выбранный файл 0-й столбец.
|
|
Grigoriy |
Отправлено: 21.02.2007, 23:23 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
CODE |
ini->WriteString ( "Topics", r, StringGrid1->Cells[c][r] );
|
Да. Так можно.
|
|
Riva |
Отправлено: 22.02.2007, 14:43 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
CODE |
ini->WriteString ( "Topics", r, StringGrid1->Cells[c][r] );
|
А как написать тоже самое, только на основе ListBox1?
|
|
Termi_uc |
Отправлено: 22.02.2007, 20:09 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 61
|
QUOTE (Riva @ 22.02.2007, 14:43) | CODE |
ini->WriteString ( "Topics", r, StringGrid1->Cells[c][r] );
|
А как написать тоже самое, только на основе ListBox1?
|
ListBox1->Items?
CODE | ini->WriteString ( "Topics", r, ListBox1->Items->operator[](r)); |
|
|
Riva |
Отправлено: 22.02.2007, 22:01 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
Спасибо работает. Тема закрыта. |
|