Mam potrzebę aby DBGrid wyświetlał mi "nie przeczytane" wiersze literami fsBold a oprócz tego wybrane komórki w kolorach. "Nie przeczytane" oznacza że użytkownik nie edytował jeszcze tego rekordu, inna procedura. Fakt przeczytania (edycji rekordu) zapisuję lokalnie w pliku *.ini.
Napisałem taki kod:
procedure TForm19.dbgZleceniaDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
......
if ((ibqZlecenia.FieldByName('termin_potw').AsDateTime < Date()) and (Column.FieldName = 'TERMIN_POTW') and (ibqZlecenia.FieldByName('status').AsInteger = 1)) then
begin
dbgZlecenia.Canvas.Font.Color := clWebTomato;
dbgZlecenia.Canvas.Font.Style := [fsBold];
end;
if {(Column.Field.FieldName = 'ID')} (ibqZlecenia.FieldByName('id').AsInteger>0) then
begin
IDb:=ibqZlecenia.FieldByName('id').AsString); //odczatane ID z bazy
R1b:=ibqZlecenia.FieldByName('read_1').AsString; //odczatane Read_1 z bazy
T3I:= OdczytINIString('tech3_zlec.ini','Zlecenia',IDb); // odczytuję z pliku *.ini czy rekord był już czytany czy nie ( jeśli tak to wartość IDb>1, jeśli nie to IDb=0). Uprzednio odczytuję z bazy pole 'Read_1', a poniżej go porównuję aby ustawić fsBold
end;
if (R1b<>T3I) then dbgZlecenia.Canvas.Font.Style:= [fsBold];
dbgZlecenia.DefaultDrawColumnCell(Rect, DataCol, Column, State);
Kod oznaczony { } to jest moje drugie podejście do tego zagadnienia (wtedy go odznaczam, a wyłączam warunek następujący zaraz po nim). Różnica polega na tym, że pierwszy kod działa, lecz klikanie myszą na komórki kolumny ID powoduje dziwne zachowanie DBGrida, tzn. cały wiersz nie zawsze wyświetla się jako fsBold lecz jakoś dziwnie jakby z opóźnieniem, tzn. ustawia Bold dla następnym klikniętym wierszu zamiast na wierszu właśnie kliknietej komórki. Natomiast klikanie po wszystkich pozostałych kolumnach (oprócz ID) działa prawidłowo tak jak chcę.
Jeśli natomiast odblokuję kod zaznaczony { } to mam wszystko dokładnie tak jak chcę, ale DBGrid działa wyraźnie wolniej, widać, że komputer ma dużo więcej do liczenia niż w pierwszym przypadku. Można powiedzieć, że go nieźle "przymula".
Nie mam pomysłu jak to poprawić. Czy ktoś pomoże?
Jarek