Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi property Tbitmap (https://www.delphipraxis.net/9534-property-tbitmap.html)

Sebastian Nintemann 28. Sep 2003 18:14


property Tbitmap
 
Hallo!

Also...

Ich hab eine Klasse (keine Komponente, habs trotzdem mal hier reingestellt weils denk ich das gleiche Problem bei einer Komponente gibt), die eine Eigenschaft Image vom Typ TBitmap hat. Also etwa so:

Delphi-Quellcode:
type TTest = class(TObject)
  private
    FImage: TBitmap;
    procedure SetImage(const ABitmap: TBitmap);
  public
    constructor Create;
    destructor Destroy; override;
    property Image: TBitmap read FImage write SetImage;
end;

implementation

constructor TTest.Create;
begin
  inherited Create;
  FImage := TBitmap.Create;
end;

destructor TTest.Destroy;
begin
  FreeAndNil(FImage);
  inherited Destroy;
end;

procedure TTest.SetImage(const ABitmap: TBitmap);
begin
  FImage.Assign(ABitmap);
  ShowMessage('ausgelöst');
end;
Wie zu sehen ist, hab ich zu Testzwecken in der SetImage-Methode ein ShowMessage eingebaut. Weise ich nun ein Bild mit
Delphi-Quellcode:
Test.Image := Bitmap;
zu, so wird mir die auch brav angezeigt.
Wenn ich aber folgendes mache
Delphi-Quellcode:
Test.Image.LoadFromFile('C:\test.bmp');
dann wird Image verändert, ohne dass ich Kontrolle darüber habe, SetImage wird nicht aufgerufen. Wichtig wird das, wenn ich später auf bestimmte Sachen beim Zuweisen des Bildes achten muss.
Jemand ne Idee wie ich in solchen Fällen die Kontrolle behalten/ das Problem umgehen kann?

Gruß, Sebastian

Wormid 28. Sep 2003 19:06

Re: property Tbitmap
 
Meine Idee zu dem Thema:

Delphi-Quellcode:
type TTest = class(TObject)
  private
    FImage: TBitmap;
  protected
    procedure BitmapChanged(Sender: TObject);
    procedure SetImage(const ABitmap: TBitmap);
  public
    constructor Create;
    destructor Destroy; override;
    property Image: TBitmap read FImage write SetImage;
  end;

var
  Form1: TForm1;
  Test: TTest;

implementation

{$R *.dfm}

constructor TTest.Create;
begin
  inherited Create;
  FImage := TBitmap.Create;
  FImage.OnChange := BitmapChanged;
end;

destructor TTest.Destroy;
begin
  FreeAndNil(FImage);
  inherited Destroy;
end;

procedure TTest.BitmapChanged(Sender: TObject);
begin
  ShowMessage('ausgelöst');
end;

procedure TTest.SetImage(const ABitmap: TBitmap);
begin
  FImage.Assign(ABitmap);
  ShowMessage('ausgelöst');
end;
Damit bekommt man dann mit, ob sich was an FImage geändert hat. Ne andere Idee hätte ich sonst auch erstmal nicht.

Gruß

Wormid

Sebastian Nintemann 4. Okt 2003 15:42

Re: property Tbitmap
 
Hallo Wormid!

Danke für die Idee, ich habs jetzt erstmal so gemacht!
Ich dachte nur, die write Methode wäre dazu da, Kontrolle über den zu setzenden Wert zu haben. Aber was solls, so gehts ja auch :mrgreen:

Gruß, Sebastian


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz