Просмотр полной версии : Дочерний компонент от ListBox (Delphi)
Si{R}ius
07.12.2009, 11:27
Для курсака нужно сообразить такую штуку. Нужно добавить новые поля, свойства и методы (или изменить старые).
Кто может подбросить идеи на этот счет?
Как можно усовершенствовать ListBox?
по этой теме могу посоветовать глянуть 5005 статей по Delphi
и там есть статейка "Прозрачный TListBox" и "Расширение компонента ListBox"
И там создается новый объект наследник TListBox с измененными свойствами.
Расширение компонента ListBox - довольно просто и хорошо всё описано.
Si{R}ius
25.12.2009, 23:45
Пытаюсь поместить в компонент код, меняющий цвет текста:
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, а как это сделать, ума не приложу..Хелпаните, кто с таким сталкивался.
Si{R}ius
26.12.2009, 13:22
Где в этом коде можно объявить процедуру DrawItem?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot