Показать сообщение отдельно

  #3  
Старый 25.12.2009, 23:45
Si{R}ius
Участник форума
Регистрация: 13.11.2008
Сообщений: 131
Провел на форуме:
776255

Репутация: 52
По умолчанию

Пытаюсь поместить в компонент код, меняющий цвет текста:

Код:
 procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
   Rect: TRect; State: TOwnerDrawState);
 begin
   with Control as TListBox do
   begin
     Canvas.FillRect(Rect);
     Canvas.Font.Color := TColor(clGreen);
     Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]);
   end;
 end;
В компоненте у меня он выглядит так:

Код:
unit MyListBox;

interface

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

type
  TMyListBox = class(TListBox)
  private
   { Private declarations }
    FColorText:boolean;
    FCanvas: TControlCanvas;
    procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
       Rect: TRect; State: TOwnerDrawState);

  protected
  { Protected declarations }
  procedure setColorText(value:boolean);

  public
  { Public declarations }
  constructor  Create (AOwner:TComponent); override;

  published
  { Published declarations }
  property ColorText: boolean read FColorText write setColorText default false;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TMyListBox]);
end;

constructor  TMyListBox.Create (AOwner:TComponent);
begin
 Inherited Create(AOwner);
  FColorText:=false;
  FCanvas:=TControlCanvas.Create;
  FCanvas.Control:=Self;
end;

 procedure TMyListBox.setColorText (value:boolean);
 begin
   with FCanvas.Control as TListBox do
   begin
     Canvas.FillRect(Rect);
     Canvas.Font.Color := TColor(clGreen);
     Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]);
   end;
 end;
end.
Работать это дело не хочет, судя по всему, нужно применить где-то ListBox1DrawItem, а как это сделать, ума не приложу..Хелпаните, кто с таким сталкивался.
 
Ответить с цитированием