Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TImageList & TImage [D6]


Владислав ©   (2002-11-28 19:06:00) 

Приветствую вас, мастера!

Подскажите пожалуйста, кто-нибудь из вас встречал компонент - подобие TImage, который отличается от оригинала (TImage) тем, что имеет возможность работы с компонентом TImageList? Если да, то подскажите пожалуйста, где можно найти такой компонент.
Поясню проблему.
В моей программе в разных формах могут использоваться одни и те же картинки, которые я отображаю с помощью компонента TImage. Естественно, это несколько увеличивает размер программы, да и неудобно это. Если возникла необходимость изменить какое-нибудь изображение, то нужно пройтись по всем формам приложения и загрузить другое изображение. Для решения этой проблемы хотелось бы найти компонент, который загружает изображение из компонента TImageList по индексу.


Набережных С.   (2002-11-30 16:56:00) [1]

>Дмитрий К.К. © (30.11.02 11:48)
Дык, ногами, батенька! В основном:)
>Владислав © (30.11.02 16:01)
На том свете угольками рассчитаемся:)


Владислав   (2002-11-30 16:01:00) [2]

Круто! Я попробую! Сколько стоит Ваша работа? Я спрошу у начальства, может оплатят? В design time действительно работать будет?


Дмитрий К.К.   (2002-11-30 11:48:00) [3]

И как ето вы, батенька, без звания Мастера до сих пор ходите? ;)


Набережных С.   (2002-11-30 11:01:00) [4]

Скучно мне:)

interface

uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, ExtCtrls, ImgList;

type
TPaintBoxEx = class(TPaintBox)
private
FImgList: TImageList;
FImageIndex: integer;
FChangeLink: TChangeLink;
procedure SetImageList(const Value: TImageList);
procedure SetImageIndex(const Value: integer);
protected
procedure Paint; override;
procedure ImagesChange(Sender: TObject); dynamic;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property ImageList: TImageList read FImgList write SetImageList;
property ImageIndex: integer read FImageIndex write SetImageIndex default -1;
end;

procedure Register;

implementation

{ TPaintBoxEx }

constructor TPaintBoxEx.Create(AOwner: TComponent);
begin
inherited;
FImageIndex:=-1;
FChangeLink:=TChangeLink.Create;
FChangeLink.OnChange:=ImagesChange;
end;

destructor TPaintBoxEx.Destroy;
begin
ImageList:=nil;
FChangeLink.Free;
inherited;
end;

procedure TPaintBoxEx.ImagesChange(Sender: TObject);
begin
if FImgList = nil then FImageIndex:=-1
else if FImageIndex >= FImgList.Count then
ImageIndex:=FImgList.Count-1;
Invalidate;
end;

procedure TPaintBoxEx.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;
if
(AComponent = FImgList) and
(Operation = opRemove)
then
ImageList:=nil;
end;

procedure TPaintBoxEx.Paint;
begin
if
(FImgList <> nil) and
(FImageIndex > -1) and
(FImageIndex < FImgList.Count)
then
FImgList.draw(Canvas,0,0,FImageIndex)
else
inherited;
end;

procedure TPaintBoxEx.SetImageIndex(const Value: integer);
begin
if Value <> FImageIndex then
begin
if
((FImgList = nil) or
(Value < 0) or
(Value >= FImgList.Count)) and
not (csLoading in ComponentState)
then
FImageIndex:=-1
else
FImageIndex := Value;
Invalidate;
end;
end;

procedure TPaintBoxEx.SetImageList(const Value: TImageList);
begin
if Value <> FImgList then
begin
if FImgList <> nil then FImgList.UnRegisterChanges(FChangeLink);
FImgList := Value;
if FImgList <> nil then FImgList.RegisterChanges(FChangeLink)
else FImageIndex:=-1;
ImagesChange(FImgList);
end;
end;

procedure Register;
begin
RegisterComponents("Samples", [TPaintBoxEx]);
end;

end.


Дмитрий К.К.   (2002-11-30 08:55:00) [5]

По-моему, у Артема Бермана встречал такой... но не ручаюсь...


Song   (2002-11-29 19:50:00) [6]

А проблема-то в чём? Неужели сам TImageList не умеет рисовать картинки без того, чтобы их помещать в TImage?


Владислав   (2002-11-29 19:15:00) [7]

Ну ясно, в общем. Нет такого компонента :(


Владислав   (2002-11-29 18:34:00) [8]

Может кто-то еще не видел моего вопроса?


Владислав   (2002-11-29 14:00:00) [9]

Мастера?

Встречал кто-нибудь подобное?


Владислав   (2002-11-29 13:42:00) [10]

Спасибо за ответ.

Может я не точно вопрос задал...

Как сделать это в RunTime я знаю.
Я хотел бы получить тот же результат и в DesignTime.


Сатир   (2002-11-28 19:35:00) [11]

ImageList1.GetBitmap(0,Image1.Picture.Bitmap);

This example assigns a bitmap contained in an ImageList to an Image component"s Picture"s Bitmap property and displays the bitmap.
(с) встроенная поМОЩЬ Delphi 6


Наверх

Титульная страница Поиск, карта сайта Написать письмо