AGB  ·  Datenschutz  ·  Impressum  







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

with.....

Ein Thema von Frickler · begonnen am 3. Aug 2018 · letzter Beitrag vom 12. Aug 2018
Antwort Antwort
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
599 Beiträge
 
Delphi XE6 Enterprise
 
#1

with.....

  Alt 3. Aug 2018, 15:57
Delphi-Quellcode:
  with DIB, dsbm, dsbmih do
  begin
    if (biSize <> 0) and ((biWidth = 0) or (biHeight = 0)) then Exit;
    if (biSize = 0) and ((bmWidth = 0) or (bmHeight = 0)) then Exit;
  end;
Diese Klarheit, diese Kürze...


(aus Vcl.Graphics.pas)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: with.....

  Alt 3. Aug 2018, 16:03
Lotterie mit Verliergarantie ...
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: with.....

  Alt 3. Aug 2018, 16:06
Hallo,
vor allem das Debuggen macht das with ja so leichter.
Einfach mit der Maus auf biWidth und der Debugger zeigt Dir sofort den Wert.

So: Neu aber Schluss mit der Ironie ...
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

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

AW: with.....

  Alt 3. Aug 2018, 16:32
Ja, leider ist auch in der aktuellen Version noch sehr viel with drin. Ich kann aber auch verstehen, dass man das lieber drin lässt solange es läuft, denn with komplikationsfrei zu entfernen ist schon fast eine wissenschaftliche Aufgabe (debuggen und warten allerdings ebenfalls). Problematisch ist nur, wenn niemand merkt, dass es in einer neuen Version eigentlich gar nicht mehr läuft, aber trotzdem noch kompiliert. with eben...

Ich hoffe, dass diese Altlasten irgendwann aufgeräumt werden und with mit einer Compilerwarnung versehen wird...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: with.....

  Alt 3. Aug 2018, 16:55
Ich weiß nicht was ihr habt?

Es ist alles ganz eindeutig, also immer das Letzte wird zuerst genommen.
Und bei mehrfachen Angaben im WITH können die auch aufeinander aufbauen, was auffällt, wenn man weiß, dass
Delphi-Quellcode:
with DIB, dsbm, dsbmih do

// entspricht

with DIB do
  with dsbm do
    with dsbmih do

Aber so kann das doch keiner mehr lesen.
Delphi-Quellcode:
if (DIB.dsbmih.biSize <> 0) and ((DIB.dsbmih.biWidth = 0) or (DIB.dsbmih.biHeight = 0)) then Exit;
if (DIB.dsbmih.biSize = 0) and ((DIB.dsbm.bmWidth = 0) or (DIB.dsbm.bmHeight = 0)) then Exit;
Zum Glück haben die Felder der WinAPI-Records hier zur Abwechslung mal keine Typ-Prefixe (Type des Feldes), sondern Klassen-Prefixe (Name des Parent-Records),
womit man sofort erkennt, was von dsbm/BITMAP > bm und was vom dsbmih/BITMAPINFOHEADER > bi kommt.
$2B or not $2B

Geändert von himitsu ( 3. Aug 2018 um 16:58 Uhr)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: with.....

  Alt 12. Aug 2018, 01:31
Ich weiß nicht was ihr habt?

Es ist alles ganz eindeutig, also immer das Letzte wird zuerst genommen.
Und bei mehrfachen Angaben im WITH können die auch aufeinander aufbauen, was auffällt, wenn man weiß, dass
Delphi-Quellcode:
with DIB, dsbm, dsbmih do

// entspricht

with DIB do
  with dsbm do
    with dsbmih do
...was ja auch niemand je bestritten hat. Nur ist es nunmal auch kein Geheimnis, dass der Debugger das manchmal anders sieht, und dir dann andere Werte anzeigt, als die, die eigentlich in den Variablen drin stehen. Das kann es schwer bis unmöglich machen, einen Fehler zu finden. Für mich persönlich der Hauptgrund, kein WITH zu verwenden. Neben dem Fakt, dass keiner mehr Weiß, welcher Bezeichner zu welchem Namensraum gehört. Besonders wenn die Variablen der verschachtelten Namespaces den selben, einen ähnlichen, oder einen verwandten Typen besitzen.
Dennis

Geändert von Dennis07 (12. Aug 2018 um 01:34 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: with.....

  Alt 12. Aug 2018, 07:50
Delphi-Quellcode:
  with DIB, dsbm, dsbmih do
  begin
    if (biSize <> 0) and ((biWidth = 0) or (biHeight = 0)) then Exit;
    if (biSize = 0) and ((bmWidth = 0) or (bmHeight = 0)) then Exit;
  end;
Diese Klarheit, diese Kürze...


(aus Vcl.Graphics.pas)


Delphi-Quellcode:
    if (biSize <> 0) and ((biWidth = 0) or (biHeight = 0)) then Exit;
    if (biSize = 0) and ((bmWidth = 0) or (bmHeight = 0)) then Exit;
Das wär doch vieeeel übersichtlicher. und es würde Tipparbeit sparen...


Aber im Ernst, wie jaenicke schon sagte, ist das ganze nicht so einfach raus zu bekommen. Im Endeffekt, das gleiche Spiel wie damals mit "Goto"...
Uwe
e=mc² or energy = milk * coffee²
  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 02:57 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