Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inkompatible Typen TRect ??? Was ist da passiert ? (https://www.delphipraxis.net/34970-inkompatible-typen-trect-ist-da-passiert.html)

stoxx 30. Nov 2004 21:30


Inkompatible Typen TRect ??? Was ist da passiert ?
 
bei folgendem Beispiel unter D7 meldet er mit Inkompatible Typen ?!? :gruebel:
Seit wann geht das nicht mehr ? .. Ich bin mir 100 prozentig sicher, dass ich so schon programmiert habe.
Ist da nur ein Compilerschalter bei mir "verruscht" ??

Code:
procedure TForm1.Button1Click(Sender: TObject);
var a, b : TRect;
begin
 if a = b then beep; ->  [Fehler] Unit1.pas(30): Inkompatible Typen
end;

Robert_G 30. Nov 2004 22:00

Re: Inkompatible Typen TRect ??? Was ist da passiert ?
 
Zitat:

Zitat von stoxx
Ich bin mir 100 prozentig sicher, dass ich so schon programmiert habe.

Vielleicht so? :gruebel:
Delphi-Quellcode:
type TSomeBloodyRecord = record
   Value1 :integer;
   Value2 :string;
end;
type PSomeBloodyRecord = ^TSomeBloodyRecord;

var
   Record1          :TSomeBloodyRecord;
   PointerToRecord1 :PSomeBloodyRecord;
begin
   with Record1 do
   begin
      Value1 := 1;
      Value2 := 'Miep';
   end;

   PointerToRecord1 := @Record1;

   Writeln('Record1=PointerToRecord1 is ', (@Record1 = PointerToRecord1));
   Sleep(5000);
end.
Wobei ich freiwillig kein Fachmann im Umgang mit primitiven Typen bin. ;)

stoxx 30. Nov 2004 22:28

Re: Inkompatible Typen TRect ??? Was ist da passiert ?
 
Hallo !

schon klar, was Du da schreibst, Es ging mir aber nur um den Vergleich !
Früher ging das mal

if a = b then ...

jetzt muss man: if (a.left = b.left) and (a.top = b.top) usw. schreiben, um einen Record vergleichen zu können.
Das war das, was mich wundert !´

P.S. in Deinem Beispiel darf die Variable übrigens nicht vom Typ string sein ! ;-)

Hansa 1. Dez 2004 00:09

Re: Inkompatible Typen TRect ??? Was ist da passiert ?
 
Da täuchst du dich aber gewaltig. :shock:

Delphi-Quellcode:
If ApfelRecord = BirnenArray then
das ging noch nie. :mrgreen: Solche Vergleiche mit komplexen Typen würden jeden Compiler in die Knie zwingen und auch nur wenig Sinn machen. Auch die Pointer-Variante nützt in dem Fall nicht viel, weil nicht eindeutig ist, wo die Daten aufhören.

stoxx 1. Dez 2004 01:52

Re: Inkompatible Typen TRect ??? Was ist da passiert ?
 
Code:
das ging noch nie. weil nicht eindeutig ist, wo die Daten aufhören.
ich glaube, Du hast Recht. hab mich da wohl arg getäuscht.
Hatte mal unter Turbo Pascal Zeiten öfters von tief verschachtelten Records gebrauch gemacht.
Das war zwar nich ganz objectorientiert, aber zumindest waren die Daten "Themenorientiert" in den Records angeordnet.

HAbs gerade nochmal probiert, vergleiche gehen wirklich nicht.

von sowas hab ich viel gebrauch gemacht

record1.record2.interneDAten.sonstwas := andereDaten.sonstwas;

war wohl irgendwie ein blackout, sorry für den Aufstand :freak:

SirThornberry 1. Dez 2004 06:48

Re: Inkompatible Typen TRect ??? Was ist da passiert ?
 
ich hab das problem bisher so gelöst:
Delphi-Quellcode:
type
  T8ByteArray = Array [0..7] of Char;

[...]
var LPoint1, LPoint2: TPoint;
begin
  if T8ByteArray(LPoint1) = T8ByteArray(LPoint2) then
  [...]
end;
bei records wo das nicht funktioniert weil zum beispiel strings drin vorkommen hab ich dann einfach eine funktion gemacht die mir sagt ob die beiten gleich sind (welche dann mit Lpoint1.X etc. vergleicht)

jim_raynor 1. Dez 2004 06:52

Re: Inkompatible Typen TRect ??? Was ist da passiert ?
 
Zitat:

Zitat von SirThornberry
ich hab das problem bisher so gelöst:
Delphi-Quellcode:
type
  T8ByteArray = Array [0..7] of Char;

[...]
var LPoint1, LPoint2: TPoint;
begin
  if T8ByteArray(LPoint1) = T8ByteArray(LPoint2) then
  [...]
end;
bei records wo das nicht funktioniert weil zum beispiel strings drin vorkommen hab ich dann einfach eine funktion gemacht die mir sagt ob die beiten gleich sind (welche dann mit Lpoint1.X etc. vergleicht)

Ist das nicht mit CompareMem einfacher?

Robert_G 1. Dez 2004 07:52

Re: Inkompatible Typen TRect ??? Was ist da passiert ?
 
Zitat:

Zitat von jim_raynor
Ist das nicht mit CompareMem einfacher?

Einfacher? Einfacher und eleganter wäre Operatorüberladung, aber darauf kannst du in Delphi wohl noch 100 Jahre warten. :roll:

Muetze1 1. Dez 2004 08:25

Re: Inkompatible Typen TRect ??? Was ist da passiert ?
 
Moin!

Nutzt doch einfach Funktionen die es dafür gibt...

Delphi-Quellcode:
If ( EqualRect(a, b) ) Then ...
Siehe auch IntersectRect, OffsetRect, IsRectEmpty, InflateRect, ...

Die WinAPI bietet doch massig Funktionen an...

MfG
Muetze1

Jelly 1. Dez 2004 08:26

Re: Inkompatible Typen TRect ??? Was ist da passiert ?
 
Zitat:

Zitat von Robert_G
Einfacher und eleganter wäre Operatorüberladung, aber darauf kannst du in Delphi wohl noch 100 Jahre warten. :roll:

Nöö... Nach meinen Infos geht das schon lange in Delphi. In Der Entwickler-Zeitschrift war mal vor längerer Zeit ein Artikel darüber drin. Somit kann mal eigene Klassen erstellen, es sind aber auch schon fertige Beispiele bei Delphi dabei. So kann Delphi z.B. sehr leicht mir komplexen Zahlen arbeiten, mit den typischen Operatoren, also +, -, * und /. Ich hab den Artikel leider grad nicht zur Hand, aber ich glaub das gabs schon mal hier im Forum.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr.
Seite 1 von 2  1 2      

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