AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ClassOperator Implict greift nicht

Ein Thema von himitsu · begonnen am 20. Mai 2008 · letzter Beitrag vom 22. Mai 2008
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#1

ClassOperator Implict greift nicht

  Alt 20. Mai 2008, 01:18
Moin ihr,
ich hab da ein kleines Problemchen mit den Klassenoperatoren.

Und zwar geht Einiges einfach nicht, obwohl ich dachte es würde so gehn?
Code:
Type TWindow = Record
  Public
    Class Operator Implicit(Handle: HWND): TWindow;
    Class Operator Implicit(Rec: TWindow): HWND;
  End;

Procedure Test(H: HWND);
  Begin
  End;

Var H: HWND;
  W: TWindow;


42: W := H;         // [color=green]geht[/color]
43: W := 123;       // [color=green]geht[/color]
44: H := W;         // [color=red]geht nicht[/color]
45: Test(W);        // [color=red]geht auch nicht[/color]
46: If W = H Then ; // [color=red]geht nicht[/color]
Zitat:
[Pascal Error] Unit1.pas(44): E2010 Incompatible types: 'HWND' and 'TWindow'
[Pascal Error] Unit1.pas(45): E2010 Incompatible types: 'HWND' and 'TWindow'
[Pascal Error] Unit1.pas(46): E2015 Operator not applicable to this operand type
Abgsehn von "123" (Integer) sind die Typen doch eigentlich identisch und Delphi sollte entsprechend umwandeln.

Der "Witz" dabei ist, wenn ich das Ganze z.B. mit String statt HWND versucht, dann geht plötzlich alles. :schock:
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#2

Re: ClassOperator Implict greift nicht

  Alt 20. Mai 2008, 06:06
schau mal hier:

http://www.delphipraxis.net/internal...light=operator


funktioniert erst ab Delphi2007 richtig .....
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#3

Re: ClassOperator Implict greift nicht

  Alt 20. Mai 2008, 06:13
Zitat:
46: If W = H Then ; // geht nicht[/pre]
dafür brauchst auch den class operator Equal ...

guck Dich mal in den .NET Sourcen um für Currency .. da wirds ersichtlich, wie alles funktioniert

man kann lustige Sachen damit machen .... wir weisen neuerdings sogar Pointer auf den Record Typ zu, und umgekehrt, dabei findet eine automatische Kopie statt.

p := W;

W := P;

Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

Re: ClassOperator Implict greift nicht

  Alt 20. Mai 2008, 21:58
Equal hatte ich ja ... sozusagen

Delphi-Quellcode:
HWND = type LongWord;
TDateTime = type Double;
dann könnte es also an dem TYPE liegen

meine Test haben letztendlich ergeben, daß es so geht,
aber so ganz 100%ig bin ich damit nicht wirklich zufrieden
Delphi-Quellcode:
Type TnWindow = Record
  Class Operator Implicit(Handle: LongWord{HWND}): TnWindow;
  Class Operator Implicit(Rec: TnWindow): LongWord{HWND};
  Class Operator Equal (Left, Right: LongWord{HWND}): Boolean;
  Class Operator NotEqual(Left, Right: LongWord{HWND}): Boolean;
End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#5

Re: ClassOperator Implict greift nicht

  Alt 21. Mai 2008, 01:01
Zitat:
aber so ganz 100%ig bin ich damit nicht wirklich zufrieden
na was für eine Delphi Version hast Du denn?
Wie gesagt, in BDS2006 geht das alles noch nicht wirklich so richtig ...
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

Re: ClassOperator Implict greift nicht

  Alt 21. Mai 2008, 02:01
BDS2006, da es in D7 noch nicht geht.

ich glaub ich bau erstmal Compilerschlater ein,
denn so wie es aussieht, werd' ich bis zum Commodore (RAD Studio 2009 ??) noch damit leben müssen


nja, zumindestens ist das Programm so lauffähig
und im Commodore sollte es dann ja endlich richtig funktionieren


Zitat:
isch habe mir gerade mal die Trial von Delphi 2007 rungergeladen .. und das Beispiel geht jetzt ... coole Sache ....
Bist du eigentlich auf Delphi 2007 umgestiegen, oder hast'e das Problem bei dir anders gelöst?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#7

Re: ClassOperator Implict greift nicht

  Alt 22. Mai 2008, 16:30
Zitat von himitsu:
Bist du eigentlich auf Delphi 2007 umgestiegen, oder hast'e das Problem bei dir anders gelöst?
Ich selber nutze noch D2005, für ein Projekt für eine Fremdfirma steht mir allerdings D2007 zur Verfügung.
Es funktioniert wie gesagt in D2006 noch nicht. Ein Workarround ist mir da noch nicht eingefallen, ist einfach eben ncoh ein Bug.


was allerdings jetzt noch schick wäre, wenn sowas gehen würde

Delphi-Quellcode:
PLetter =^TLetter;
TLetter = packed record
   class operator implicit(const Value : Boolean) : PLetter;
end;


und dann


function Test;
var p : PLetter;
begin
   p := true;
end;

sowas wie weiter unten funktioniert übrigens jetzt schon und ist recht lustig
Man ist sehr flexibel und einheitlich, man spart sich das schreiben des "^" Zeichens.
Und kann automatisch umkopieren.


Delphi-Quellcode:
PLetter =^TLetter;
TLetter = packed record
    class operator implicit(const Value : TLetter) : PLetter;
    class operator implicit(const Value : PLetter) : TLetter;
end;

function Test;
var p : PLetter;
    letter1, letter2 : TLetter;
begin
   p := letter1;
   letter2 := p;
end;

wenn ich gerade beim Wünschen bin, Default Properties (nicht nur bei ArrayProperties) in Klassen und Property überladung wäre noch schick...
hmmm .. ob das jemand liest von GodeGear?
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#8

Re: ClassOperator Implict greift nicht

  Alt 22. Mai 2008, 17:02
tja, ist schade, also heißt es warten (oder die bringen doch noch Turbo Delphi 2007 raus)

das mit den Default Properties klingt gut, aber am Verhalten bei Pointern spiele ich lieber nicht rum ... hab mir vorgenommen es so nutzbar zu machen, daß es sich wie eine "normale" Variable verhält (z.B. 'nen Integer),

aber für sowas wie "String" wären ein Konsruktor und Destruktor nett, welcher auch automatisch bei Definiion einer Variable von Delphi angewendet werden ... halt so wie beim "String" und all den anderen dynamischen Arrays
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#9

Re: ClassOperator Implict greift nicht

  Alt 22. Mai 2008, 17:13
Zitat von himitsu:
aber für sowas wie "String" wären ein Konsruktor und Destruktor nett, welcher auch automatisch bei Definiion einer Variable von Delphi angewendet werden ... halt so wie beim "String" und all den anderen dynamischen Arrays

ähm, ja, da hast Du allerdings Recht .. Konstruktoren wie in C++ wären gut.
Am liebesten noch automatischer Aufruf, dass man noch den Record initialisieren kann.
Bei Interfaces geht ja die AddRef Zählung auch automatisch..
Noch schöner, wenn man Klassen auch statisch verwenden könnt.
Aber man will ja nicht zuviel träumen.
ABER vielleicht, weil der Compiler mit 64 Bit eh mal entstaubt werden muss, und man dann ja nicht mehr die Ausrede benutzen kann, dass Delphi Programme noch auf 386 laufen und laufen müssen, vielleicht schaffen sie ja eine Art Plattformcompiler für C++ und Delphi, der dann alles kann
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  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 09:54 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