Hallo!
Ich erhalte in der folgenden Quelltextzeile eine ominöse, unerklärliche Fehlermeldung:
TGDIWindow(Window).SetMinMaxClientSize( TextSize, gfxBase.Size(0, 0) );
Ich erhalte folgende Compilermeldung:
[Fehler] helloworld.dpr(54): Inkompatible Typen: 'TSize' und 'tagSIZE'
Hier ist die Definition der Methode in der Klasse TGDIWindow.
Delphi-Quellcode:
TGDIWindow = class(TGfxWindow) //aus Freepascal nach Delphi portiert
.... weitere Methoden ....
procedure SetSize(const ASize: TSize); override;
procedure SetMinMaxSize(const AMinSize, AMaxSize: TSize); override;
procedure SetClientSize(const ASize: TSize); override;
//--- Das hier ist die fragliche Methode ----------------------------------
procedure SetMinMaxClientSize(const AMinSize, AMaxSize: TSize); override;
//-------------------------------------------------------------------------
// Hier sind doch beide Parameter vom Typ TSize
//-------------------------------------------------------------------------
.... weitere Methoden ....
//Und hier der Quelltextteil in der .dpr Datei
type
TMainWindow = class
procedure Paint(Sender: TObject; const Rect: TRect);
private
Display: TDefDisplay;
Window: TGfxWindow;
TextSize: TSize;
Font: TGfxFont;
public
constructor Create(ADisplay: TDefDisplay);
destructor Destroy; override;
end;
//-------------------------------------------------------------------------------------------
// Die Funktion Size, die den zweiten Parameter berechnet ist eine überladene Funktion in den
// folgenden zwei Versionen.
//----- Diese hier wird verwendet -----------------------
function Size(AWidth, AHeight: Integer): TSize; overload; //auch TSize!!!!
//-------------------------------------------------------
function Size(ARect: TRect): TSize; overload;
constructor TMainWindow.Create(ADisplay: TDefDisplay);
begin
inherited Create;
Display := ADisplay;
Font := Display.CreateFont('-*-' + Display.GetDefaultFontName(fcSerif) +
'-*-r-normal--36-*-*-*-*-*-iso8859-1');
Window := ADisplay.DefaultScreen.CreateWindow(nil, wtWindow);
Window.Title := 'fpGFX Hello World example';
Window.OnPaint := Paint;
Window.Canvas.SetFont(Font);
TextSize.cx := Window.Canvas.TextWidth(HelloWorldString);
TextSize.cy := Window.Canvas.FontCellHeight;
Window.SetClientSize( gfxBase.Size( (TextSize.cx * 3) div 2, TextSize.cy * 2) );
//Hier kommt die Fehlermeldung. Wenn ich die Zeile auskommentiere, klappt die
//Übersetzung, aber es wird NICHTS angezeigt ---> WARUM NICHT?????
TGDIWindow(Window).SetMinMaxClientSize( TextSize, Size(0, 0) );
Window.Show;
end;
Hier noch die Definition der fraglichen Methode:
Delphi-Quellcode:
procedure TGDIWindow.SetMinMaxClientSize(const AMinSize, AMaxSize: TSize);
var
Rect: Windows.TRect;
begin
Rect.Left := 0;
Rect.Top := 0;
Rect.Right := AMinSize.cx;
Rect.Bottom := AMinSize.cy;
Windows.AdjustWindowRectEx(Rect, FWindowStyle, False, FWindowStyleEx);
if AMinSize.cx > 0 then
FMinSize.cx := Rect.Right - Rect.Left
else
FMinSize.cx := 0;
if AMinSize.cy > 0 then
FMinSize.cy := Rect.Bottom - Rect.Top
else
FMinSize.cy := 0;
Rect.Left := 0;
Rect.Top := 0;
Rect.Right := AMaxSize.cx;
Rect.Bottom := AMaxSize.cy;
Windows.AdjustWindowRectEx(Rect, FWindowStyle, False, FWindowStyleEx);
if AMaxSize.cx > 0 then
FMaxSize.cx := Rect.Right - Rect.Left
else
FMaxSize.cx := 0;
if AMaxSize.cy > 0 then
FMaxSize.cy := Rect.Bottom - Rect.Top
else
FMaxSize.cy := 0;
UpdateWindowButtons;
end;
Wie kommt der Compiler auf tagSize. Die fragliche Methode ist in der Vorgängerklasse exakt genau so definiert, wie hier in TGDIWindow, was die zu übergebenden Parameter betrifft. Wo kommt da der Typ tagSize her, den mir der Compiler hier unterjubelt? Was läuft hier insgsamt falsch. Wenn ich die Methode auskommentiere klappt die Übersetzung. ABER ich sehe dann kein Fenster. Liegt das an der fehlenden SetMinMaxClientSize???
Wer kann mir helfen?
schöni
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.