-
Уважаемые мастера, представляя информацию из таблицы в TGrid-е , я всегда делаю его полосатым. Однако недавно сталкнулся с тем, что полоски формируются неправильно, если таблица индексирована по некоторому полю. http://yurec66.narod.ru/Hlam/vop1.jpg . В данном случае обрабатываю так:
...
Const
BackColors : array[Boolean] of TColor = (clWhite, clBtnFace);
....
procedure TTiragVLFrm.DBGridEh1GetCellParams(Sender: TObject;
Column: TColumnEh; AFont: TFont; var Background: TColor;
State: TGridDrawState);
begin
Background := BackColors[DM1.SvodTVLTbl.RecNo mod 2 <> 0];
end;
Т.е. в данном случае RecNo не совпадает с номером по ключу. Можно-ли это как побороть, чтобы полоски следовали в четкой последовательности?
-
можно не использовать RecNo, использовать специальное поле в выборке, нумерующее отсортированную выборку
-
if Color = ColorValue1 then Color := ColorValue2 else Color := ColorValue1;
-
*.DrawCell(ACol, ARow: Longint; // if FZebra and Odd(ARow) then begin Brush.Color := FZebraColor; Font.Color := FZebraFontColor; end; //
-
Color - глобальная переменная(или поле), инициализируемая при создании формы любым из цветов: colorValue1/2
-
> не использовать RecNo, использовать специальное поле в выборке, > нумерующее отсортированную выборку
Да действительно, сработало. Но в данном случае так попало, что у меня в ключе цифровое поле.
Background := BackColors[DM1.SvodTVLTblTir.Value mod 2 <> 0];
А если не цифровое? А если цифры не по порядку идут? Еще варианты есть? За первый спасибо.
-
> Виталий Панасенко (19.12.08 15:34) [4] > > Color - глобальная переменная(или поле), инициализируемая > при создании формы любым из цветов: colorValue1/2
Не в курсе, что не стоит использовать имена переменных, совпадающих с именами стандартных свойств ?
-
> А если не цифровое? А если цифры не по порядку идут? Еще > варианты есть? За первый спасибо.
Еще раз внимательно посмотри на [3]
Привязываемся к гриду, а не к датасету.
-
в курсе.. это пример, для наглядности, что где...
-
> Еще раз внимательно посмотри на [3]
На какое событие подвешено?
-
*.DrawCell(ACol, ARow: Longint;...)
-
> *.DrawCell(ACol, ARow: Longint;...)
не нахожу такого события
-
> kyn66 © (19.12.08 15:37) [5]
я говорил о СПЕЦИАЛЬНОМ поле, а не о ключе и не о таблице, а о ВЫБОРКЕ
-
Const
BackColors : array[Boolean] of TColor = (clWhite, clBtnFace);
type
TDLDBGrid = class(TDBGrid);
....
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
begin
with TDLDBGrid(Sender) do begin
Canvas.Brush.Color:= BackColors[Odd(DataLink.ActiveRecord)];
DefaultDrawDataCell(Rect, Field, State);
end;
end;
-
-
>>sniknik А в чем преимущества предложенного метода [13] ? Я использую DBGridEh1. А у него есть свое событие DrawDataCell . Что дает внедрение TDLDBGrid ?
-
> kyn66 © (20.12.08 10:26) [15]
> Что дает внедрение TDLDBGrid ?
Доступ к DataLink.
> А у него есть свое событие DrawDataCell
Пользуй OnDrawColumnCell.
-- Regards, LVT.
-
> Пользуй OnDrawColumnCell.
И что в нем писать для полосатости грида? У меня на этом событии идет отрисовка курсора в таблице.
procedure TTiragVLFrm.DBGridEh1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
begin
With TDBGridEh(Sender) do
begin
DefaultDrawColumnCell(Rect,DataCol,Column,State);
if (Rect.Top = CellRect(Col, Row).Top) then
begin
Columns[1].Alignment := taRightJustify;
Columns[2].Alignment := taRightJustify;
Canvas.Brush.Color := clMoneyGreen;
Canvas.Font.Color := clBlack;
Canvas.Font.Style := [fsBold];
end;
end;
end;
-
> kyn66 © (20.12.08 13:22) [17]
> событии идет отрисовка курсора в таблице.
Какого, на, курсора? У тебя на этом событии бред записан.
-- Regards, LVT.
-
> У тебя на этом событии бред записан.
Для кого бред, а все правильно работает. Курсор.... Хм,. неужели здесь на форуме все такие умные, что про элементарное позабыли ? 8). Когда передвигаешься пл гриду вверх - вниз, курсор(гор-ая полоса цвета clMoneyGreen) передвигается по гриду и текст становится жирным, если в фокусе. Проверь у ся это потом про бред говори!
-
в ехлибе полосатость поддерживается самим гридом. и писать ничего не надо
-
> в ехлибе полосатость поддерживается самим гридом. и писать > ничего не надо
Там есть особенность для полосатости, ща не помню точно, но не всегда подключается, уже проверял.
-
> kyn66 © (20.12.08 13:42) [19]
> Для кого бред, а все правильно работает. Курсор.... Хм,. > неужели здесь на форуме все такие умные, что про элементарное > позабыли ? 8). Когда передвигаешься пл гриду вверх - вниз, > курсор(гор-ая полоса цвета clMoneyGreen)
Я знаю два понятия курсора, которые могут быть связаны с гридом. Но называть курсором выделенную|текущую|активную строку|ряд|запись не собираюсь. Потрудитесь выражать свои мысли точней.
А то, что в обработчике написан бред, станет Очевидно после того, как ты прокомментируешь каждую из написанных там строк.
-- Regards, LVT.
-
> как ты прокомментируешь каждую из написанных там строк.
А не проще прикрутить к своему гриду и посмотреть результат. Хорошо, насчет "курсора" - согласен.
-
> kyn66 © (20.12.08 14:35) [23]
> А не проще прикрутить к своему гриду и посмотреть результат.
Видишь ли, Юра..
Во-первых, мне жалко мой грид. Во-вторых, мне это и так очевидно. В-третьих, разобраться-то нужно именно тебе.
-- Regards, LVT.
-
> В-третьих, разобраться-то нужно именно тебе.
Нет, ну зачем плодить ненужные посты. Этот кусок я взял из рабочего кода, для чтобы показать, что у меня на этом событии работает. Неужто нельзя просто сказать, что не так, при том что все работает, что требовалось от этого кода.
-
> kyn66 © (20.12.08 14:46) [25]
> при том что все работает, что требовалось от этого кода.
Бред бывает и правдоподобным. Так, например, излагаются сверхценные идеи. Что требовалось от каждой строки кода:
if (Rect.Top = CellRect(Col, Row).Top) then
begin
Columns[1].Alignment := taRightJustify;
Columns[2].Alignment := taRightJustify;
? И почему закомментирован DefaultDrawColumnCell? И где там "из рабочего кода"? > Неужто нельзя просто сказать
А что тебе непонятного сказали? -- Regards, LVT.
-
> sniknik © (19.12.08 21:24) [13] > type > TDLDBGrid = class(TDBGrid);
Пожалуй, что без полноценного потомка здесь не обойтись.
type
TTDLDBGrid= class(TDBGrid)
protected
procedure Scroll(Distance: Longint); override;
end;
procedure TDLDBGrid.Scroll;
begin
inherited;
Invalidate;
end;
-- Regards, LVT.
-
> Leonid Troyanovsky © (20.12.08 16:18) [27]
Ну, и, конечно, public property DataLink, sorry.
-- Regards, LVT.
-
> Германн © (20.12.08 01:14) [14]
> Ааа. Так вот что имелось в виду в том вопросе о номере строки > в DBGrid
Нет, там имелся ввиду номер строки.
-- Regards, LVT.
-
> И почему закомментирован DefaultDrawColumnCell?
Он закомментирован в одном месте, и работает в другом. Т.е. как я понимаю, сперва отрабатывают дефолтовые настройки, а уж потом свои. Он сразу стоял там где сейчас закоментирован. Хотя и так и так - одинаково работало ...
> TTDLDBGrid= class(TDBGrid)
А ничего, что у меня используется DBGridEh ?
-
> kyn66 © (23.12.08 11:36) [30]
> А ничего, что у меня используется DBGridEh ?
TTDLDBGrid = class (TDBGridEh)
-- Regards, LVT.
-
> Leonid Troyanovsky © (20.12.08 16:44) [29]
там нужно было передвигать курсор(БД-шный) за курсором мышки:)
-
> dbgrid (23.12.08 18:18) [32]
> там нужно было передвигать курсор(БД-шный) за курсором мышки:
Моя твоя не понимать. См [22]. А во-ще http://www.rsdn.ru/Forum/?mid=907742-- Regards, LVT.
-
-
> dbgrid (23.12.08 18:46) [34]
> а еще твоя хобби буквоедством заниматься - не раскроешь > секрет "ну пачиму"?
Плохо ты, брат, мадьяр знаешь!
Никакой я не буквоед, я Начинающим - как родная мама, просто-таки сопли утираю :)
-- Regards, LVT.
-
> Leonid Troyanovsky © (23.12.08 19:05) [35]
> Плохо ты, брат, мадьяр знаешь!
эээ... что есть "мадьяр"?
> Никакой я не буквоед, я Начинающим - как родная мама, > просто-таки сопли утираю :)
оплеухами?
-
> dbgrid (23.12.08 19:20) [36]
> эээ... что есть "мадьяр"?
Мадьяр = венгр. Гашека не читаем? Но, а в Пилзнер ходим. Плохо-плохо.
|