![]() |
Seltsam: Inkompatible Typen: 'TSize' und 'tagSIZE'
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:
Hier noch die Definition der fraglichen Methode:
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;
Delphi-Quellcode:
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???
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; Wer kann mir helfen? schöni |
Re: Seltsam: Inkompatible Typen: 'TSize' und 'tagSIZE'
Hi.
Prüfe doch mal nach, welchen Typ gfxbase.Size() liefert. Grüße vom marabu |
Re: Seltsam: Inkompatible Typen: 'TSize' und 'tagSIZE'
Hallo Marabu!
Die Funktionen in GfxBase liefern TSize zurück. Dise Funktionen habe ich direkt sus der Unit gfxBase hierher kopiert: Zitat:
schöni |
Re: Seltsam: Inkompatible Typen: 'TSize' und 'tagSIZE'
Hallo schöni,
vertausche mal die Reihenfolge der units Windows und Gfxbase in deiner uses-Klausel. Grüße vom marabu |
Re: Seltsam: Inkompatible Typen: 'TSize' und 'tagSIZE'
um sicherzustellen das, das richtige TSize verwendet wird kannst du auch den unitnamen vor TSize setzen (unitname.TSize).
|
Re: Seltsam: Inkompatible Typen: 'TSize' und 'tagSIZE'
Hallo!
Wenn alle vor mir gegebenen Tipps fehlschlagen sollten, was ich nicht glaube, kannst Du noch folgendes machen:
Delphi-Quellcode:
Na, dann hoffe ich mal, das es dann klappt!
constructor TMainWindow.Create(ADisplay: TDefDisplay);
//---------------------------------------------------------------- var ATSizeVar: TSize; //Eine Variable vom richtigen Typ definieren //---------------------------------------------------------------- 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) ); ATSizeVar.cx := 0; //--- Diese Variable mit dem zu --- ATSizeVar.cy := 0; //--- übergebenden Wert belegen --- //Und dann statt Size(0,0) gleich ATSizeVar einsetzen. GGF mit Typumwandlung! TGDIWindow(Window).SetMinMaxClientSize( gfxBast.TSize(TextSize), TSize(ATSizeVar) ); | Window.Show; |--- und hier end; --- einsetzen profmaster |
Re: Seltsam: Inkompatible Typen: 'TSize' und 'tagSIZE'
Hallo!
Danke Euch allen. Mit UnitName vor TSize und zusätzlich dem Tipp von Profmaster hab ich das Problem lösen können. schöni |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 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