Форум: "Основная";
Текущий архив: 2017.04.02;
Скачать: [xml.tar.bz2];
ВнизВыделенный элемент 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.001 c