Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.214.32] |
|
Сообщ.
#1
,
|
|
|
Проблема в том что, при добавлении на форму компонента, в ObjectInspector цвета FirstColor и SecondColor черные, т.е. не по умолчанию. Также, даже если их изменить в ObjectInspector при запуске программы они все равно остаются черные.
Для FirstColor я оставил как есть, а для SecondColor я добавил процедуру изменяющую значение второго цвета, но все равно не работает. Вот собственно код: unit ColoredListView; interface uses SysUtils, Classes, Controls, ComCtrls, Windows, Graphics; type TColoredListView = class(TListView) private { Private declarations } FColor1 : TColor; FColor2 : TColor; procedure SetColor2(Value:TColor); protected { Protected declarations } public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure OnDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); published { Published declarations } property FirstColor : TColor read FColor1 write FColor1 default $00DEEAD7; property SecondColor : TColor read FColor2 write SetColor2 default $00C9DDBD; end; procedure Register; implementation {$R ColoredListView.dcr} procedure Register; begin RegisterComponents('Samples', [TColoredListView]); end; constructor TColoredListView.Create(AOwner: TComponent); begin inherited; Color:=FColor2; OnCustomDrawItem:=OnDrawItem; end; destructor TColoredListView.Destroy; begin inherited; end; procedure TColoredListView.SetColor2(Value:TColor); begin FColor2:=Value; end; procedure TColoredListView.OnDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var i:word; begin if item = nil then EXIT; i := Item.Index; if trunc((i) / 2) < (i / 2) then sender.canvas.brush.Color := FColor1 else sender.canvas.brush.Color := FColor2; end; end. |
Сообщ.
#2
,
|
|
|
unit ColoredListView; interface uses SysUtils, Classes, Controls, ComCtrls, Windows, Graphics, Math; const clFirst = $00DEEAD7; clSecond = $00C9DDBD; type TColoredListView = class(TListView) private { Private declarations } FColor1 : TColor; FColor2 : TColor; procedure SetColor1(Value:TColor); procedure SetColor2(Value:TColor); protected { Protected declarations } public { Public declarations } constructor Create(AOwner: TComponent); override; procedure OnDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); published { Published declarations } property FirstColor : TColor read FColor1 write SetColor1 default clFirst; property SecondColor : TColor read FColor2 write SetColor2 default clSecond; end; procedure Register; implementation {$R ColoredListView.dcr} procedure Register; begin RegisterComponents('Samples', [TColoredListView]); end; constructor TColoredListView.Create(AOwner: TComponent); begin inherited; FColor1:=clFirst; FColor2:=clSecond; Color:=FColor2; OnCustomDrawItem:=OnDrawItem; end; procedure TColoredListView.SetColor1(Value:TColor); begin if FColor1<>Value then begin FColor1:=Value; Invalidate; end; end; procedure TColoredListView.SetColor2(Value:TColor); begin if FColor2<>Value then begin FColor2:=Value; Invalidate; end; end; procedure TColoredListView.OnDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin if Assigned(Item) then Sender.Canvas.Brush.Color:=IfThen(Odd(Item.Index),FColor1,FColor2); end; end. |
Сообщ.
#3
,
|
|
|
Спасибо!
|