Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

32 bit иконки.   Найти похожие ветки 

 
frost ©   (2004-02-13 06:48) [0]

Как в проекте использовате 32 битные иконки (с альфа каналом), ImageList не позволяет их использовать?


 
ЮЮ ©   (2004-02-13 08:43) [1]

Хранить их в ресурсах, а не в ImageList-е


 
frost ©   (2004-02-13 09:32) [2]

Это понятно но как потом использовать? При вставке в IL он все равно их поганит.


 
ЮЮ ©   (2004-02-13 09:36) [3]

а ImageList тебе зачем?


 
ЮЮ ©   (2004-02-13 09:49) [4]

bm := TBitmap.Create;
bm.PixelFormat := pf16bit;
bm.Height := ilMedia.Height;
bm.Width := ilMedia.Width;
try
... рисую bm
ilMedia.Replace(node.ImageIndex, bm, nil);
// заменяю старый Bitmap на новый
ilMedia.GetBitmap(node.ImageIndex, bm);
// извлекаю, и у него по-прежнему bm.PixelFormat := pf16bit;
// так что это проблема не ImageLista, а редактора в Delphi
finally
bm.Free;


 
DVM ©   (2004-02-13 10:29) [5]

ImageList позволяет использовать 32 бит. иконки. Но для этого на компьютере должна быть xp, подключен манифест, и должна использоваться новая версия CommonControls 6.0 минимум.
При создании ImageList надо посмотреть его стили.


 
vedmed_   (2004-02-13 12:22) [6]

можно создать наследника TCustomImageList и переопределить метод DoDraw


 
Alex_85 ©   (2004-02-13 14:16) [7]

ни фига ты не переопределишь...
32-бит иконки для ImageList`a только в ХР
А чтоб это работало везде можно написать свой :
uses
SysUtils, Classes, ImgList, Controls, Contnrs, Graphics;

type

TImageColectionItem = class(TCollectionItem)
private
FBitMap: TBitMap;
procedure SetBitMap(const Value: TBitMap);
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;

procedure Assign(Source: TPersistent); override;
published
property BitMap : TBitMap read FBitMap write SetBitMap;
end;

TImageColection = class(TCollection)
private
function GetItem(Index: Integer): TImageColectionItem;
procedure SetItem(Index: Integer; const Value: TImageColectionItem);
public
constructor Create;
destructor Destroy; override;

property Items[Index: Integer]: TImageColectionItem read GetItem write SetItem;
published

end;

TImageListAlpha = class(TComponent)
private
FImages : TImageColection;
procedure SetImages(const Value: TImageColection);
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Images : TImageColection read FImages write SetImages;
end;

{ TVIImageListComponentEditor = class(TComponentEditor)
private
public
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
procedure ExecuteVerb(Index: Integer); override;
procedure Edit; override;
end; }

procedure Register;

implementation

uses imagelistalpha_editform;

procedure Register;
begin
RegisterComponents("ActionBarAlpha", [TImageListAlpha]);
// RegisterComponentEditor(TVIImageList, TVIImageListComponentEditor);
end;

{ TVIImageList }

constructor TImageListAlpha.Create(AOwner: TComponent);
begin
inherited;
FImages := TImageColection.Create;
end;

destructor TImageListAlpha.Destroy;
begin
FImages.Free;
inherited;
end;

{ TVIImageListComponentEditor }

{
procedure TVIImageListComponentEditor.Edit;
begin
ExecuteVerb(0);
end;

procedure TVIImageListComponentEditor.ExecuteVerb(Index: Integer);
var
FormVIImageListEditor: TFormVIImageListEditor;
begin
case Index of
0 : begin
FormVIImageListEditor := TFormVIImageListEditor.Create(nil);
try
if FormVIImageListEditor.Execute then
begin

end;
finally
FormVIImageListEditor.Release;
end;
end;
end;
end;

function TVIImageListComponentEditor.GetVerb(Index: Integer): string;
begin
case Index of
0 : Result := "Редактор картинок";
end;
end;

function TVIImageListComponentEditor.GetVerbCount: Integer;
begin
Result := 1;
end;

}
procedure TImageListAlpha.SetImages(const Value: TImageColection);
begin
FImages.Assign(Value);
end;

{ TVIImageColectionItem }

procedure TImageColectionItem.Assign(Source: TPersistent);
begin
if Source is TImageColectionItem then
begin
BitMap.Assign( TImageColectionItem(Source).BitMap );

end;
end;

constructor TImageColectionItem.Create(Collection: TCollection);
begin
inherited;
FBitMap := TBitMap.Create;
FBitMap.PixelFormat := pf32bit;
end;

destructor TImageColectionItem.Destroy;
begin
FBitMap.Free;
inherited;
end;

procedure TImageColectionItem.SetBitMap(const Value: TBitMap);
begin
if Assigned(Value) then
FBitMap.Assign( Value )
else
begin
FBitMap.Width := 0;
FBitMap.Height := 0;
end;
end;

{ TVIImageColection }

constructor TImageColection.Create;
begin
inherited Create(TImageColectionItem);
end;

destructor TImageColection.Destroy;
begin

inherited;
end;

function TImageColection.GetItem(Index: Integer): TImageColectionItem;
begin
Result := inherited GetItem(Index) as TImageColectionItem;
end;

procedure TImageColection.SetItem(Index: Integer;
const Value: TImageColectionItem);
begin
inherited SetItem(Index,Value);
end;
---------------------------------------
Вот TImageListAlpha может что ты хочешь....
Но проблема с ним не смогут работать остальные компоненты, где используется стандартный TImageList.....
Выход такой поправить нужные тебе компоненты(допустим ActionList) для работы с TImageListAlpha
и перекомпилировать vcl
или как варинат унаследоваться от Нужных тебе компонентов(тот же ActionList например) и создать компоненты которые смогут работать с AlphaImageList


 
vedmed_   (2004-02-13 15:27) [8]

2 Alex_85
Вы ошибаетесь, создать собственный ImageList с полупрозрачными изображениями и использовать его со стандартными компонентами вполне возможно.


 
Alexey_85   (2004-02-13 15:39) [9]

Я не спорю что можно!
Я же пишу что надо перекомпилировать vcl!
Проблема в том что есть такая штука как DDB и DIB
DDB -для аппаратной совместимости (глубина цвета в зависимости от аппаратуры)
а DIB - от текущих настроек, в виндах(кроме XP) она дает 24 бита
Вот этом и проблема.
А вообще подробней прочитай про TBitmap



Страницы: 1 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
6-80051
mafia
2003-12-17 14:09
2004.02.25
TWebBrowser


1-79965
_Прохожий
2004-02-13 15:51
2004.02.25
Получение иконки по расширению файла


1-79914
hamster
2004-02-08 16:23
2004.02.25
Мышь


14-80130
Карелин Артем
2004-02-02 15:36
2004.02.25
Как разрешить юзеру в Linux монтировать и размонтировать диски?


1-79775
тихий вовочка
2004-02-10 23:14
2004.02.25
RichEdit и позиционирование курсора