Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Вниз

"Полосатый" DBGrid и несколько выделенных записей ...   Найти похожие ветки 

 
TUserClass ©   (2008-07-11 11:03) [0]

Доброе утро знатокам! :)

Вот захотелось немного расскрасить строки грида через одну, код следующий (в DrawColumnCell):

 If TDBGrid(Sender).DataSource.DataSet.RecNo mod 2 = 1 then begin
   TDBGrid(Sender).Canvas.Brush.Color := GridODDColor;
 end;

 If gdSelected in State then begin
   TDBGrid(Sender).Canvas.Brush.Color := clHighLight;
   TDBGrid(Sender).Canvas.Font.Color := clHighLightText;
 end else begin
   TDBGrid(Sender).Canvas.Font.Color := clWindowText;
 end;


Но вот если выделено несколько записей, то higlight"ом отрисовываются только те выделенные строки, которые не попадают под это условие TDBGrid(Sender).DataSource.DataSet.RecNo mod 2 = 1 , а те которые попадают, рисуются цветом GridODDColor. И даже If gdSelected in State then begin не помогает (помогает, толькое если выделенна одна запись). Перепробовал весь набор State, все равно не помогает. Есть ли способ исправить это, не перебирая SelectedRows?


 
Ega23 ©   (2008-07-11 11:10) [1]

1. Рекомендую к прочтению статью "Цветной DBGrid" (вроде на Королевстве была, погугли).
2. Не рекомендую активно пользовать свойство TDataSet.RecNo. Опасное свойство. Работает далеко не у всех потомков TDataSet и, зачастую, с разными неожиданными эффектами.


 
TUserClass ©   (2008-07-11 11:14) [2]


> Ega23 ©   (11.07.08 11:10) [1]


1. С королевства я даже скачал исходник - там тоже самое ((.

2. А TDataSet.RecNo приходится использовать ибо я не знаю другого способа получить четность строки :)


 
Anatoly Podgoretsky ©   (2008-07-11 11:24) [3]

> TUserClass  (11.07.2008 11:14:02)  [2]

RecNo не является никаким признаком четности в гриде. Более того оно даже не являтся признаком четности в датасете.


 
Ega23 ©   (2008-07-11 11:25) [4]


> 2. А TDataSet.RecNo приходится использовать ибо я не знаю
> другого способа получить четность строки :)


Я бы в сторону DBGrida копал. В конце-концов он отображает. И Rows у него, вообще-то, тоже есть. Тогда независимо от RecNo грид сам будет красить.

Вобщем, дело такое.


 
TUserClass ©   (2008-07-11 11:26) [5]


> Anatoly Podgoretsky ©   (11.07.08 11:24) [3]


Да я согласен .. но я не нашел другого способа узнать, четная ли строка или нет - просто у кого то увидел это условие и оно работает .. :)


 
Поросенок Винни-Пух ©   (2008-07-11 11:26) [6]

если DataSet.IsSequenced можно юзать recno не опасаясь


 
TUserClass ©   (2008-07-11 11:32) [7]

Ну не в этом суть - как мне некрасить выделенне то ? :)


 
Anatoly Podgoretsky ©   (2008-07-11 11:33) [8]

> TUserClass  (11.07.2008 11:26:05)  [5]

Оно работает в ограниченом количестве случаев, для этого нужна особая среда.


 
TUserClass ©   (2008-07-11 11:34) [9]


> Anatoly Podgoretsky ©   (11.07.08 11:33) [8]


УУУУ....это плохо ... неужели отказываться от чередоания цветов o_O ??? ((((


 
Поросенок Винни-Пух ©   (2008-07-11 11:35) [10]

И даже If gdSelected in State then begin не помогает (помогает, толькое если выделенна одна запись).

TDBGrid.SelectedRows.CurrentRowSelected


 
Ega23 ©   (2008-07-11 11:37) [11]


> УУУУ....это плохо ... неужели отказываться от чередоания
> цветов o_O ??? ((((


Да пойми ты наконец, что чередование цветов и RecNo никак не связаны. Вообще.
У DBGrid есть N записей, которые отображаются в данный момент времени. Вот их и раскрашивай. TDataSet тут вообще ни при чём.


 
TUserClass ©   (2008-07-11 11:38) [12]


> Поросенок Винни-Пух ©   (11.07.08 11:35) [10]


ААААА....Спасибо - помогло...ну теперь осталось решить только вопрос с получением четности :)


 
TUserClass ©   (2008-07-11 11:38) [13]


> Ega23 ©   (11.07.08 11:37) [11]


Ну ты мне придумай другое условие....я пока не нашел...


 
Anatoly Podgoretsky ©   (2008-07-11 11:42) [14]


> Ну не в этом суть - как мне некрасить выделенне то ? :)

Сменить логику if then else а не грубо копировать код.


 
TUserClass ©   (2008-07-11 11:46) [15]


> Anatoly Podgoretsky ©   (11.07.08 11:42) [14]

Я сначала подумывал

If Rect.Top <> PrevRectTop then beign
   ChangeColor := not ChangeColor;
end;
 PrevRectTop := Rect.Top;


Но как то глупо получается ... Да и при прокрутке на одну запись Вверх/Вниз сбивается - для полного удовлетворения мне надо именно получить порядковый номер рисуемой записи...а как - я пока не знаю (((


 
Dennis I. Komarov ©   (2008-07-11 11:46) [16]

> Ну ты мне придумай другое условие

Зачем?

> я пока не нашел...

И кто в этом виноват?


 
Поросенок Винни-Пух ©   (2008-07-11 11:46) [17]

Пляши от протектед номера строки TCustomGrid


 
TUserClass ©   (2008-07-11 11:50) [18]


> Поросенок Винни-Пух ©   (11.07.08 11:46) [17]

УУУ...долго (((


 
Поросенок Винни-Пух ©   (2008-07-11 11:51) [19]

УУУ...долго (((

ага. от трех до пяти  с конфискацией.


 
TUserClass ©   (2008-07-11 11:51) [20]

Щас еще пороюсь в инете - если ничего не найду - пойду плясать от кустома :)


 
Ega23 ©   (2008-07-11 12:03) [21]


> УУУ...долго (((


А ты думал всё киданием компонентов ограничивается?


 
TUserClass ©   (2008-07-11 12:04) [22]


> Ega23 ©   (11.07.08 12:03) [21]


Да их никто не кидает - сами создаюЦа, в зависимости от кол-ва таблиц в базе... :)


 
Dennis I. Komarov ©   (2008-07-11 12:10) [23]

> [22] TUserClass ©   (11.07.08 12:04)

Сильно... В базе 100 таблиц - на форме 100 гридав :)


 
TUserClass ©   (2008-07-11 12:12) [24]


> Dennis I. Komarov ©   (11.07.08 12:10) [23]


100 TabSheet"ов с Гридами на PageControl"е :) - Да и много таблиц не предусмотрено :)


 
Dennis I. Komarov ©   (2008-07-11 12:15) [25]

> [24] TUserClass ©   (11.07.08 12:12)

Ф топку...

Юзеру надо видеть только то что нужно. Мне, почти всегда, хватает одного TDataSet. А про гриды вообще умалчу...


 
TUserClass ©   (2008-07-11 12:17) [26]


> Dennis I. Komarov ©   (11.07.08 12:15) [25]

Ну может быть ... :) - но пока не в этом суть данной темы :)


 
Anatoly Podgoretsky ©   (2008-07-11 12:27) [27]

> TUserClass  (11.07.2008 11:46:15)  [15]

Никто не гарантирует непрерывную последовательность или даже просто последовательность.


 
Dennis I. Komarov ©   (2008-07-11 12:28) [28]

> [26] TUserClass ©   (11.07.08 12:17)

Суть темы: Тебе сказали как надо, но ты не хочешь, потому как лень...


 
TUserClass ©   (2008-07-11 16:23) [29]

Еще вопросик возник.

Если поставить у грида в оптионах dgRowSelect, то при клике по этому злощастному гриду его горизонтальный скролбар уходит в самое влево и ... и ... и некрасиво получается. Кто это вообще придумал? Это как-нибудь лечится? :)


 
Поросенок Винни-Пух ©   (2008-07-11 16:34) [30]

лечится убиранием dgRowSelect


 
TUserClass ©   (2008-07-11 16:40) [31]


> Поросенок Винни-Пух ©   (11.07.08 16:34) [30]

эх....а подругому никак? - очень хотелось бы оставить ровселект ((((


 
Поросенок Винни-Пух ©   (2008-07-11 16:46) [32]

ставя роуселект ты говоришь гриду : мне нафик не надо бегать фокусом по полям текущей записи.
грид тебя понимает и скроллит влево, так как право тебя не интересует.

ась? что? оно тебя на самом деле интересует?
ну так выключи роуселект.

Хочется чтобы вся строка светилась?
качай ехлиб и смотри как там роухайлайт реализовано.


 
TUserClass ©   (2008-07-11 17:21) [33]


> Поросенок Винни-Пух ©   (11.07.08 16:46) [32]


Убрал RowSelect, по твоему совету и спер из какого-то зарубежья вот такой кусок кода.

 TFriendlyGrid = class(TCustomDBGrid);

 ...

 With TFriendlyGrid(Sender) do
 begin
   If TDataLink(DataLink).ActiveRecord = Row - 1 then begin
     With Canvas do begin
       Brush.Color := clHighlight;
       DefaultDrawColumnCell (Rect, DataCol, Column, State);
     end;
   end;
 end;


И все заработало ... Всем спасибо ...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.044 c
4-1194264584
msn777
2007-11-05 15:09
2008.08.17
Cогласовать вызов из разных потоков WriteFile ReadFile FilePointe


2-1215944581
Рома
2008-07-13 14:23
2008.08.17
передача данних


15-1214900278
DevilDevil
2008-07-01 12:17
2008.08.17
Почему в Skype всё такое ОГРОМНОЕ ?


2-1215717991
flaxe
2008-07-10 23:26
2008.08.17
Картинки в DBF


2-1216197740
Костик
2008-07-16 12:42
2008.08.17
Как потушить монитор?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский