AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Seltsam: Inkompatible Typen: 'TSize' und 'tagSIZE'
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von schöni · begonnen am 21. Okt 2005 · letzter Beitrag vom 22. Okt 2005
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz