Ta informacja nie powinna ginąć pomimo sortowania czy jakiegoś przemieszczania wierszy czy kolumn.
Pytałem o to na czacie. Wreszcie polymorphism podsunął mi, myślę, właściwe rozwiązanie.
Sprawdziłem. To działa samo, nie muszę pilnować, żeby ta informacja wędrowała z wybraną komórka, która zmienia przecież indeksy.
Informacja sama wędruje za przemieszczającą się komórką.
Oto mój próbny, testowy kod, może niezręczny ale działa:
#include <vcl.h>
#pragma hdrstop
#include "AddObject2.h" // TStringGrid *StringGrid1; // w naglowku
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm9 *Form9;
// ---------------------------------------------------------------------------
__fastcall TForm9::TForm9(TComponent* Owner)
: TForm(Owner)
{
// Czyms wypelniam komorki:
for (int i= StringGrid1->FixedRows; i < StringGrid1->RowCount; i++)
for (int j= StringGrid1->FixedCols; j < StringGrid1->ColCount; j++)
{
StringGrid1->Cells[j][i]= IntToStr(i) + IntToStr(j);
}
for (int i= StringGrid1->FixedRows; i < StringGrid1->RowCount; i++)
StringGrid1->Cells[0][i]= IntToStr(i);
StringGrid1->Cells[1][0]= "A"; StringGrid1->Cells[2][0]= "B"; StringGrid1->Cells[3][0]= "C";
String *Info; // tutaj dodatkowa informacja.
Info= new String;
*Info= "dodatkowa ukryta informacja";
StringGrid1->Objects[2][2]= (TObject*)Info; // przypisuję do takiej komorki - (2,B).
}
// ---------------------------------------------------------------------------
void __fastcall TForm9::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow,
bool &CanSelect)
{
// A tu sprawdzam kliknięciem w komorki czy ta informacja istnieje,
// gdy jakoś przesuwam wiersze i kolumny (informacja wędruje za komorka,
// mimo, że ona zmienia swoje polożenie, czyli indeksy.
try
{
Edit1->Text= *((String*)(StringGrid1->Objects[ACol][ARow])); // = *((String*)Object1);
}
catch (...)
{
Edit1->Text= StringGrid1->Cells[ACol][ARow];
}
}
//---------------------------------------------------------------------------