Про нестандартное выделение строк много написано, но того что нужно мне не нашел.
Итак.
Дана таблица ( DBF ), связываем ее с DBGrid'ом.
В таблице есть записи для которых существуют логические пары. ( не для всех записей существуют пары )
Необходимо при выборе записи ( DBGrid1CellClick ) для которой существует пара, подсвечивать эту самую пару другим цветом.
Собственно, вся программа состоит из двух функций DBGrid1DrawColumnCell и DBGrid1CellClick. И она работает. Но не совсем так как хотелось бы.
Проблема в том, что при клике левой клавиши на записи ( DBGrid1CellClick ) сначала выполняется DBGrid1DrawColumnCell , а только потом тело DBGrid1CellClick.
Т.е. в теле DBGrid1CellClick осуществляем с помощью Query выбор парной записи ( если она существует ), и при выполнении DBGrid1DrawColumnCell подсвечиваем ее другим цветом.
Т.о. если два раза подряд кликнуть на строку DBGrid то подсвечивается корректная пара, а если только один раз то нет - ведь сперва отрабатывает DBGrid1DrawColumnCell и только потом мы выбираем парную запись в DBGrid1CellClick.
Попытался подробно сформулировать.
Спасибо.
Вот код.
Код:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
holdColor: TColor;
Str_invoice: string;
begin
holdColor := DBGrid1.Canvas.Brush.Color;
if Form1.Query1.Active = true then Str_invoice:=Form1.Query1.FieldByName('Invoice').AsString
else Str_invoice:='';
if Form1.Table1.FieldByName('Invoice').AsString = Str_invoice then
begin
DBGrid1.Canvas.Brush.Color := clSkyBlue;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
DBGrid1.Canvas.Brush.Color := holdColor;
end
else
begin
DBGrid1.Canvas.Brush.Color := holdColor;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end
end;
и
Код:
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
if { проверка индекса записи на предмет существования пары } then begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('{ select отбирающий пару по некоторому условию ');
Query1.Active:=True;
end
else
begin
Query1.Close;
Query1.SQL.Clear;
end;
end;
СПАСИБО.