![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Про нестандартное выделение строк много написано, но того что нужно мне не нашел.
Итак. Дана таблица ( 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; СПАСИБО. |
#2
|
||||
|
||||
![]() в конце DBGrid1DrawColumnCell DBGrid1.Repaint;
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
![]() Цитата:
Только поставил Repaint в конце OnCellClick ( после отработки Query ). А так - все работает. Спасибо. |