Da ich mich schon einige Zeit mit dem Gedanken beschäftige von Delphi eventuell auf Lazarus umzusteigen (anstelle einer Neuanschaffung von Delphi / bisher D2007) ist mir im Lazarus-Forum ein Beitrag aufgefallen, welcher für meine Überlegung sehr interessiert ist, da ich zum Teil exzessiv Typecasts einsetze.
Hier einmal der Link:
http://www.lazarusforum.de/viewtopic.php?f=18&t=9105
Die Ausgangssituation mit einer erweiterten Komponente:
Delphi-Quellcode:
type
TMyEdit = class(TEdit)
private
FEnhReadOnly: Boolean;
function GetEnhReadOnly(): Boolean; virtual;
procedure SetEnhReadOnly(AValue: Boolean); virtual;
public
constructor Create(AOwner: TComponent); override;
published
property ReadOnly: Boolean read GetEnhReadOnly write SetEnhReadOnly;
end;
implementation
constructor TMyEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FEnhReadOnly := inherited ReadOnly;
end;
function TMyEdit.GetEnhReadOnly(): Boolean;
begin
Result := FEnhReadOnly;
end;
procedure TMyEdit.SetEnhReadOnly(AValue: Boolean);
begin
if (FEnhReadOnly <> AValue) then
begin
FEnhReadOnly := AValue;
end;
end;
und darauf folgenden Zugriff:
Delphi-Quellcode:
MyEdit1 := TMyEdit.Create(Self);
MyEdit1.ReadOnly := true;
lBoolean := MyEdit1.ReadOnly //Result: true
lBoolean := TEdit(MyEdit1).ReadOnly //Result: false
lBoolean := (MyEdit1 as TEdit).ReadOnly //Result: true
So ist es zum Beispiel auch bei mir mit Delphi2007 aus.
Wie sieht es in den aktuellen Delphi-Versionen aus?
Oder wird seit neuestem bei
(MyEdit1 as TEdit).ReadOnly
auch false zurückgegeben wie scheinbar bei Lazarus?
Den Original-Quellcode habe ich einmal ausgeborgt und angehängt.
Wäre nett, wenn dies jemand testen könnte.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.