Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.029 c