Подписаться на RSS рассылку
Главная » Статьи по Delphi » Компоненты » Текст в TListBox разными цветами

Текст в TListBox разными цветами

Автор: Борисов Сергей

Как же в TListBox добавить элемент своего цвета? Необходимо использовать событие onDrawItem.

ВНИМАНИЕ !!! Нужно поставить у TListBox свойство  STYLE = lbOwnerDrawFixed иначе работать не будет.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    Edit1: TEdit;
    procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  masColor:Array of TColor; // массив цветов
  L:Integer=3;

implementation

{$R *.dfm}

Procedure PaintMyListBox(LB:TListBox; Rect: TRect; Index:Integer);
begin
  With LB.Canvas do
  begin
    FillRect(Rect); // Очищаем
    LB.Canvas.Font.Color:=MasColor[Index]; // установим цвет текста
    TextOut(Rect.Left+2, Rect.Top+1, LB.Items[index]); // рисуем вручную
  end;
end;

// Новая процедура для добавления в ListBox
Procedure AddToListBox(S:String; Cl:TColor; LB:TListBox);
begin
  Inc(L);                  //Увеличим длину динамического массива
  SetLength(MasColor, L);  //Установим новую длину
  MasColor[L-1]:=Cl;       //Забьём значение в ячейку

  LB.Items.Add(S);         //Добавим элемент

  LB.Perform(LB_SETTOPINDEX, LB.Items.Count-1, 0);//Прокручиваем бегунок
end;

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  PaintMyListBox(ListBox1, Rect, Index);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetLength(MasColor, L); // Установим кол-во эл-тов массива

  MasColor[0]:=$00EB8E56; // Установим цвета
  MasColor[1]:=$00004080;
  MasColor[2]:=$004369DC;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AddToListBox(Edit1.Text, CLBlue, ListBox1);
end;

end.

Просмотров: 5601

Обсудить на форуме


Имя *:
Email:


Код *:

Copyright © 2008-2016 Программирование на Delphi для начинающих и не только

Полнота авторских прав на все материалы, опубликованные на сервере DelphiDevelop.ru принадлежит их авторам

Перепечатка материалов разрешается с указанием авторства и гиперссылки на первоисточник информации

Хостинг от uCoz

Автор проекта: Борисов Сергей

e-mail: save-x@yandex.ru

Связь с администрацией сайта