AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Verhalten von Align in D2006 und D2007 geändert.
Thema durchsuchen
Ansicht
Themen-Optionen

Verhalten von Align in D2006 und D2007 geändert.

Ein Thema von MaBuSE · begonnen am 24. Mai 2007 · letzter Beitrag vom 26. Mai 2007
 
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Verhalten von Align in D2006 und D2007 geändert.

  Alt 24. Mai 2007, 14:12
Hallo,
In der Komponente TControl (und allen davon abgeleiteten Komponenten) hat sich das Verhalten von Align geändert.

Anleitung zum Reproduzieren des Features:
  • eine neue Anwendung in z.B. Delphi 7 erstellen
  • ein TMemo auf das leere Form legen
  • Memo1.Align im Objektinspektor auf alClient setzten -> Das Memo füllt das ganze Form aus.
  • Memo1.Align im Objektinspektor auf alNone setzten -> Das Memo füllt immer noch das ganze Form aus.
In Delphi 2006 oder 2007:
  • eine neue Anwendung in z.B. Delphi 2007 für Win32 erstellen
  • ein TMemo auf das leere Form legen
  • Memo1.Align im Objektinspektor auf alClient setzten -> Das Memo füllt das ganze Form aus.
  • Memo1.Align im Objektinspektor auf alNone setzten -> Das Memo hat wieder die ursprüngliche Position und Größe.
Die alten Werte sind in den readonly Eigenschaften ExplicitLeft, ExplicitTop, ExplicitWidth und ExplicitHeight gespeichert.

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:
...
    if ... then
        SetBounds(Left, Top, Height, Width)
      else
        AdjustSize;
...
In D2007 wird dort auf ExplicitXXX zugegriffen.
Delphi-Quellcode:
...
      if ... then
        SetBounds(Left, Top, Height, Width)
      else if (OldAlign <> alNone) and (Value = alNone) then
        SetBounds(FExplicitLeft, FExplicitTop, FExplicitWidth, FExplicitHeight)
      else
        AdjustSize;
...
Die ExplicitXXX Properties werden in D2007 in SetLeft, SetTop, SetWidth und SetHeight explizit gesetzt.
Delphi-Quellcode:
...
procedure TControl.SetLeft(Value: Integer);
begin
  SetBounds(Value, FTop, FWidth, FHeight);
  Include(FScalingFlags, sfLeft);
  if csReading in ComponentState then
    FExplicitLeft := FLeft;
end;
...
Im Vergleich dazu die D7 Source:
Delphi-Quellcode:
...
procedure TControl.SetLeft(Value: Integer);
begin
  SetBounds(Value, FTop, FWidth, FHeight);
  Include(FScalingFlags, sfLeft);
end;
...
Es ist also kein Bug, sondern ein Feature !!!

Es sollten alle Programmstellen bearbeitet werden, in denen ein
Delphi-Quellcode:
Align := alClient;
Align := alNone;
gemacht wird, um das Control der Containergröße anzupassen. (z.B. in diversen Freeware Komponenten)

Viele Grüße
MaBuSE
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
 


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:52 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