Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TListView работа с иконками


Автор: Ak47black 19.1.2008, 15:15
Здравствуйте.
Подскажите пожалуйста как тут можно исправить.
Хочу в real-time менять размер иконок. Но при смене у меня выходит, какбы одна лежит на другой. 
Как сделать правильно?
Сделал тестовый код, который чётко показывает проблему

Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    Button2: TButton;
    procedure ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  Rect: TRect;
begin
  Rect:= Item.DisplayRect(drIcon);
  case Item.Index of
    0: ListView1.Canvas.Brush.Color:= clBlack;
    1: ListView1.Canvas.Brush.Color:= clRed;
    2: ListView1.Canvas.Brush.Color:= clLime;
  end;
  ListView1.Canvas.FillRect(Rect);
  DefaultDraw:= False;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ImgList: TImageList;
begin
  ImgList:= TImageList.Create(Self);
  with ImgList do
  begin
    Width:= 60;
    Height:= 60;
  end;
  ListView1.LargeImages:= ImgList;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  ImgList: TImageList;
begin
  ImgList:= TImageList.Create(Self);
  with ImgList do
  begin
    Width:= 200;
    Height:= 200;
  end;
  ListView1.LargeImages:= ImgList;
end;

end.


Автор: ivan219 19.1.2008, 18:06
Гдето так:
Код

.
.
var
  Form1: TForm1;
  Flag: Boolean;

.
.
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  Rect: TRect;
begin
.
.
       end;
  end;
  if Flag then OffsetRect(Rect, ListView1.LargeImages.Width * Item.Index, 0);
  ListView1.Canvas.FillRect(Rect);
  DefaultDraw:= False;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ImgList: TImageList;
begin
  Flag := True;
.
.
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  ImgList: TImageList;
begin
  Flag := True;
.
.
end;

end.

Автор: Ak47black 19.1.2008, 18:22
Не этото неособо хороший вариант.

Автор: ivan219 19.1.2008, 21:47
Цитата(Ak47black @  19.1.2008,  18:22 Найти цитируемый пост)
Не этото неособо хороший вариант.

Интересно почему???

И какже выглядит интересный вареант???

Автор: Ak47black 20.1.2008, 15:47
Код

  TListView.ViewStyle:= vsSmallIcon;
  TListView.ViewStyle:= vsIcon;

Вот так интересный выглядит.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)