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

Вниз

А можно ли цменить свет(стиль) прокрутки ListBox ???   Найти похожие ветки 

 
XTD ©   (2006-06-07 12:36) [0]

Такой вопрос ...


 
XTD ©   (2006-06-07 12:57) [1]

Ответ  

ListBox нужно перевести в режим owner draw и "вручную" рисовать текст строки и линию под ней. Для этого нужно выставить свойство ListBox.DrawMode в значение DrawMode.OwnerDrawFixed и подписаться на событие ListBox.DrawItem, в котором и производить отрисовку.
Пример ниже выводит в ListBox значения цветов из класса Color и разделяет строки линией, цвет которой совпадает с именем цвета элемента ListBox"a. Исключительно в демонстрационных целях стиль линии выбирается случайным образом из доступных в перечислении DashStyle:

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Reflection;
class MyForm: Form
{
 //Массив стилей Pen"a для каждой строки ListBox"a
 readonly DashStyle[] dashStyles;
 public MyForm()
 {
   ListBox listBox = new ListBox();
   listBox.DrawMode = DrawMode.OwnerDrawFixed;
   listBox.DrawItem += new DrawItemEventHandler(OnDrawListBoxItem);
   listBox.Parent = this;
   listBox.Dock = DockStyle.Fill;
   //Заполняем ListBox именами цветов, содержащихся как свойства в классе Color
   foreach(PropertyInfo propertyInfo in typeof(Color).GetProperties(BindingFlags.Static | BindingFlags.Public))
     listBox.Items.Add(propertyInfo.Name);
   //Заполнение массива dashStyles случайными значениями из возможных стилей
   Random random = new Random(DateTime.Now.Millisecond);
   dashStyles = new DashStyle[listBox.Items.Count];
   Array possibleStyles = Enum.GetValues(typeof(DashStyle));
   for (int index = 0; index < dashStyles.Length; index ++)
     dashStyles[index] = (DashStyle)possibleStyles.GetValue(random.Next(possibleStyles.Length));
 }
 void OnDrawListBoxItem(object sender, DrawItemEventArgs e)
 {
   ListBox listBox = sender as ListBox;
   //Рисуем выделенную строку
   if ((e.State & DrawItemState.Selected) != 0)
     e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
   else
     e.Graphics.FillRectangle(Brushes.White, e.Bounds);
   string itemText = listBox.Items[e.Index].ToString();
   Color color = Color.FromName(itemText);
   //Рисуем строку
   e.Graphics.DrawString(itemText, Font, new SolidBrush(color), e.Bounds);
   Pen pen = new Pen(color);
   pen.DashStyle = dashStyles[e.Index];
   //Рисуем линию под строкой
   e.Graphics.DrawLine(pen, e.Bounds.X, e.Bounds.Bottom - 1, e.Bounds.Right, e.Bounds.Bottom - 1);
 }
 static void Main()
 {
   Application.Run(new MyForm());
 }
}


 
XTD ©   (2006-06-07 13:00) [2]

Это на Си. На Делфи сами переводите



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

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

Наверх




Память: 0.47 MB
Время: 0.043 c
2-1149690261
irena
2006-06-07 18:24
2006.06.25
BDE некорректно работает с длинными строками?


2-1149425426
media
2006-06-04 16:50
2006.06.25
progressbar


15-1149268194
ArtemESC
2006-06-02 21:09
2006.06.25
Программка...


2-1149665351
Alex>
2006-06-07 11:29
2006.06.25
TQuery


2-1149596976
mfender
2006-06-06 16:29
2006.06.25
TWebBrowser: найти и удалить элемент