VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Язык программирования Delphi.
Работа с графикой, рисуем внутри TListBox
:
Logo

Очень часто, для лучшего представления данных, тебе будет нужно рисовать внутри компонента TListBox. Что я имею ввиду? Посмотри на рисунок 1, и ты всё поймёшь.
Logo
Рис 1. Пример

Может это покажется странным, но всё это делается за семь строчек кода. Конечно же, в одну строку можно записать и двадцать операций, но я этот случай не учитываю.

Секрет рисования заключается в том, что у компонента TListBox1 параметр Style должен быть lbOwnerDrawFixed или lbOwnerDrawVariable .

После этого создаёшь обработчик события OnDrawItem и в нём пишешь:

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
 with ListBox1.Canvas do
  begin
   Brush.Color:=clRed; // Задаём красный цвет кисти. 
   Brush.Style:=TBrushStyle(Index); //Выбираем стиль кисти
   Pen.Style:=psClear;
   Rectangle(Rect.Left,Rect.Top,Rect.Left+100,Rect.Bottom);

   Brush.Style:=bsClear;
   Font.Color:=clBlue;
   TextOut(Rect.Left+110,Rect.Top,IntToStr(index));
  end;
end;

Вот и всё. Твоя прога готова, жми на запуск и наслаждайся. А я начинаю объяснять, что же я тут нарисовал.

Первая строка:

with ListBox1.Canvas do

Оператор "With" говорит, что все последующие операции будут производится с компонентом (объектом) "ListBox1". Для того, чтобы ты лучше понял я приведу код без этой строки:

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  ListBox1.Canvas.Brush.Color:=clRed;
  ListBox1.Canvas.Brush.Style:=TBrushStyle(Index);
  ListBox1.Canvas.Pen.Style:=psClear;
  ListBox1.Canvas.Rectangle(Rect.Left,Rect.Top,Rect.Left+100,Rect.Bottom);

  ListBox1.Canvas.Brush.Style:=bsClear;
  ListBox1.Canvas.Font.Color:=clBlue;
  ListBox1.Canvas.TextOut(Rect.Left+110,Rect.Top,IntToStr(index));
end;

Если у тебя есть глаза, то ты можешь увидеть, что в каждой строке появились подписи ListBox1.Canvas . Код стал очень не красивым. Постоянно нужно говорить, что Brush или ещё что-нибудь нужно взять у ListBox1.Canvas .

Поэтому я и использовал оператор With

With "Объект" do
Begin
 Всё, что находится здесь, будет относиться к объекту "Объект". 
 Поэтому не надо писать имя объекта перед каждым используемым 
 Свойством или методом.
End;

Я надеюсь, что я доходчиво объяснил. Если ты опять что-то не понял, то не надо отчаиваться. Я же говорил, что мы будем изучать всё постепенно. Практика лучше всего откладывает в памяти любые знания, поэтому ею мы и занимаемся. А остальное дело времени.

Теперь ещё несколько подводных камней нашей проги. Конструкция Brush.Style:=TBrushStyle(Index) выбирает кисть в зависимости от рисуемого в данный момент элемента. Всего существует восемь стилей кисти. Когда вываливается сообщение OnDrawItem для первого элемента (об этом говорит параметр index передаваемый в процедуру ListBox1DrawItem), мы рисуем элемент с кистью первого стиля. Для второго элемента будет использоваться второй стиль кисти и т.д.
Logo
Рис 2. Пример

Карандаш я выбрал прозрачным Pen.Style:=psClear , это для того, чтобы не было никаких оборок. Попробуй убрать эту строку и строки в TListBox1 будут выглядеть уже как на рисунке 2. Как видишь, у каждой строки появились оборки. Вот именно их я убирал с помощью этой конструкции.

Функция Rectangle(х1,у2,х2,у2) с соответствующими координатами. Дальше я делал прозрачной кисть и задавал цвет фона. После этого я просто выводил текст строки с помощью функции TextOut(х, у, текст).

Всё очень просто. В любой книге по Delphi этот материал считается сложным, но я не вижу в этом ничего сложного. Надеюсь, для тебя эта статья тоже была очень лёгкой.

Попробуй сделать тоже самое с компонентом TComboBox. Не забудь про свойство Style у этого компонента. А в остальном, весь код будет таким же.

 Исходники примера забирай здесь


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©