Мне нужно добавить 2 новых свойства в TSpeedButton. Хотя свойства правильно отображаются в инспекторе объектов и его значения, хранящиеся в файле DFM, метод «create» во время выполнения сохраняет свойства «nil».Как добавить собственность в TSpeedButton (Delphi)
Что не так?
Вот заказной код компонента:
unit ulbSpeedButton;
interface
uses
Winapi.Windows, Winapi.Messages, System.Classes, Vcl.Controls, Vcl.Forms, Vcl.Graphics,
Vcl.StdCtrls, Vcl.ExtCtrls, Winapi.CommCtrl, Vcl.ImgList,
Vcl.Themes, System.Generics.Collections, Vcl.Buttons;
type
tlbSpeedButton = class(TSpeedButton)
private
fImageList : TImageList;
fImageIndex : Integer;
function GetImageIndex:Integer;
function GetImageList:TImageList;
procedure SetImageIndex(aIndex:Integer);
procedure SetImageList(aImageList:TImageList);
protected
public
constructor Create(AOwner: TComponent); override;
published
property ImgIndex : Integer read fImageIndex write SetImageIndex;
property ImgList : TImageList read GetImageList write SetImageList;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Leo Bruno', [tlbSpeedButton]);
end;
{ tlbSpeedButton }
constructor tlbSpeedButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if ((Assigned(fImageList)) and (fImageList.Count > 0)) then
fImageList.GetBitmap(fImageIndex,Self.Glyph);
end;
function tlbSpeedButton.GetImageIndex: Integer;
begin
Result := fImageIndex;
end;
function tlbSpeedButton.GetImageList: TImageList;
begin
Result := fImageList;
end;
procedure tlbSpeedButton.SetImageIndex(aIndex: Integer);
begin
if fImageIndex <> aIndex then
begin
fImageIndex := aIndex;
Invalidate;
end;
end;
procedure tlbSpeedButton.SetImageList(aImageList: TImageList);
begin
if fImageList <> aImageList then
begin
fImageList := aImageList;
Invalidate;
end;
end;
end.
Очень симпатичный man.Worked как шарм. Только одно, что я не мог исправить. Во время разработки, если я назначаю imageindex и imagelist, глиф обновляется. Но изменение уже заданного imageindex в режиме разработки не обновляет глиф. Большое вам спасибо за ваше время и терпение. –
@LeoBruno: После того, как были установлены размеры 'Glyph',' GetBitmap() 'будет просто рисовать новые изображения поверх существующего растрового изображения. Я ожидал, что 'GetBitmap()' запускает событие 'OnChange' глифа, поэтому' TSpeedButton' будет автоматически '' Определять() 'сам. Но, по-видимому, это не так, если только 'GetBitmap()' не должен изменять размер растрового изображения (который он делает впервые). Поэтому просто запустите 'UpdateGlyph()' call 'Invalidate()', чтобы заставить его. –