Poszukuje bardzo szybkiego odmalowania jednej komórki stringgrida. W timerze co jakiś czas zaznaczam jedną cele w gridzie i jeżeli koleja cela jest różna od zaznaczonej to musze zamalować starą i namalować nową.
Kod jaki napisałem:
v1. ( nie optymalna - bo wywołuje przemalowanie całego grida ) - działa ale za wolno :
- Kod: Zaznacz cały
asgridMnoznik->Repaint();
asgridMnoznik->Canvas->Brush->Style = bsClear;
asgridMnoznik->Canvas->Pen->Color = clRed;
asgridMnoznik->Canvas->Pen->Width = 1;
asgridMnoznik->Canvas->Rectangle(
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Left,
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Top,
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Right,
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Bottom
);
v2. ( Zapamiętanie poprzedniej celi i odmalowanie jej po namalowaniu nowej ) - efekt w załączniku screen v2:
- Kod: Zaznacz cały
if(CelaMapyObciazenie != CelaPoprzedniaObciazenie || CelaMapyObroty != CelaPoprzedniaObroty) {
asgridMnoznik->Canvas->Brush->Style = bsClear;
asgridMnoznik->Canvas->Pen->Color = clRed;
asgridMnoznik->Canvas->Pen->Width = 2;
asgridMnoznik->Canvas->Rectangle(
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Left,
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Top,
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Right,
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Bottom
);
asgridMnoznik->Canvas->Pen->Color = clWhite;
asgridMnoznik->Canvas->Rectangle(
asgridMnoznik->CellRect(CelaPoprzedniaObciazenie,CelaPoprzedniaObroty).Left,
asgridMnoznik->CellRect(CelaPoprzedniaObciazenie,CelaPoprzedniaObroty).Top,
asgridMnoznik->CellRect(CelaPoprzedniaObciazenie,CelaPoprzedniaObroty).Right,
asgridMnoznik->CellRect(CelaPoprzedniaObciazenie,CelaPoprzedniaObroty).Bottom
);
}
CelaPoprzedniaObroty = CelaMapyObroty;
CelaPoprzedniaObciazenie = CelaMapyObciazenie;
v3. ( Zapamiętanie poprzedniej celi i wpisanie do niej wartości ) - działa ale nie dokońca dobrze - efekt jest taki że widać przemalowanie starej komórki i wygląda tak jak by się jedna za 2 ciągneła :
- Kod: Zaznacz cały
if(CelaMapyObciazenie != CelaPoprzedniaObciazenie || CelaMapyObroty != CelaPoprzedniaObroty) {
String val = asgridMnoznik->Cells[CelaPoprzedniaObciazenie][CelaPoprzedniaObroty];
asgridMnoznik->Canvas->Brush->Style = bsClear;
asgridMnoznik->Canvas->Pen->Color = clRed;
asgridMnoznik->Canvas->Pen->Width = 2;
asgridMnoznik->Canvas->Rectangle(
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Left+1,
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Top+1,
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Right,
asgridMnoznik->CellRect(CelaMapyObciazenie,CelaMapyObroty).Bottom
);
asgridMnoznik->Cells[CelaPoprzedniaObciazenie][CelaPoprzedniaObroty] = val;
}
CelaPoprzedniaObroty = CelaMapyObroty;
CelaPoprzedniaObciazenie = CelaMapyObciazenie;
Ma ktoś może jakiś pomysł na to ?
Pozdrawiam