Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделение нескольких строчек, DevExpress.TcxCustomComboBox 
:(
    Опции темы
WERITAS
Дата 12.9.2019, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 2.5.2005
Где: Yaroslavl

Репутация: нет
Всего: 5



Всем добра! 
Мне нужно сделать так, чтобы строчка (item) в popup-окне в моем комбобоксе (использую девовский TcxCustomComboBox), содержащая текст с символами #13#10, разбивалась на несколько строчек, но чтобы при этом это всё был один итем! То есть, чтобы при выделении одного айтема подсвечивались все строки. Я пока решил не модифицировать стандартный TcxCustomComboBox, а поиграть с его событиями. Повесил парочку обработчиков:
Код

procedure TForm1.cxSingleLineComboBoxPropertiesDrawItem(  
  AControl: TcxCustomComboBox; ACanvas: TcxCanvas; AIndex: Integer;  
  const ARect: TRect; AState: TOwnerDrawState);  
var  
  vSList: TStringList;  
  vHeight: integer;  
  vItemRect: TRect;  
  
begin  
  ACanvas.Canvas.Brush.Color := clWhite;  
  ACanvas.Canvas.Font.Color := clBlack;  
  
  vSList := TStringList.Create();  
  try  
    vSList.Text := AControl.Properties.Items[AIndex];  
    vSList.LineBreak := #13#10;  
  
    vHeight := ACanvas.TextHeight(vSList[0]);  
  
    for var i: integer := 0 to vSList.Count - 1 do  
      ACanvas.TextOut(ARect.Left, ARect.Top + vHeight * i, i.ToString() + ') ' + vSList[i]);  
  
  finally  
    vSList.Free();  
  end;  
end;  
  
  
procedure TForm1.cxSingleLineComboBoxPropertiesMeasureItem(  
  AControl: TcxCustomComboBox; AIndex: Integer; ACanvas: TcxCanvas;  
  var AHeight: Integer);  
var  
  vSList: TStringList;  
  
begin  
  vSList := TStringList.Create();  
  try  
    vSList.Text := AControl.Properties.Items[AIndex];  
    vSList.LineBreak := #13#10;  
    AHeight := AHeight * vSList.Count;  
  
  finally  
    vSList.Free();  
  end;  
end;


Всё работает неплохо, но не получается сделать выделение. 
Пробовал так:
Код

procedure TForm1.cxSingleLineComboBoxPropertiesDrawItem(  
  AControl: TcxCustomComboBox; ACanvas: TcxCanvas; AIndex: Integer;  
  const ARect: TRect; AState: TOwnerDrawState);  
var  
  vSList: TStringList;  
  vHeight: integer;  
  vItemRect: TRect;  
  
begin  
  ACanvas.Canvas.Brush.Color := clWhite;  
  ACanvas.Canvas.Font.Color := clBlack;  
  
  vSList := TStringList.Create();  
  try  
    vSList.Text := AControl.Properties.Items[AIndex];  
    vSList.LineBreak := #13#10;  
  
    vHeight := ACanvas.TextHeight(vSList[0]);  
    vItemRect := Rect(ARect.Left, ARect.Top, AControl.Width, vHeight * vSList.Count);  
  
    if odSelected in AState then  
      ACanvas.FrameRect(vItemRect, clLime);  
  
    for var i: integer := 0 to vSList.Count - 1 do  
      ACanvas.TextOut(ARect.Left, ARect.Top + vHeight * i, i.ToString() + ') ' + vSList[i]);  
  
  finally  
    vSList.Free();  
  end;  
end;


но не работает. Подскажите какие-нибудь идеи как вообще такое сделать?


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
Google
  Дата 21.10.2019, 05:13 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0743 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.