Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1438328592
Pavelnk
2015-07-31 10:43
2017.04.02
Перекинуть edit в буфер


15-1459882239
Игорь Шевченко
2016-04-05 21:50
2017.04.02
Кто что посоветует по перехвату вызовов API ?


3-1313067737
amamed_3071
2011-08-11 17:02
2017.04.02
Upgate SQL 2005 Expression to SQL 2005 Enterprice


2-1438182677
Pavelnk
2015-07-29 18:11
2017.04.02
Нажать Enter


15-1459700405
K-1000
2016-04-03 19:20
2017.04.02
Queue. Объясните, чего ему ещё надо?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский