Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
Delphi 2006 Professional
|
Re: Abgel. graf. Komponente aktualisiert nicht
16. Aug 2005, 09:51
Mist, jetzt sehe ich gerade, daß Robert noch override hinter die Paint-Methoden der abgeleiteten Klassen gepackt hat.
Ich meine aber, daß das bei mir nicht ging. Am Anfang müsste es nämlich so gewesen sein, weil ich vergessen hatte, es rauszunehmen, als ich virtual und abstract hinzugefügt hatte.
Das ging aber, soweit ich mich erinnere nicht, weil die Paint-Methode in der Basisklasse nicht implementiert war. Habe ich sie dann implementiert, krieg ich einen Abstract Error. Klar, kann ja nich ne abstrakte Methode doch noch implementieren.
So, dann hab ich das override und die Implementierung in der Basisklasse rausgenommen. Dann wurde auch brav compiliert. Beim Setzen von CardOpen (ihr erinnert euch, die setter-Methode aus meinem ersten Beitrag ) bekomme ich allerdings wieder einen Abstract Error. Warum?
OK, davon jetzt mal abgesehen. Seit dem Ändern habe ich noch ein ganz anderes Problem bekommen: Die Paint-Methoden der abgeleiteten Klassen funktioniert nicht mehr richtig, seit ich das "inherited Paint" entfernt habe, daß mir ja nur Fehler gebracht hat, seit ich Paint als abstract deklariert hatte. Jetzt wird nämlich nicht neugezeichnet, wenn ich Paint aufrufe, es sei denn, ich rufe in der Paint-Methode zB als erstes ein ShowMessage auf. Kann mir das mal jemand erklären?
//Edit:
Ich pack jetzt einfach mal den relevanten Teil meines bisherigen Quellcodes rein, dann is es vielleicht einfacher, mir das näher zu bringen
Delphi-Quellcode:
unit UCard;
interface
uses
SysUtils, Classes, Controls, Graphics;
type
TCardValue = (CVblue_01, CVblue_02, CVblue_03, CVblue_04, CVblue_05, CVblue_06,
CVblue_07, CVblue_08, CVblue_09, CVblue_10, CVblue_11, CVblue_12,
CVyellow_01, CVyellow_02, CVyellow_03, CVyellow_04, CVyellow_05, CVyellow_06,
CVyellow_07, CVyellow_08, CVyellow_09, CVyellow_10, CVyellow_11, CVyellow_12,
CVgreen_01, CVgreen_02, CVgreen_03, CVgreen_04, CVgreen_05, CVgreen_06,
CVgreen_07, CVgreen_08, CVgreen_09, CVgreen_10, CVgreen_11, CVgreen_12,
CVred_01, CVred_02, CVred_03, CVred_04, CVred_05, CVred_06,
CVred_07, CVred_08, CVred_09, CVred_10, CVred_11, CVred_12);
type
TCustomCard = class(TGraphicControl)
private
{ Private declarations }
fCardOpen : Boolean;
fImageDirectory, fCardImagePath : String;
fCardImage : TBitmap;
const CardFileNames : Array[0..50] of String =
(' blue_01.bmp',' blue_02.bmp',' blue_03.bmp',' blue_04.bmp',' blue_05.bmp',' blue_06.bmp',
' blue_07.bmp',' blue_08.bmp',' blue_09.bmp',' blue_10.bmp',' blue_11.bmp',' blue_12.bmp',
' yellow_01.bmp',' yellow_02.bmp',' yellow_03.bmp',' yellow_04.bmp',' yellow_05.bmp',' yellow_06.bmp',
' yellow_07.bmp',' yellow_08.bmp',' yellow_09.bmp',' yellow_10.bmp',' yellow_11.bmp',' yellow_12.bmp',
' green_01.bmp',' green_02.bmp',' green_03.bmp',' green_04.bmp',' green_05.bmp',' green_06.bmp',
' green_07.bmp',' green_08.bmp',' green_09.bmp',' green_10.bmp',' green_11.bmp',' green_12.bmp',
' red_01.bmp',' red_02.bmp',' red_03.bmp',' red_04.bmp',' red_05.bmp',' red_06.bmp',
' red_07.bmp',' red_08.bmp',' red_09.bmp',' red_10.bmp',' red_11.bmp.bmp',' red_12.bmp',
' joker.bmp',' next_player.bmp',' backside.bmp');
procedure setCardOpen(aCardOpen : Boolean);
protected
{ Protected declarations }
procedure Paint; virtual; abstract;
public
{ Public declarations }
property CardOpen : Boolean read fCardOpen write setCardOpen;
property ImageDirectory : String read fImageDirectory;
constructor Create(aOwner : TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
end;
type
TCard = class(TCustomCard)
private
{ Private declarations }
fCardValue : TCardValue;
protected
{ Protected declarations }
procedure Paint;
public
{ Public declarations }
property CardValue : TCardValue read fCardValue;
procedure Initialize(aImageDirectory : String; aCardValue : TCardValue; aCardOpen : Boolean = false);
published
{ Published declarations }
end;
implementation
{
********************************************************************************
***********************************CUSTOMCARD***********************************
********************************************************************************
}
procedure TCustomCard.setCardOpen(aCardOpen : Boolean);
Begin
if aCardOpen <> fCardOpen Then
Begin
fCardOpen := aCardOpen;
Paint;
End;
End;
constructor TCustomCard.Create(aOwner : TComponent);
Begin
inherited Create(aOwner);
Width := 57;
Height := 86;
fCardImage := TBitmap.Create;
End;
destructor TCustomCard.Destroy;
Begin
FreeAndNil(fCardImage);
inherited Destroy;
End;
{
********************************************************************************
**************************************CARD**************************************
********************************************************************************
}
procedure TCard.Paint;
Begin
fCardImage.LoadFromFile(fCardImagePath);
Canvas.Draw(0,0,fCardImage);
End;
procedure TCard.Initialize(aImageDirectory : String; aCardValue : TCardValue; aCardOpen : Boolean = false);
Begin
If aImageDirectory <> fImageDirectory Then
fImageDirectory := IncludeTrailingBackslash(aImageDIrectory);
If aCardValue <> fCardValue Then
fCardValue := aCardValue;
If aCardOpen <> fCardOpen Then
fCardOpen := aCardOpen;
If fCardOpen Then
fCardImagePath := fImageDirectory + CardFileNames[Integer(fCardValue)]
Else
fCardImagePath := fImageDirectory + CardFileNames[50];
Paint;
End;
Axel Sefranek A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
|