TBitBtn i dwa dodatkowe TBitmap

0

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ę.

0

zamieniasz na

    property NormalBmp: TBitmap read FNormalBmp write SetNormalBmp;
    property ShiftBmp:  TBitmap read FShiftBmp  write SetShiftBmp;

stawiasz kursor np na początku SetShiftBmp i wcziskasz SHIFT+CTRL+C a następnie w wygenerowanych metodach wstawiasz

procedure TCharButton.SetNormalBmp(Value: TBitmap);
begin
  FNormalBmp.Assign(Value);
end;

procedure TCharButton.SetShiftBmp(Value: TBitmap);
begin
  FShiftBmp.Assign(Value);
end;

i wypadało by jeszcze oprogramować rysowanie tych bitmap

0

Dziękuję misiekd, o to mi właśnie chodziło. Teraz mi nie pokazuje żadnego błędu.

Jednak zapomniałeś napisać, że metody: SetNormalBmp i SetShiftBmp trzeba zadeklarować w bloku private klasy TCharButton. Tak to nie dało się skompilować.

i wypadało by jeszcze oprogramować rysowanie tych bitmap

nie potrzebuję oprogramowywać ich rysowania. W zależności od pewnej zmiennej będą ładowane do Glyph.

Dzięki wielkie, pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1