Использование TImageIndex
От: AlexEagle Украина http://www.vik.oil
Дата: 09.06.05 15:43
Оценка:
Создал компонент, добавил два свойства:

— Images: TCustomImageList
— ImageIndex: TImageIndex

Все даже работает в рантайме как надо. Но вот в дизайнере хотелось бы чтобы редактором для ImageIndex выступал список изображений, как в TMenuItem и проч... А сейчас там только пустой список Хееелллпппп
Re: Использование TImageIndex
От: alive Россия  
Дата: 10.06.05 04:19
Оценка:
Здравствуйте, AlexEagle, Вы писали:

AE>Создал компонент, добавил два свойства:


AE>- Images: TCustomImageList

AE>- ImageIndex: TImageIndex

AE>Все даже работает в рантайме как надо. Но вот в дизайнере хотелось бы чтобы редактором для ImageIndex выступал список изображений, как в TMenuItem и проч... А сейчас там только пустой список Хееелллпппп


Я правда сам не пробовал, но скорее всего нужно реализовать в редакторе интерфейс ICustomPropertyListDrawing.
...<< RSDN@Home 1.1.4 beta 7 rev. 463>>
...Foobar {Чайф — [Оранжевое настроение 2] 19_Эта игра}
Keep yourself alive
Re[2]: Использование TImageIndex
От: AlexEagle Украина http://www.vik.oil
Дата: 10.06.05 08:36
Оценка:
Здравствуйте, alive, Вы писали:

A>Я правда сам не пробовал, но скорее всего нужно реализовать в редакторе интерфейс ICustomPropertyListDrawing.


тут поиск тоже молчит
Re: Использование TImageIndex
От: vlad_gri  
Дата: 10.06.05 08:59
Оценка:
Здравствуйте, AlexEagle, Вы писали:

AE>Создал компонент, добавил два свойства:


AE>- Images: TCustomImageList

AE>- ImageIndex: TImageIndex

AE>Все даже работает в рантайме как надо. Но вот в дизайнере хотелось бы чтобы редактором для ImageIndex выступал список изображений, как в TMenuItem и проч... А сейчас там только пустой список Хееелллпппп


Возми Toolbar2000 с www.jrsoftware.org
Открой файл TB2Reg.pas
Смотри реализацию класса TTBImageIndexPropertyEditor.
Re[3]: Использование TImageIndex
От: alive Россия  
Дата: 10.06.05 09:58
Оценка:
Здравствуйте, AlexEagle, Вы писали:

A>>Я правда сам не пробовал, но скорее всего нужно реализовать в редакторе интерфейс ICustomPropertyListDrawing.


AE>тут поиск тоже молчит


Это я что-то не то ляпнул По идее должно отрисовываться. Посмотри как сделано у TToolBar.
...<< RSDN@Home 1.1.4 beta 7 rev. 463>>
...Foobar {LittleLies}
Keep yourself alive
Re[4]: Использование TImageIndex
От: AlexEagle Украина http://www.vik.oil
Дата: 10.06.05 10:02
Оценка:
Здравствуйте, alive, Вы писали:

A>Здравствуйте, AlexEagle, Вы писали:


A>>>Я правда сам не пробовал, но скорее всего нужно реализовать в редакторе интерфейс ICustomPropertyListDrawing.


AE>>тут поиск тоже молчит


A>Это я что-то не то ляпнул По идее должно отрисовываться. Посмотри как сделано у TToolBar.


перед тем как сюда запостить я попытался посмотреть и у тулбара и у меню
Re[2]: Использование TImageIndex
От: AlexEagle Украина http://www.vik.oil
Дата: 10.06.05 10:15
Оценка: :)
Здравствуйте, vlad_gri, Вы писали:

_>Смотри реализацию класса TTBImageIndexPropertyEditor.


Первые строчки уже впечатляют

{ Unfortunately TComponentImageIndexPropertyEditor seems to be gone in
  Delphi 6, so we have to use our own image index property editor class }
Re[3]: Использование TImageIndex
От: vlad_gri  
Дата: 10.06.05 10:37
Оценка:
Здравствуйте, AlexEagle, Вы писали:

AE>Здравствуйте, vlad_gri, Вы писали:


_>>Смотри реализацию класса TTBImageIndexPropertyEditor.


AE>Первые строчки уже впечатляют


AE>
AE>{ Unfortunately TComponentImageIndexPropertyEditor seems to be gone in
AE>  Delphi 6, so we have to use our own image index property editor class } 
AE>


Что-же там такого впечатлительного.
Jordan жалуется что не смог найти в Delphi 6
стандартного TComponentImageIndexPropertyEditor и ему пришлось использовать свой.
Re[4]: Использование TImageIndex
От: AlexEagle Украина http://www.vik.oil
Дата: 10.06.05 10:49
Оценка: 4 (1)
Здравствуйте, vlad_gri, Вы писали:

_>Что-же там такого впечатлительного.

_>Jordan жалуется что не смог найти в Delphi 6
_>стандартного TComponentImageIndexPropertyEditor и ему пришлось использовать свой.

Об этом и говорю — наткнулся на нужный след... Но лыжи ( надеюсь ) опять стали... Вот наваял:


unit ExPropEditors;

interface

uses classes, types, DesignIntf, DesignEditors, VCLEditors, ImgList, Graphics;

type

  TExImageIndexPropertyEditor = class(TIntegerProperty, ICustomPropertyListDrawing )
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure GetValues(Proc: TGetStrProc); override;
    function GetImageListAt(Index: Integer): TCustomImageList; virtual;

    // ICustomPropertyListDrawing
    procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;
      var AHeight: Integer);
    procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
      var AWidth: Integer);
    procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
      const ARect: TRect; ASelected: Boolean);
  end;

  TExButtonImageIndexPropertyEditor = class(TExImageIndexPropertyEditor)
  public
    function GetImageListAt(Index: Integer): TCustomImageList; override;
  end;

implementation

uses SysUtils, ExButton;

function TExImageIndexPropertyEditor.GetAttributes: TPropertyAttributes;
begin
  Result := [paMultiSelect, paValueList, paRevertable];
end;

function TExImageIndexPropertyEditor.GetImageListAt(Index: Integer): TCustomImageList;
begin
  Result := nil;
end;

procedure TExImageIndexPropertyEditor.GetValues(Proc: TGetStrProc);
var
  ImgList: TCustomImageList;
  I: Integer;
begin
  ImgList := GetImageListAt(0);
  if Assigned(ImgList) then
    for I := 0 to ImgList.Count-1 do
      Proc(IntToStr(I));
end;

procedure TExImageIndexPropertyEditor.ListDrawValue(const Value: string;
  ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
var
  ImgList: TCustomImageList;
  X: Integer;
begin
  ImgList := GetImageListAt(0);
  ACanvas.FillRect(ARect);
  X := ARect.Left + 2;
  if Assigned(ImgList) then begin
    ImgList.Draw(ACanvas, X, ARect.Top + 2, StrToInt(Value));
    Inc(X, ImgList.Width);
  end;
  ACanvas.TextOut(X + 3, ARect.Top + 1, Value);
end;

procedure TExImageIndexPropertyEditor.ListMeasureHeight(const Value: string;
  ACanvas: TCanvas; var AHeight: Integer);
var
  ImgList: TCustomImageList;
begin
  ImgList := GetImageListAt(0);
  AHeight := ACanvas.TextHeight(Value) + 2;
  if Assigned(ImgList) and (ImgList.Height + 4 > AHeight) then
    AHeight := ImgList.Height + 4;
end;

procedure TExImageIndexPropertyEditor.ListMeasureWidth(const Value: string;
  ACanvas: TCanvas; var AWidth: Integer);
var
  ImgList: TCustomImageList;
begin
  ImgList := GetImageListAt(0);
  AWidth := ACanvas.TextWidth(Value) + 4;
  if Assigned(ImgList) then
    Inc(AWidth, ImgList.Width);
end;

function TExButtonImageIndexPropertyEditor.GetImageListAt(Index: Integer): TCustomImageList;
var
  C: TPersistent;
  Item: TExButton;
begin
  Result := nil;
  { ? I'm guessing that the Index parameter is a component index (one that
    would be passed to the GetComponent function). }
  C := GetComponent(Index);
  if C is TExButton then
    result := TExButton(C).Images;
end;

end.


вот в своем модуле зарегистрил:


  RegisterComponents('ExGUI', [TExButton]);
  RegisterPropertyEditor( TypeInfo(TImageIndex), TExButton, 'ImageIndex',
    TExImageIndexPropertyEditor );



вот названия свойств

    property Images: TCustomImageList read FImages write SetImages;
    property ImageIndex: TImageIndex read FImageIndex write SetImageIndex default -1;


Список все равно пустой
Re[5]: Использование TImageIndex
От: vlad_gri  
Дата: 10.06.05 10:58
Оценка:
Здравствуйте, AlexEagle, Вы писали:

AE>Список все равно пустой


Смотри
GetImageListAt
Пример реализации в классе TTBItemImageIndexPropertyEditor в этом же файле.
Re[6]: Использование TImageIndex
От: AlexEagle Украина http://www.vik.oil
Дата: 10.06.05 11:39
Оценка:
Здравствуйте, vlad_gri, Вы писали:

_>Смотри

_>GetImageListAt
_>Пример реализации в классе TTBItemImageIndexPropertyEditor в этом же файле.

Дык вот он, немного переделанный...

function TExButtonImageIndexPropertyEditor.GetImageListAt(Index: Integer): TCustomImageList;
var
  C: TPersistent;
  Item: TExButton;
begin
  Result := nil;
  { ? I'm guessing that the Index parameter is a component index (one that
    would be passed to the GetComponent function). }
  C := GetComponent(Index);
  if C is TExButton then
    result := TExButton(C).Images;
end;
Re[7]: Использование TImageIndex
От: vlad_gri  
Дата: 10.06.05 11:46
Оценка: 12 (1)
Здравствуйте, AlexEagle, Вы писали:

AE>Дык вот он, немного переделанный...


Так его и используй для регистрации
  RegisterComponents('ExGUI', [TExButton]);
  RegisterPropertyEditor( TypeInfo(TImageIndex), TExButton, 'ImageIndex',
    TExButtonImageIndexPropertyEditor );
Re[8]: Использование TImageIndex
От: AlexEagle Украина http://www.vik.oil
Дата: 10.06.05 11:59
Оценка:
Здравствуйте, vlad_gri, Вы писали:

_>Здравствуйте, AlexEagle, Вы писали:


AE>>Дык вот он, немного переделанный...


_>Так его и используй для регистрации

_>
_>  RegisterComponents('ExGUI', [TExButton]);
_>  RegisterPropertyEditor( TypeInfo(TImageIndex), TExButton, 'ImageIndex',
_>    TExButtonImageIndexPropertyEditor );
_>



Блин... у меня всегда так... "плыли, плыли, на берегу утонули"
Спасибо!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.