Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 28 мар 2024, 11:51

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




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Выпадающий список лукапа
СообщениеДобавлено: 21 авг 2019, 11:52 
Не в сети

Зарегистрирован: 21 дек 2012, 09:32
Сообщений: 53
Версия 9.3.031 (на более поздних не проверялось)

В лукапе в качестве выпадающего списка используется TDBLookupGridEh = class(TCustomDBGridEh)
Только он в процедуре HighlightDataCellColor не берет параметры отрисовки из TDBGridEhStyle, как это делает обычный TDBGridEh.

Хотелось бы, чтобы выпадающий грид работал так же, как и обычный в плане отрисовки. Либо объясните, почему этого сделать нельзя.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выпадающий список лукапа
СообщениеДобавлено: 01 окт 2019, 07:33 
Не в сети

Зарегистрирован: 21 дек 2012, 09:32
Сообщений: 53
Какие-то исправления или комментарии будут?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выпадающий список лукапа
СообщениеДобавлено: 29 окт 2019, 07:40 
Не в сети

Зарегистрирован: 21 дек 2012, 09:32
Сообщений: 53
Не понимаю, что вам мешает добавить в код процедуры function TDBLookupGridEh.HighlightDataCellColor вызов:
Код:
THackDBGridEhStyle(DBGridEhDefaultStyle).HighlightDataCellColor(Self, DataCol + IndicatorOffset, DataRow + TopDataOffset,
    DataCol, DataRow, Value, AState, False, AColor, AFont)

Инцидент закрывается парой строк кода, а вы на него не отреагируете.
ЗЫ: В версии EhLib 9.4 Build 9.4.019 отрисовка так же не учитывает настройки DBGridEhDefaultStyle.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выпадающий список лукапа
СообщениеДобавлено: 29 окт 2019, 11:22 
Не в сети

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

Можете описать, как воспроизвести ошибку, чтобы наглядно увидеть проблему?

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выпадающий список лукапа
СообщениеДобавлено: 30 окт 2019, 05:45 
Не в сети

Зарегистрирован: 21 дек 2012, 09:32
Сообщений: 53
Это не ошибка как таковая, а расширение функционала, приведение его к общему знаменателю.
Есть наследник TDBGridEhStyle:
Код:
  TMyDBGridEhStyle = class(TDBGridEhStyle)
  protected
    function HighlightDataCellColor(AGrid: TCustomDBGridEh; ACol, ARow: Integer; DataCol, DataRow: Integer; const Value: string; AState: TGridDrawState; InMultiSelect: Boolean; var AColor: TColor; AFont: TFont): Boolean; override;
  end;

Этот код вызывается при отрисовке TDBGridEh, но не вызывается при отрисовке TDBLookupGridEh. Хочется, чтобы работало одинаково.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выпадающий список лукапа
СообщениеДобавлено: 21 ноя 2019, 05:33 
Не в сети

Зарегистрирован: 21 дек 2012, 09:32
Сообщений: 53
Продолжаем разговор.

В скрине 1 (стандартное поведение EhLib) видно, что выделенная строка рисуется черным цветом. Происходит это из-за того, что она выделена. (На втором скрине эта же строка рисуется синим).
В скрине 2 (исправленное поведение) видно, что строка рисуется синим цветом, даже несмотря на то, что она выделена.

На самом деле такое же поведение наблюдается и в обычных TDBGridEh. Чтобы сделать красиво, был переопределен класс TDBGridEhStyle с реализацией HighlightDataCellColor. В обычных гридах всё заработало как надо. Теперь я прошу, чтобы такое же поведение было в TDBLookupGridEh. Для этого в них надо в TDBLookupGridEh.HighlightDataCellColor добавить вызов TDBGridEhStyle.HighlightDataCellColor.


Вложения:
std.png
std.png [ 17.03 KiB | Просмотров: 1046 ]
changed.png
changed.png [ 17.36 KiB | Просмотров: 1046 ]
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выпадающий список лукапа
СообщениеДобавлено: 21 ноя 2019, 21:10 
Не в сети

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

Можете прислать вашу версию TDBGridEhStyle на support@ehlib?

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выпадающий список лукапа
СообщениеДобавлено: 22 ноя 2019, 05:32 
Не в сети

Зарегистрирован: 21 дек 2012, 09:32
Сообщений: 53
Там реализована только одна функция HighlightDataCellColor. Вот она.
Код:
function TSlDBGridEhStyle.HighlightDataCellColor(AGrid: TCustomDBGridEh; ACol, ARow, DataCol, DataRow: Integer;
  const Value: string; AState: TGridDrawState; InMultiSelect: Boolean; var AColor: TColor; AFont: TFont): Boolean;
var
  Bg, C: TColor;
begin
  Result := inherited HighlightDataCellColor(AGrid, ACol, ARow, DataCol, DataRow,
    Value, AState, InMultiSelect, AColor, AFont);

  Bg := AColor;
  C := THackCustomDBGridEh(AGrid).Color;
  THackCustomDBGridEh(AGrid).GetCellParams(AGrid.Columns[DataCol], AFont, C, AState);
  if C <> THackCustomDBGridEh(AGrid).Color then
    AColor := ApproximateColor(C, Bg, 256/4);
end;


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выпадающий список лукапа
СообщениеДобавлено: 27 ноя 2019, 09:01 
Не в сети

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

К сожалению TDBGridEhStyle в выпадающем списке нельзя использовать
т.к. он не всегда учитывает, что выпадающий список не получает фокус ввода,
при этом выделенная строка в списке должна отображаться в активном "фокусном" режиме.

Если говорить о цвете шрифта для выделенной строки в выпадающем списке, то
вероятно, можно доработать, чтобы цвет шрифта для выделенной строки оставался текущим, а не использовался
clHighlightText или GetElementDetails(tgCellSelected), ecTextColor (в стилизованном режиме),
но пока не удается точно подобрать режим, когда его можно использовать, т.к.
для некоторых случаев подсвеченный разработчиком цвет сливается с цветом выделенной строки,
и пользователь не сможет разглядеть текст выделенной строки.

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

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Выпадающий список лукапа
СообщениеДобавлено: 27 ноя 2019, 11:43 
Не в сети

Зарегистрирован: 21 дек 2012, 09:32
Сообщений: 53
Этот код у меня в проекте работает и на обычном и на задисабленном лукапах.

Код:
function TDBLookupGridEh.HighlightDataCellColor(DataCol, DataRow: Integer; const Value: string;
  AState: TGridDrawState; var AColor: TColor; AFont: TFont): Boolean;
begin
  Result := False;
  if {not VarIsNull(KeyValue) and }
    ListLink.Active and
    VarEquals(ListLink.DataSet.FieldValues[FKeyFieldName], KeyValue)
  then
    Result := (UpdateLock = 0);
/////////////////// добавлено
  if Result and (DBGridEhDefaultStyle <> nil) then
    THackDBGridEhStyle(DBGridEhDefaultStyle).HighlightDataCellColor(Self, DataCol + IndicatorOffset, DataRow + TopDataOffset,
    DataCol, DataRow, Value, AState, False, AColor, AFont)
  else
/////////////////// добавлено
  if Result then
    HighlightLookupGridCellColor(DataCol, DataRow, True, Value, AState, AColor, AFont);
end;


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

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


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

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


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

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