Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.02.2012, 14:59
Ashkana Ashkana вне форума
Прохожий
 
Регистрация: 07.02.2012
Сообщения: 4
Репутация: 10
По умолчанию Нестандартное выделение строк в DBGrid'е

Про нестандартное выделение строк много написано, но того что нужно мне не нашел.
Итак.
Дана таблица ( 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  
Старый 07.02.2012, 15:11
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

в конце DBGrid1DrawColumnCell DBGrid1.Repaint;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 07.02.2012, 15:17
Ashkana Ashkana вне форума
Прохожий
 
Регистрация: 07.02.2012
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
в конце DBGrid1DrawColumnCell DBGrid1.Repaint;
Я даже не знаю как благодарить.
Только поставил Repaint в конце OnCellClick ( после отработки Query ).
А так - все работает.
Спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:22.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025