![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TListView; закрасить/затереть текст в колонке. [D7, XP]
JetAPI © (2007-07-18 00:45:00)Привет всем.
Сразу к сути.... Вот код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
ListView1: TListView;
procedure FormCreate(Sender: TObject);
procedure ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
const a: array [0..2] of integer = (100,150,200);
var
i,j: Integer;
begin
ListView1.ViewStyle:=vsReport;
with ListView1 do begin
for i:=0 to 2 do begin
Columns.Add.Width:=a[i];
Column[i].Caption:='Column #'+IntToStr(i+1);
end;
for i:=0 to 3 do begin
Items.Add.Caption:='Item '+IntToStr(i+1);
for j:=0 to 1 do
Items.Item[i].SubItems.Add('Subitem '+IntToStr(j+1))
end;
end;
end;
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var r: TRect;
begin
r:=Item.DisplayRect(drBounds);
r.Left:=ListView1.Column[0].Width;
ListView1.Canvas.Brush.Color:=clWindow;
ListView1.Canvas.FillRect(r);
end;
end.
Этот код стирает целиком всю колонку...
r:=Item.DisplayRect(drBounds);
r.Left:=ListView1.Column[0].Width;
Но... при этом... Текст в моем ListView делается жирным.
Что?.. Как?.. Почему? ничего не понимаю. Найдите в коде ошибку.. или помогите переписать.
За ранее спасибо.
{RASkov} (2007-07-18 17:35:00) [21]> [3] JetAPI © (18.07.07 16:21)
> procedure TForm1.ListView1AdvancedCustomDrawSubItem(
> Sender: TCustomListView; Item: TListItem; SubItem: Integer;
>
> State: TCustomDrawState; Stage: TCustomDrawStage;
> var DefaultDraw: Boolean);
> var r: TRect;
> begin
> r:=ListView1.Items[1].DisplayRect(drBounds);
> ListView1.Canvas.Brush.Color:=clWindow;
> ListView1.Canvas.FillRect(r);
> end;
А так:
procedure TForm1.ListView1AdvancedCustomDrawSubItem(
Sender: TCustomListView; Item: TListItem; SubItem: Integer;
State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
var r: TRect;
begin
r:=Item.DisplayRect(drBounds);
r.Left:=ListView1.Column[0].Width;
ListView1.Canvas.Brush.Color:=clWindow;
ListView1.Canvas.FillRect(r);
end;
?? Я у себя попробывал и [0] и этот. В [0] имеет место быть описанная ситуация, а в адвансет такого эфекта нет....
Или я не верно понял суть вопроса в [0]... (
JetAPI (2007-07-18 16:21:00) [22]Ничего не получается... Результат тот же... Все сабитемы прорисовываютс
жирным. Где еще можно посмотреть ошибку?..
procedure TForm1.FormCreate(Sender: TObject);
const a: array [0..2] of integer = (100,150,200);
var
i,j: Integer;
begin
ListView1.ViewStyle:=vsReport;
with ListView1 do begin
for i:=0 to 2 do begin
Columns.Add.Width:=a[i];
Column[i].Caption:='Column #'+IntToStr(i+1);
end;
for i:=0 to 3 do begin
Items.Add.Caption:='Item '+IntToStr(i+1);
for j:=0 to 1 do
Items.Item[i].SubItems.Add('Subitem '+IntToStr(j+1))
end;
end;
end;
procedure TForm1.ListView1AdvancedCustomDrawSubItem(
Sender: TCustomListView; Item: TListItem; SubItem: Integer;
State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
var r: TRect;
begin
r:=ListView1.Items[1].DisplayRect(drBounds);
ListView1.Canvas.Brush.Color:=clWindow;
ListView1.Canvas.FillRect(r);
end;
JetAPI (2007-07-18 16:12:00) [23]Попробую... Спасибо!
{RASkov} (2007-07-18 13:08:00) [24]Перемести сей (
ListView1CustomDrawSubItem) код в OnAdvancedCustomDrawSubItem..