AGB  ·  Datenschutz  ·  Impressum  







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

Werte unter Delphi XE2 zuweisen !?

Ein Thema von roga · begonnen am 8. Apr 2012 · letzter Beitrag vom 8. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#1

Werte unter Delphi XE2 zuweisen !?

  Alt 8. Apr 2012, 06:52
Ich wünsche euch allen FROHE OSTERN und recht fleißige Osterhasen und -häsinnen

Bei der Umstellung auf Delphi XE2 treten in meinen Komponenten immer wieder Probleme bei Zuweisungen auf, die es unter Delphi 2007 nicht gab.

Beispiel:

Delphi-Quellcode:
    // unter Delphi 2007

    with ARect do
    begin
      Left := 4;
      Right := Width - 4;
      Top := Height - 20;
      Bottom := Height;
    end;

    // NUR so klappt es unter XE2

    ARect.Left := 4;
    ARect.Right := Width - 4;
    ARect.Top := Height - 20;
    ARect.Bottom := Height;
Auch bei Zeichenaktionen vergisst Delphi XE2 irgenwann die Beziehung zum Canvas, obwohl nirgends eine Ableitung erfolgte.

Delphi-Quellcode:
    with Canvas do
    begin
      ...
    end;
Liegt der Fehler nun an Embarcadero oder muss ich zukünftig die umständlichere Variante anwenden?

Viel Spaß beim Ostereier suchen
roga
Ronald
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#2

AW: Werte unter Delphi XE2 zuweisen !?

  Alt 8. Apr 2012, 07:59
Was sind das für Probleme?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.341 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Werte unter Delphi XE2 zuweisen !?

  Alt 8. Apr 2012, 08:08
Das ist kein Fehler, sondern ist typisch für die Verwendung von with.

Mit XE2 hat TRect diverse Erweiterungen bekommen, unter anderem Width und Height als Eigenschaften. Deshalb bezieht sich das eben nicht mehr auf das Formular außen, sondern auf das Rechteck.

In der VirtualTreeView war ähnlicher Code, nur mit Offset (das es nun auch in TRect gibt). Ohne with hätte sich auch der problemlos unter XE2 einfach wieder kompilieren lassen.

Deshalb verwende ich selbst with nie. Es gibt damit immer nur unnötige Probleme, schwer zu findende Fehler und debuggen ist damit auch nicht sinnvoll möglich (weil man bei Auswertungen mit Strg + F7 usw. immer erst manuell den Inhalt des with dazuschreiben muss und andere Sachen gleich gar nicht gehen). Refactoring funktioniert auch nicht wirklich. Und übersichtlich ist das ganze auch nicht, weil man ständig rätseln muss worauf sich denn nun was bezieht. Eben weil die dann viel kürzeren Bezeichner oft nicht eindeutig sind. Wie du ja hier gerade selbst feststellen musstest.

Deshalb verstehe ich immer nicht weshalb man sich das alles zumutet nur um ein paar Zeichen zu tippen zu sparen...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Geändert von jaenicke ( 8. Apr 2012 um 08:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#4

AW: Werte unter Delphi XE2 zuweisen !?

  Alt 8. Apr 2012, 08:21
Zitat:
Mit XE2 hat TRect diverse Erweiterungen bekommen, unter anderem Width und Height als Eigenschaften.
Das erklärt natürlich alles. Ich danke Dir für den Hinweis, Sebastian! Das mit der Übersichtlichkeit ist sicherlich Ansichtssache und hat seine Vor- und Nachteile (wie man ja hier sieht).

roga
Ronald
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Werte unter Delphi XE2 zuweisen !?

  Alt 8. Apr 2012, 08:43
@roga

Die Nachteile überwiegen definitiv, nicht nur wegen der Probleme beim Umstieg auf neuere Versionen, der häufig mühsamen Fehlersuche bei komplexeren Passagen mit derartigem Code, sondern auch weil so etwas einfach nicht "debugbar" ist.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Werte unter Delphi XE2 zuweisen !?

  Alt 8. Apr 2012, 09:03
Es ist für die Abwärtskompatibilität nicht unbedingt optimal, aber es betrifft auch ausschließlich die Verwendung von WITH.
PS: Ich hab bisher zufällig intuitiv vorwiegend immer nur eine Seite über das With geregelt und die andere Seite nicht, womit es damit nun auch fast keine Probleme durch derartige Erweiterungen gibt.
Nicht unbedinbt bei TRect, TPoint und Co., aber vorallem bei Objekten war es absehbar, daß diese irgendwann auch mal erweitert werden.
Wer das WITH gedankenlos nutzt, ist MBMN selbst dran Schuld.


Für neue Projekte ist es definitiv eine Vereinfachung des Codes und beim Suchen nach Funktionen, denn die gammeln nun nicht mehr unbekannt irgendwo rum, sondern hängen direkt dran.



Und was die Abwärtskompatibilität angeht: Bis D2006/TDE hinunter kann man das neue XE2-Verhalten nachrüsten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Apr 2012 um 09:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Werte unter Delphi XE2 zuweisen !?

  Alt 8. Apr 2012, 09:06
Die Nachteile überwiegen definitiv, nicht nur wegen der Probleme beim Umstieg auf neuere Versionen, der häufig mühsamen Fehlersuche bei komplexeren Passagen mit derartigem Code, sondern auch weil so etwas einfach nicht "debugbar" ist.
Kann ich bestätigen. Wenn ein Code überarbeitet werden muss und ein With drin ist fliegt das raus.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Werte unter Delphi XE2 zuweisen !?

  Alt 8. Apr 2012, 09:12
Zitat:
sondern auch weil so etwas einfach nicht "debugbar" ist.
Der Witz daran ist, daß es meiner Erfahrung nach gut debugbar ist.
Jedenfalls hat der Debugger das WITH meistens gut auflösen können. (wenn der Debugger nicht durch andere Dinge behindert wurde, wie BPLs, DLL/EXE-Modulgrenzen, Generics und andere Debugger-/Compilerfehler)
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 Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Werte unter Delphi XE2 zuweisen !?

  Alt 8. Apr 2012, 10:40
@himitsu

Ich habe die gegenteilige Erfahrung gemacht, ein Kollege von mir setzt exzessiv With Statements ein, auch mehrfach verschachtelt, in der Art
Delphi-Quellcode:
   With MyAdodatset do
     begin
        For ....
          Fields[i].irendwas ....
          With aCanvas do ...
     end;
Wenn man hier etwas debuggen will muss man immer den wieder zusammengesetzten Ausdruck in die Überwachung nehmen, bei einem Mouseover läuft gar nichts, außer dass sich der Debugger bisweilen aufhängt und die ganze IDE mitnimmt
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 8. Apr 2012 um 10:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Werte unter Delphi XE2 zuweisen !?

  Alt 8. Apr 2012, 14:09
Wenn man unbedingt with benutzen möchte, dann sollte man sich entweder ausschließlich auf dieses Objekt beschränken oder eben alles direkt referenzieren.

Das genannte Beispiel sollte so reibungslos funktionieren:
Delphi-Quellcode:
// unter Delphi 2007 und XE2

  with ARect do
    begin
      Left := 4;
      Right := Self.Width - 4;
      Top := Self.Height - 20;
      Bottom := Self.Height;
    end;
Allerdings habe ich so den Verdacht, dass hier von einer Form der innere Bereich ohne den Rand ermittelt werden soll, und das geht natürlich erheblich einfacher (und vor allem funktioniert das bei jedem Theme und jeder Darstellungsart) mit Delphi-Referenz durchsuchenTForm.ClientRect
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:15 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