Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Кратк. - сест. тал.
 Аватар для Vit@L
87 / 51 / 4
Регистрация: 13.03.2008
Сообщений: 543

Как зачеркнуть всю строку в DBGridEh?

28.06.2019, 23:38. Показов 3020. Ответов 17

Студворк — интернет-сервис помощи студентам
Всем привет!
Подскажите пожалуйста. Как можно зачеркнуть всю строку в DBGridEh в зависимости от значения определенного поля в записи? Такой код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TfrmTasks.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
   if QueryTasks['ST']=0 then
      begin
         dbgrideh1.Canvas.Font.Color := clred;
         dbgrideh1.Canvas.Font.Style:=[fsStrikeOut];
          if gdSelected in state then
                  begin
                     dbgrideh1.Canvas.Brush.Color:= clHighLight;
                     dbgrideh1.Canvas.Font.Color := clHighLightText;
                 end;
         dbgrideh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
end;
зачеркивает только сам текст, но не целиком всю строку.
подскажите как зачеркнуть всю строку?
Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.06.2019, 23:38
Ответы с готовыми решениями:

Указатель на строку: как выводить не всю строку целиком, а конкретную букву
Есть программка: #include<iostream> using namespace std; void fn_str1(int i,string str1,char *p) { p=&str1; ...

Как после листинга в ListBox'se, не выделять строку, а только навести мышку и увидеть всю строку
Как показать весь текст в ListBox'se при scroll и наведя мышку? Такая ситуация, я листаю ползунком строки и, попадаются длинные, в окошке...

Как очистить всю строку?
У меня есть строка, в этой строке я храню информацию, потом ее вывожу на экран. Как сделать так, чтобы эта строка стала пустой и можно было...

17
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,671
Записей в блоге: 21
29.06.2019, 10:55
Цитата Сообщение от Vit@L Посмотреть сообщение
Font.Style:=[fsStrikeOut]
вы же сами пишете Font -т.е. будет зачеркнутый текст
если хотите нарисовать линию вдоль каждой ячейки, используйте MoveTo - LineTo
0
Кратк. - сест. тал.
 Аватар для Vit@L
87 / 51 / 4
Регистрация: 13.03.2008
Сообщений: 543
29.06.2019, 11:50  [ТС]
krapotkin, а можно примерчик, пожалуйста?
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
29.06.2019, 18:56
Лучший ответ Сообщение было отмечено Vit@L как решение

Решение

Так устроит?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
 
procedure TfrmTasks.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
   if QueryTasks['ST']=0 then
   with DBGridEh1.Canvas
   do begin
       Pen.Width := 2;
       Pen.Color := clRed;
       MoveTo(Rect.Left, Rect.Top+Rect.Height shr 1);
       LineTo(Rect.Right, Rect.Top+Rect.Height shr 1);
       end;
end;
Добавлено через 3 минуты
А если версия Дельфи поддерживает, то можно без вычислений:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TfrmTasks.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
   if QueryTasks['ST']=0 then
   with DBGridEh1.Canvas
   do begin
       Pen.Width := 2;
       Pen.Color := clRed;
       MoveTo(Rect.Left, Rect.CenterPoint.Y);
       LineTo(Rect.Right, Rect.CenterPoint.Y);
       end;
end;
1
Кратк. - сест. тал.
 Аватар для Vit@L
87 / 51 / 4
Регистрация: 13.03.2008
Сообщений: 543
29.06.2019, 19:30  [ТС]
Пытливый, Спасибо большое. Попробую уже завтра. Обязательно отпишусь. Версия Delphi XE6
0
Кратк. - сест. тал.
 Аватар для Vit@L
87 / 51 / 4
Регистрация: 13.03.2008
Сообщений: 543
30.06.2019, 16:31  [ТС]
Пытливый, что-то совсем не то что нужно получается.
1. горизонтальная линия на всю строку не рисуется.
2. Исчезает верхняя линия выделенной строки.
3. Исчезают вертикальные линии заголовков полей.
4. вертикальные линии выделенной строки становятся толще.

Пробовал и первый код и второй, результат один и тот же.
Миниатюры
Как зачеркнуть всю строку в DBGridEh?  
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
30.06.2019, 16:48
Оба кода работают одинаково для DBGrid. Видимо DBGridEh иначе обрабатывает отрисовку ячейки.
Попробуйте добавить после или до моего кода
Delphi
1
 dbgrideh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
1
Кратк. - сест. тал.
 Аватар для Vit@L
87 / 51 / 4
Регистрация: 13.03.2008
Сообщений: 543
30.06.2019, 17:17  [ТС]
Пытливый, большое спасибо! Все заработало. Только наоборот, когда я убрал строку dbgrideh1.DefaultDrawColumnCell(Rect, DataCol, Column, State); все стало корректно отображаться именно так как мне надо.


Добавлено через 7 минут
только почему-то цвет текста остается неизменным.
Delphi
1
dbgrideh1.Canvas.Font.Color := clred;
все равно цвет черный.
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
01.07.2019, 00:14
Потому и остается, что убрали отрисовку по умолчанию. Так должно работать:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TfrmTasks.DBGridEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
   if QueryTasks['ST']=0 then
   with DBGridEh1.Canvas
   do begin
       Font.Color := clRed;
       Pen.Width := 2;
       Pen.Color := clRed;
       MoveTo(Rect.Left, Rect.CenterPoint.Y);
       LineTo(Rect.Right, Rect.CenterPoint.Y);
       end;
   DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State)
end;
0
Кратк. - сест. тал.
 Аватар для Vit@L
87 / 51 / 4
Регистрация: 13.03.2008
Сообщений: 543
01.07.2019, 09:43  [ТС]
Пытливый, интересная штука получается.
Если я ставлю отрисовку:
Delphi
1
DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State)
то зачеркивание строки в гриде не происходит, зато цвет шрифта меняется на красный. Если я убираю эту отрисовку,то строка в гриде зачеркивается, но цвет шрифта не меняется, остается черным. А линия красная.
Неужели DBGridEh может делать только что-то одно?
0
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
01.07.2019, 09:46
нет у меня TDBGridEh потому проверяю на TDBGrid, а там все работает как надо.
0
Кратк. - сест. тал.
 Аватар для Vit@L
87 / 51 / 4
Регистрация: 13.03.2008
Сообщений: 543
01.07.2019, 10:17  [ТС]
Пытливый, понятно. Но вот, к сожалению, TDBGridEh отказывается рисовать и то и то.
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
01.07.2019, 11:48
У меня в проектах на DBGridEh Canvas рисует все что угодно (версия EhLib 5.2).
Из реального проекта, где линия зачеркивает все ячейки строк, удовлетворяющие условию:
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.GridEhDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
  if MT['Executed'] <> NULL then begin
    GridEh.Canvas.Pen.Color := clBlack;
    GridEh.Canvas.MoveTo(Rect.Left, Rect.Top + 10);
    GridEh.Canvas.LineTo(Rect.Right, Rect.Top + 10);
  end;
end;
0
Кратк. - сест. тал.
 Аватар для Vit@L
87 / 51 / 4
Регистрация: 13.03.2008
Сообщений: 543
01.07.2019, 12:02  [ТС]
Скандербег,
а если такой код добавить:
Delphi
1
DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
Тоже будет линию рисовать и цвет шрифта изменять?
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
01.07.2019, 12:27
Грид из EhLib несколько по-другому работает, хотя всё что присуще штатному делфийскому гриду воспроизводит.
Сейчас еще раз проверил и получил обломчик, когда добавил DefaultDrawColumnCell - в моем случае не отрисовывались значения в колонках кроме первой.
Для конкретной колонки в DBGridEh можно использовать OnGetCellParams. Такого события нет в штатном гриде.

Добавлено через 6 минут
Использовать Canvas (в нашем случае для отрисовки линий) можно только в событии DrawColumnCell, а все остальное (шрифт, цвет, заливка) делается в событии OnGetCellParams самого грида (ну или любой из колонок, если есть надобность разукрашивать по своему одну из них).
1
Кратк. - сест. тал.
 Аватар для Vit@L
87 / 51 / 4
Регистрация: 13.03.2008
Сообщений: 543
01.07.2019, 12:53  [ТС]
Скандербег, Во, теперь все заработало как надо.

Еще раз большое Вам (Пытливый, и Скандербег) спасибо за помощь.
У меня еще один вопрос, а как сделать, чтобы линия, которая перечеркивает строку, рисовалась не с первой, а со второй или третьей колонки?
0
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
01.07.2019, 13:47
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.GridEhDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
  if (MT['Executed'] <> NULL) and (Column.Index > 0) then begin //со 2-й колонки; индексы колонок с 0
    GridEh.Canvas.Pen.Color := clBlack;
    GridEh.Canvas.MoveTo(Rect.Left, Rect.Top + 10);
    GridEh.Canvas.LineTo(Rect.Right, Rect.Top + 10);
  end;
end;
1
Кратк. - сест. тал.
 Аватар для Vit@L
87 / 51 / 4
Регистрация: 13.03.2008
Сообщений: 543
01.07.2019, 14:26  [ТС]
Скандербег, спасибо. Сейчас именно то, что нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.07.2019, 14:26
Помогаю со студенческими работами здесь

Как удалить строку всю?
В Эксель у меня строки с данными..... по номеру строки мне надо удалить всю строку....) есть команда такая или как?

Как прочитать всю строку?
TArray &lt;std::wstring&gt; Result; std::string Buffer; std::ifstream File; std::wcout&lt;&lt;&quot;Opening the project...

Как записать всю строку в sscanf?
Мне нужно проверить введенную строку через шаблон в sscanf(). Записав ее в массив char arr, функция...

Как выбрать всю строку в DataGridView?
Добрый ночь всем. Как сделать так что при нажатие на любой Cells DGV выделялся все это строка?

Как обнулить всю строку сразу?
Здравствуйте. Подскажите пожалуйста как обнулить всю строку сразу


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru