Конференция "Начинающим" » Неправильно-полосатый Grid [D7, ADS]
 
  • kyn66 © (19.12.08 15:25) [0]
    Уважаемые мастера, представляя информацию из таблицы в 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 не совпадает с номером по ключу. Можно-ли это как побороть, чтобы полоски следовали в четкой последовательности?
  • Правильный$Вася (19.12.08 15:29) [1]
    можно
    не использовать RecNo, использовать специальное поле в выборке, нумерующее отсортированную выборку
  • Виталий Панасенко (19.12.08 15:30) [2]
    if Color = ColorValue1 then
     Color := ColorValue2
    else
     Color := ColorValue1;
  • Jeer © (19.12.08 15:33) [3]
    *.DrawCell(ACol, ARow: Longint;
    //
      if FZebra and Odd(ARow) then  begin
          Brush.Color := FZebraColor;
          Font.Color  := FZebraFontColor;
      end;
    //
  • Виталий Панасенко (19.12.08 15:34) [4]
    Color - глобальная переменная(или поле), инициализируемая при создании формы любым из цветов: colorValue1/2
  • kyn66 © (19.12.08 15:37) [5]

    > не использовать RecNo, использовать специальное поле в выборке,
    >  нумерующее отсортированную выборку

    Да действительно, сработало. Но в данном случае так попало, что у меня в ключе цифровое поле.

     Background := BackColors[DM1.SvodTVLTblTir.Value mod 2 <> 0];


    А если не цифровое? А если цифры не по порядку идут? Еще варианты есть? За первый спасибо.
  • Jeer © (19.12.08 15:39) [6]

    > Виталий Панасенко   (19.12.08 15:34) [4]
    >
    > Color - глобальная переменная(или поле), инициализируемая
    > при создании формы любым из цветов: colorValue1/2


    Не в курсе, что не стоит использовать имена переменных, совпадающих с именами стандартных свойств ?
  • Jeer © (19.12.08 15:40) [7]

    > А если не цифровое? А если цифры не по порядку идут? Еще
    > варианты есть? За первый спасибо.


    Еще раз внимательно посмотри на [3]

    Привязываемся к гриду, а не к датасету.
  • Виталий Панасенко (19.12.08 15:41) [8]
    в курсе.. это пример, для наглядности, что где...
  • kyn66 © (19.12.08 15:44) [9]

    > Еще раз внимательно посмотри на [3]

    На какое событие подвешено?
  • Jeer © (19.12.08 15:51) [10]
    *.DrawCell(ACol, ARow: Longint;...)
  • kyn66 © (19.12.08 16:04) [11]

    > *.DrawCell(ACol, ARow: Longint;...)


    не нахожу такого события
  • Правильный$Вася (19.12.08 16:20) [12]

    > kyn66 ©   (19.12.08 15:37) [5]

    я говорил о СПЕЦИАЛЬНОМ поле, а не о ключе
    и не о таблице, а о ВЫБОРКЕ
  • sniknik © (19.12.08 21:24) [13]
    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;

  • Германн © (20.12.08 01:14) [14]

    > sniknik ©   (19.12.08 21:24) [13]

    Ааа. Так вот что имелось в виду в том вопросе о номере строки в DBGrid http://pda.delphimaster.net/?id=1228492011&n=18
  • kyn66 © (20.12.08 10:26) [15]
    >>sniknik
    А в чем преимущества предложенного метода [13] ? Я использую DBGridEh1. А у него есть свое событие DrawDataCell . Что дает внедрение TDLDBGrid ?
  • Leonid Troyanovsky © (20.12.08 12:09) [16]

    > kyn66 ©   (20.12.08 10:26) [15]

    > Что  дает внедрение TDLDBGrid ?

    Доступ к DataLink.

    > А у него есть свое событие DrawDataCell

    Пользуй OnDrawColumnCell.

    --
    Regards, LVT.
  • kyn66 © (20.12.08 13:22) [17]

    > Пользуй 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];
    //        DefaultDrawColumnCell(Rect,DataCol,Column,State);
         end;
      end;
    end;

  • Leonid Troyanovsky © (20.12.08 13:36) [18]

    > kyn66 ©   (20.12.08 13:22) [17]

    > событии идет отрисовка курсора в таблице.

    Какого, на, курсора?
    У тебя на этом событии бред записан.

    --
    Regards, LVT.
  • kyn66 © (20.12.08 13:42) [19]

    > У тебя на этом событии бред записан.

    Для кого бред, а все правильно работает. Курсор.... Хм,. неужели здесь на форуме все такие умные, что про элементарное позабыли ? 8). Когда передвигаешься пл гриду вверх - вниз, курсор(гор-ая полоса цвета  clMoneyGreen) передвигается по гриду и текст становится жирным, если в фокусе. Проверь у ся это потом про бред говори!
  • Поросенок Винни-Пух © (20.12.08 13:44) [20]
    в ехлибе полосатость поддерживается самим гридом. и писать ничего не надо
  • kyn66 © (20.12.08 13:56) [21]

    > в ехлибе полосатость поддерживается самим гридом. и писать
    > ничего не надо


    Там есть особенность для полосатости, ща не помню точно, но не всегда подключается, уже проверял.
  • Leonid Troyanovsky © (20.12.08 14:19) [22]

    > kyn66 ©   (20.12.08 13:42) [19]

    > Для кого бред, а все правильно работает. Курсор.... Хм,.
    >  неужели здесь на форуме все такие умные, что про элементарное
    > позабыли ? 8). Когда передвигаешься пл гриду вверх - вниз,
    >  курсор(гор-ая полоса цвета  clMoneyGreen)

    Я знаю два понятия курсора, которые могут быть связаны с гридом.
    Но называть курсором  выделенную|текущую|активную строку|ряд|запись
    не собираюсь. Потрудитесь выражать свои мысли точней.

    А то, что в обработчике написан бред, станет Очевидно после того,
    как ты прокомментируешь каждую из написанных там строк.

    --
    Regards, LVT.
  • kyn66 © (20.12.08 14:35) [23]

    > как ты прокомментируешь каждую из написанных там строк.

    А не проще прикрутить к своему гриду и посмотреть результат. Хорошо, насчет "курсора" - согласен.
  • Leonid Troyanovsky © (20.12.08 14:38) [24]

    > kyn66 ©   (20.12.08 14:35) [23]

    > А не проще прикрутить к своему гриду и посмотреть результат.

    Видишь ли, Юра..

    Во-первых, мне жалко мой грид.
    Во-вторых, мне это и так очевидно.
    В-третьих, разобраться-то нужно именно тебе.

    --
    Regards, LVT.
  • kyn66 © (20.12.08 14:46) [25]

    > В-третьих, разобраться-то нужно именно тебе.


    Нет, ну зачем плодить ненужные посты. Этот кусок я взял из рабочего кода, для чтобы показать, что у меня на этом событии работает. Неужто нельзя просто сказать, что не так, при том что все работает, что требовалось от этого кода.
  • Leonid Troyanovsky © (20.12.08 15:52) [26]

    > 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.
  • Leonid Troyanovsky © (20.12.08 16:18) [27]

    > 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:21) [28]

    > Leonid Troyanovsky ©   (20.12.08 16:18) [27]

    Ну, и, конечно, public property DataLink, sorry.

    --
    Regards, LVT.
  • Leonid Troyanovsky © (20.12.08 16:44) [29]

    > Германн ©   (20.12.08 01:14) [14]

    > Ааа. Так вот что имелось в виду в том вопросе о номере строки
    > в DBGrid

    Нет, там имелся ввиду номер строки.

    --
    Regards, LVT.
  • kyn66 © (23.12.08 11:36) [30]

    > И почему закомментирован DefaultDrawColumnCell?


    Он закомментирован в одном месте, и работает в другом. Т.е. как я понимаю, сперва отрабатывают дефолтовые настройки, а уж потом свои. Он сразу стоял там  где сейчас закоментирован. Хотя и так и так - одинаково работало ...

    > TTDLDBGrid= class(TDBGrid)


    А ничего, что у меня используется DBGridEh ?
  • Leonid Troyanovsky © (23.12.08 16:19) [31]

    > kyn66 ©   (23.12.08 11:36) [30]

    > А ничего, что у меня используется DBGridEh ?

    TTDLDBGrid = class (TDBGridEh)

    --
    Regards, LVT.
  • dbgrid (23.12.08 18:18) [32]

    > Leonid Troyanovsky ©   (20.12.08 16:44) [29]

    там нужно было передвигать курсор(БД-шный) за курсором мышки:)
  • Leonid Troyanovsky © (23.12.08 18:31) [33]

    > dbgrid   (23.12.08 18:18) [32]

    > там нужно было передвигать курсор(БД-шный) за курсором мышки:

    Моя твоя не понимать. См [22].

    А во-ще
    http://www.rsdn.ru/Forum/?mid=907742

    --
    Regards, LVT.
  • dbgrid (23.12.08 18:46) [34]

    > Leonid Troyanovsky ©   (23.12.08 18:31) [33]


    > http://www.rsdn.ru/Forum/?mid=907742

    понимать-понимать...
    а еще твоя хобби буквоедством заниматься - не раскроешь секрет "ну пачиму"?
  • Leonid Troyanovsky © (23.12.08 19:05) [35]

    > dbgrid   (23.12.08 18:46) [34]

    > а еще твоя хобби буквоедством заниматься - не раскроешь
    > секрет "ну пачиму"?

    Плохо ты, брат, мадьяр знаешь!

    Никакой я не буквоед, я Начинающим - как родная мама,
    просто-таки сопли утираю :)

    --
    Regards, LVT.
  • dbgrid (23.12.08 19:20) [36]

    > Leonid Troyanovsky ©   (23.12.08 19:05) [35]


    > Плохо ты, брат, мадьяр знаешь!

    эээ... что есть "мадьяр"?


    > Никакой я не буквоед, я Начинающим - как родная мама,
    > просто-таки сопли утираю :)

    оплеухами?
  • Leonid Troyanovsky © (23.12.08 19:44) [37]

    > dbgrid   (23.12.08 19:20) [36]

    > эээ... что есть "мадьяр"?

    Мадьяр = венгр.
    Гашека не читаем? Но, а в Пилзнер ходим.
    Плохо-плохо.
 
Конференция "Начинающим" » Неправильно-полосатый Grid [D7, ADS]
Есть новые Нет новых   [134477   +40][b:0][p:0.004]