Einzelnen Beitrag anzeigen

schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#1

Seltsam: Inkompatible Typen: 'TSize' und 'tagSIZE'

  Alt 21. Okt 2005, 20:48
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.
  Mit Zitat antworten Zitat