Hallo,
dies ist eine zweite Frage zu einer Komponente, mit der ich mich gerade beschäftige. Ich hoffe, zwei Fragen zu einer Komponente in zwei Threads zu stellen ist legitim.
Wie schon in dem zuerst erstellten Thread erwähnt, möchte ich eine Komponente entwickeln, die eine Spielkarte aus einem Kartenspiel simuliert. Diese hat eine Eigenschaft Wert, über die der Kartenwert eingestellt wird und dementsprechend wird dann das Bild der Karte auf die Canvas-Oberfläche meiner Komponente (abgel. von TGraphicControl) gezeichnet.
Auf meiner Festplatte habe ich eine Datei "Karten.bmp" (beinhaltet 32 Karten, die in 4 Zeilen und 8 Spalten nebeneinander gekachelt sind) die in der Create-Methode meiner Komponente in ein TBitmap-Objekt (var bmp: TBitmap) geladen wird. In der Paint-Methode der Komponente wird nun, abhängig vom eingestellten Kartenwert, ein ganz bestimmter Teil des bmp-Objekts auf die Komponenten-Oberfläche gezeichnet.
Ich hoffe mit Quellcode-Ausschnitten wird erkenntlich, wich ich's meine:
Delphi-Quellcode:
type
TKartenwert = 0..32;
TSpielkarte = class(TGraphicControl)
private
{ Private-Deklarationen }
bmp: TBitmap;
value: TKartenwert;
constructor Create(AOwner : TComponent); override;
procedure Paint; override;
...
constructor TSpielkarte.Create(AOwner : TComponent);
begin
inherited;
bmp := TBitmap.Create;
bmp.LoadFromFile('C:\Karten.bmp');
bmp.Transparent := True;
...
procedure TSpielkarte.Paint;
var i: Byte;
x,y: Word;
begin
y := ((value-1) div 8) * Height;
x := ((value-1) mod 8) * Width;
Canvas.CopyRect(Rect(0, 0, Width, Height), bmp.Canvas,
Rect(x, y, x + Width, y + Height));
...
Allerdings sehe ich ein Problem darin, dass bei jeder Instanz meiner Komponente immer die "Karten.bmp" geladen wird, was sich sicherlich nicht vorteilhaft auf den Speicherbedarf und Zeitbedarf der benutzenden Programme auswirkt.
Gibt es irgendeine Möglichkeit, dass die Instanzen überprüfen können, ob das Kartenbild schon eingelesen wurde und wenn ja, auch darauf zugreifen können. (bei Objekten gibts doch sowas wie globale Klassenvariablen?). Oder händelt das Delphi von alleine?
Viele Grüsse
Markus