Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 19 апр 2024, 06:07

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: GridLineWidth
СообщениеДобавлено: 04 фев 2019, 06:02 
Не в сети

Зарегистрирован: 14 мар 2018, 10:34
Сообщений: 22
Как переписать наследника DBGridEh, чтобы заработало это свойство?
Мне нужно вот так:
Изображение
2 дня бьюсь.. не меняется ширина, а только увеличивается размер самих ячеек


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: GridLineWidth
СообщениеДобавлено: 04 фев 2019, 09:02 
Не в сети

Зарегистрирован: 14 мар 2018, 10:34
Сообщений: 22
Прикрепил проект - работает, но не так как мне нужно. Отсупы увеличивает, а линии отрисовывает тонкими...
Хочу заметить, что на обычном гриде (TStringGrid) все прекрасно работает.


Вложения:
GridLineWidth.7z [50.46 KiB]
Скачиваний: 56
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: GridLineWidth
СообщениеДобавлено: 05 фев 2019, 00:13 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

К сожалению, TDBGridEh не поддерживает толщину разделительных линии больше единицы.

TStringGrid также поддерживает такую толщину весьма условно.
Например, при ресайзинге ширины колонки, толщина линии подсветки ресайзинга всё равно рисуется толщиной в одну линию.

Вложение:
sshot-6.png
sshot-6.png [ 12.09 KiB | Просмотров: 894 ]


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

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: GridLineWidth
СообщениеДобавлено: 05 фев 2019, 11:18 
Не в сети

Зарегистрирован: 14 мар 2018, 10:34
Сообщений: 22
На самом деле все довольно-таки сложнее, я использую GridEh в режиме treeview в связке с MemTableEh и хотелось бы для нодов верхнего уровня рисовать кнопки, задавать им цвет и расстояние между ними. Может быть использовать TGridPanel было бы удобнее, но тогда придется переделывать формат входных данных и, на мой взгяд, все же перерисовать ячейки было бы проще. Сейчас делаю расстояние между кнопками через отрисовку в OnDrawColumnCell рамки ячейки. Если ей сделать цвет фона и задать pen.width, то можно добиться желаемого результата.
Или все же неправильно мыслю? Может стоит копать в другую сторону?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: GridLineWidth
СообщениеДобавлено: 05 фев 2019, 12:50 
Не в сети

Зарегистрирован: 14 мар 2018, 10:34
Сообщений: 22
Вот что-то на вроде этого мне нужно, но все получается настолько криво, что начинаю уже отказываться от этой затеи


Вложения:
GridLineWidth.7z [58.88 KiB]
Скачиваний: 64
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: GridLineWidth
СообщениеДобавлено: 05 фев 2019, 23:00 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

А если установить большую высоту ячейки и уменьшать область при отрисоки.

Код:
    DBGrdEh1.RowHeight = 48



Код:
procedure TForm1.DBGrdEh1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
var
  t: Integer;
  DrawRect: TRect;
  th: Integer;
begin

  with DBGrdEh1, DBGrdEh1.Canvas do
    if Pos('Заголовок', MemTblEh1.FieldByName('NAME_ID').AsString) <> 0 then
    begin
      DrawRect := Rect;

      Brush.Color := DBGrdEh1.Color;
      FillRect(DrawRect);

      DrawRect.Left := Rect.Left + 13;
      DrawRect.Top := Rect.Top + 13;
      DrawRect.Right := Rect.Right - 13;
      DrawRect.Bottom := Rect.Bottom - 13;

      if gdSelected in State then
      begin
        Brush.Color := clHighlight;
        FillRect(DrawRect);
      end;

      DrawRect.Left := DrawRect.Left + 2;
      DrawRect.Top := DrawRect.Top + 2;
      DrawRect.Right := DrawRect.Right - 2;
      DrawRect.Bottom := DrawRect.Bottom - 2;

      // Отрисовка заголовков...
      // прямоугольник
      t:= GridLineWidth + 15;
      Brush.Color:= ClRed;
      Font.Color:= clBlack;
      FillRect(DrawRect);
      th := TextHeight(Column.Field.Text);
      TextOut(DrawRect.Left + t, Round((DrawRect.Top + DrawRect.Bottom) / 2) - th div 2, Column.Field.Text);
      FrameRect(DrawRect);
      t:= GridLineWidth - 15;
//      // окантовка
//      Pen.Color:= clWhite;
//      Pen.Width:= GridLineWidth;
//      MoveTo(DrawRect.Left, DrawRect.Top);
//      LineTo(DrawRect.Right - t, DrawRect.Top);
//      LineTo(DrawRect.Right - t, DrawRect.Bottom - t);
//      LineTo(DrawRect.Left, DrawRect.Bottom - t);
//      LineTo(DrawRect.Left, DrawRect.Top);
    end;
end;


Вложения:
sshot-7.png
sshot-7.png [ 5.82 KiB | Просмотров: 858 ]

_________________
Best regards
EhLib support Team
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: GridLineWidth
СообщениеДобавлено: 06 фев 2019, 07:36 
Не в сети

Зарегистрирован: 14 мар 2018, 10:34
Сообщений: 22
Здравствуйте, отлично! Вот как раз то что мне и было нужно, большое спасибо! Осталось только научиться обновлять высоту ячеек :)
ps. Поспешил... расстояние отрисовывается между всеми ячейками, т.е., если я делаю из заголовков большие кнопки - получается не очень красиво


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB