Форум: "Начинающим";
Текущий архив: 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.52 MB
Время: 0.049 c