Witajcie, piszę, ponieważ napotkałem problem podczas tworzenia nowego komponentu. Klasą bazową jest TBitBtn. Chcę, aby dodatkowo posiadał dwa pola, w których można wybrać bitmapę z dysku w Inspektorze Objektów.
Kod, który już mam pozwala mi na wybranie bitmap z dysku, lecz po ich wybraniu wyskakuje Access Violation.
Oto mój kod:
unit CharButton;
interface
uses
SysUtils,
Classes,
Controls,
StdCtrls,
Buttons,
Graphics;
type
TCharButton = class(TBitBtn)
private
FNormalBmp: TBitmap;
FShiftBmp: TBitmap;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property NormalBmp: TBitmap read FNormalBmp write FNormalBmp;
property ShiftBmp: TBitmap read FShiftBmp write FShiftBmp;
end;
procedure Register;
implementation
constructor TCharButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FNormalBmp := TBitmap.Create;
FShiftBmp := TBitmap.Create;
end;
destructor TCharButton.Destroy;
begin
FreeAndNil(FNormalBmp);
FreeAndNil(FShiftBmp);
inherited Destroy;
end;
procedure Register;
begin
RegisterComponents('PassManager', [TCharButton]);
end;
end.
Naprawdę nie wiem, co robię źle. Wiadome jest, że skoro mają być dwa dodatkowe obiekty typu TBitmap, trzeba je najpierw utworzyć (tu: metoda Create), a później usunąć (tu: metoda Destroy).
Zrobiłem tak, lecz nie wiem już dlaczego to nie działa. Kombinowałem, lecz nie mam pojęcia jak trzeba to zrobić.
Pomuszcie, bardzo proszę.