Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.04.02;
Скачать: CL | DM;

Вниз

Выделенный элемент ListView при потере фокуса становится серым   Найти похожие ветки 

 
Light-blr   (2012-01-23 16:44) [0]

Здравствуйте. Использую на форме компонент TListView - нужен список строк с картинками на каждую. Выделяю строку, перевожу фокус на другое окно - выделенная строка становится серой и почти не видно что там выбрано, даже несмотря на то что HideSelection=false. В StringGrid или ListBox строка остаётся синей, в TreeView тоже нашла как сделать:

procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
 if Node.Selected then Sender.Canvas.Brush.Color:=clActiveCaption;
 if (Node.AbsoluteIndex=0) and (TreeView1.SelectionCount=0) then begin
   Sender.Canvas.Brush.Color:=clActiveCaption;
   Sender.Canvas.Font.Color:=clWhite;
 end;
end;

А в ListView если пишу по аналогии с этим, ничего не получается - всё равно остаётся серым при потере фокуса.

Пробовала использовать ListBox - пробелы перед текстом чтобы было место куда поставить картинку и

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
 Rect: TRect; State: TOwnerDrawState);
begin
 ImageList4.Draw(ListBox1.Canvas,Rect.Left,Rect.Top,Index mod 4);
end;

Но тогда пропадает сам текст. Если в этой же процедуре использовать TextOut, то элемент выделяется как-то очень некрасиво, рамочка выделения остаётся, сам текст выглядит как будто текст в окошке, выделенный мышкой.

Собственно, вопрос: можно как-то сделать так, чтобы ListView при потере фокуса продолжал светить элемент синим цветом?


 
Cobalt ©   (2012-01-23 22:19) [1]

Ну, для начала надо уточнить версию Delphi и Windows
а также, используешь ли ты TXPManifest

проверил сейчас - в Win7/D2010, ListView в стиле vsReport/vsList выделенный пункт (по умолчанию - ничего не менял) не меняет своего цвета при потере его родительским окном фокуса.


 
Light-blr   (2012-01-24 11:24) [2]

Delphi 7, Windows XP. Прошу прощения, что не указала сразу.


 
maleficium   (2012-10-15 17:16) [3]

Есть решение данного вопроса, тоже очень интересно.


 
Dimka Maslov ©   (2012-10-15 21:39) [4]

Там все хитро.
Сначала надо нарисовать картинку, потом текст, а потом - рамочку. Тогда рамочка сотрётся, ибо рисуется методом XOR.


 
Sha ©   (2012-10-17 00:17) [5]


> можно как-то сделать так, чтобы ListView при потере фокуса
> продолжал светить элемент синим цветом?


в ListViewCustomDrawItem установить нужный цвет:

 if Item.Selected or Item.Focused and not Item.ListView.MultiSelect
   then Item.ListView.Canvas.Brush.Color:=clHighlight
 else if Item.Focused and Item.ListView.MultiSelect
   then Item.ListView.Canvas.Brush.Color:=clHighlight
 else
   Item.ListView.Canvas.Brush.Color:=clWindow;


 
Германн ©   (2012-10-17 01:26) [6]


> Sha ©   (17.10.12 00:17) [5]

Что-то с Item.Focused перемудрено, имхо.
А если так:
if Item.Focused or (Item.Selected or and not Item.ListView.MultiSelect)
 then Item.ListView.Canvas.Brush.Color:=clHighlight
else
 Item.ListView.Canvas.Brush.Color:=clWindow;


P.S. Замечание только по булевой логике.


 
Sha ©   (2012-10-17 01:51) [7]


> Германн ©   (17.10.12 01:26) [6]
> Замечание только по булевой логике.


Этот код выкушен из ListViewDrawItem работающего проекта и,
наверно, недостаточно или ошибочно упрощен/сокращен/изменен.
В примере я постарался показать/сохранить возможность установки
разных цветов в разных режимах/состояниях.
На 100% удовлетворяющий автора темы код написать не стремился,
т.к. обычно надо менять не только цвет кисти.


 
Sha ©   (2012-10-17 01:59) [8]

довольно мудрено изложил довольно простую мысль:
на месте первого и второго clHighlight могут быть различные цвета


 
Германн ©   (2012-10-17 02:10) [9]


> Sha ©   (17.10.12 01:59) [8]
>
> довольно мудрено изложил довольно простую мысль:
> на месте первого и второго clHighlight могут быть различные
> цвета

Теперь понятно.
Значит был копипаст из готового проекта с небольшой редакцией сделанной  "на лету". :)



Страницы: 1 вся ветка

Текущий архив: 2017.04.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.005 c
2-1438149724
Abcdef123
2015-07-29 09:02
2017.04.02
Компиляция кода D2007 в XE8.


4-1281349091
PavDimka
2010-08-09 14:18
2017.04.02
Глюк с QueryPerformanceFrequency


1-1327322645
Light-blr
2012-01-23 16:44
2017.04.02
Выделенный элемент ListView при потере фокуса становится серым


2-1437652682
Ринсвинд
2015-07-23 14:58
2017.04.02
Запросы не поделили Buffer I/O


2-1438148217
Alex_C
2015-07-29 08:36
2017.04.02
Как правильно "убить" зависший Thread