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
Antwort Antwort
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
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

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

  Alt 21. Okt 2005, 21:06
Hi.

Prüfe doch mal nach, welchen Typ gfxbase.Size() liefert.

Grüße vom marabu
  Mit Zitat antworten Zitat
schöni

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

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

  Alt 21. Okt 2005, 21:32
Hallo Marabu!

Die Funktionen in GfxBase liefern TSize zurück.

Dise Funktionen habe ich direkt sus der Unit gfxBase hierher kopiert:

Zitat:
// 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;
Gibt es eine Lösung, ohne die fragliche Methode das Fenster erst mal angezeigt zu kriegen, auch ohne SetMinMaxClientSize(TSize,TSize)??

schöni
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

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

  Alt 22. Okt 2005, 15:33
Hallo schöni,

vertausche mal die Reihenfolge der units Windows und Gfxbase in deiner uses-Klausel.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

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

  Alt 22. Okt 2005, 15:36
um sicherzustellen das, das richtige TSize verwendet wird kannst du auch den unitnamen vor TSize setzen (unitname.TSize).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
profmaster

Registriert seit: 9. Feb 2005
Ort: Frakfurt/Oder
21 Beiträge
 
Delphi 7 Professional
 
#6

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

  Alt 22. Okt 2005, 17:41
Hallo!

Wenn alle vor mir gegebenen Tipps fehlschlagen sollten, was ich nicht glaube, kannst Du noch folgendes machen:

Delphi-Quellcode:
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
Na, dann hoffe ich mal, das es dann klappt!

profmaster
  Mit Zitat antworten Zitat
schöni

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

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

  Alt 22. Okt 2005, 20:53
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
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz