Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.03 c
1-79693
jen
2004-02-14 04:20
2004.02.25
Можно ли в ячейке StringGrid изменить цвет части текста


1-79881
saska
2004-02-10 12:36
2004.02.25
Ошибка при инсталяции своего компонента:


1-79988
AGN
2004-02-13 09:52
2004.02.25
Ctrl+F


1-79719
alextov
2004-02-12 16:25
2004.02.25
Не получается сделать форму шире экрана


3-79613
Pul
2004-01-30 17:56
2004.02.25
Список машин, работающих с базой Interbase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский