![]() |
Verhalten von Align in D2006 und D2007 geändert.
Hallo,
In der Komponente TControl (und allen davon abgeleiteten Komponenten) hat sich das Verhalten von Align geändert. Anleitung zum Reproduzieren des Features:
Die ExplicitLeft Eigenschaft wird dem ein oder anderen durch die Fehlermeldung "property ExplicitLeft not found" bekannt sein. (bzw: "Im Projekt Project1.exe ist eine Exception der Klasse EReadError mit der Meldung 'Eigenschaft ExplicitLeft existiert nicht.' aufgetreten.") Die ExplicitLeft wurde in D2006 eingeführt. Die Align Funktionalität ist in der Komponente TControl gekapselt. In D7 wird in SetAlign folgendes gemacht:
Delphi-Quellcode:
In D2007 wird dort auf ExplicitXXX zugegriffen.
...
if ... then SetBounds(Left, Top, Height, Width) else AdjustSize; ...
Delphi-Quellcode:
Die ExplicitXXX Properties werden in D2007 in SetLeft, SetTop, SetWidth und SetHeight explizit gesetzt.
...
if ... then SetBounds(Left, Top, Height, Width) else if (OldAlign <> alNone) and (Value = alNone) then SetBounds(FExplicitLeft, FExplicitTop, FExplicitWidth, FExplicitHeight) else AdjustSize; ...
Delphi-Quellcode:
Im Vergleich dazu die D7 Source:
...
procedure TControl.SetLeft(Value: Integer); begin SetBounds(Value, FTop, FWidth, FHeight); Include(FScalingFlags, sfLeft); if csReading in ComponentState then FExplicitLeft := FLeft; end; ...
Delphi-Quellcode:
Es ist also kein Bug, sondern ein Feature !!!
...
procedure TControl.SetLeft(Value: Integer); begin SetBounds(Value, FTop, FWidth, FHeight); Include(FScalingFlags, sfLeft); end; ... Es sollten alle Programmstellen bearbeitet werden, in denen ein
Delphi-Quellcode:
gemacht wird, um das Control der Containergröße anzupassen. (z.B. in diversen Freeware Komponenten)
Align := alClient;
Align := alNone; Viele Grüße MaBuSE |
Re: Verhalten von Align in D2006 und D2007 geändert.
Delphi-Quellcode:
hat auch schon in D7 nicht funktioniert weil die größe erst aktuallisiert wird wenn wenn das Control dargestellt wird (zumindest meine ich mich daran erinnern zu können).
Align := alClient;
Align := alNone; |
Re: Verhalten von Align in D2006 und D2007 geändert.
Zitat:
![]()
Delphi-Quellcode:
...
// imgGradient ist vom Typ TImage imgGradient.Align := alClient; imgGradient.Align := alNone; ... |
Re: Verhalten von Align in D2006 und D2007 geändert.
Zitat:
|
Re: Verhalten von Align in D2006 und D2007 geändert.
Zitat:
Was mich interessieren würde ist das Warum? Was verspricht man sich mit diesem neuen Feature? |
Re: Verhalten von Align in D2006 und D2007 geändert.
Wahrscheinlich haben sich ein paar Leute bei CodeGear (damals noch Borland) beklagt, dass wenn sie die Align-Eigenschaft wieder zurücksetzen, das Control nicht mehr auf seine Ursprungsgröße schrumpft. Das brachte uns dann die ExplicitLeft/Top/Width/Height Eigenschaften. Diese machen es den Komponentenhersteller recht schwer Delphi 7 zu unterstützen, da ein Formular das einmal mit BDS 2006/2007 angefasst wurde nicht ohne Handarbeit in Delphi 7 funktioniert, weil D7 diese Eigenschaften nicht kennt. (Bei der Entwicklung der DDevExtensions konnte ich ein Lied davon singen).
|
Re: Verhalten von Align in D2006 und D2007 geändert.
Zitat:
Für diese gesonderten Fall wäre ein EnableExplizitSize-Property schön gewesen das defaultmäßig auf False steht und default-Value auch False hat. Ist dieses Falls werden die Explizit-Properties auch nicht geschrieben. |
Re: Verhalten von Align in D2006 und D2007 geändert.
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 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 by Thomas Breitkreuz