Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TPoint wird als (0,0) übergeben, abhängig vom Variablennamen (https://www.delphipraxis.net/197226-tpoint-wird-als-0-0-uebergeben-abhaengig-vom-variablennamen.html)

Redeemer 23. Jul 2018 09:33

Delphi-Version: 2010

TPoint wird als (0,0) übergeben, abhängig vom Variablennamen
 
Also ich habe das Problem, dass ein TPoint als (0,0) übergeben wird, wenn die Variable, die als Parameter übergeben wird, einen bestimmten Namen hat. Die aufgerufene Prozedur ist in einer anderen Unit wie folgt deklariert:
Delphi-Quellcode:
procedure SetzeGroesse2(X1, X2: TPoint);

Das Ändern der Namen der aufgerufenen Prozedur und ihrer Parameter oder eine komplett neue Erzeugung brachten keine Lösung. In der aufrufenden Unit ist kein anderer Bezeichner namens P1 vorhanden. Ich war nicht in der Lage, ein Minimalbeispiel zu erstellen.

Vielleicht steh ich auf dem Schlauch - oder ich hab einen Bug im Compiler gefunden...

Delphi-Quellcode:
procedure TFrameKonstruktion.ZeichnenSetzeEndpunkt(P: TPoint);
var
  P1: TPoint;
begin
  P1 := ZeichenpunktStart;
  // hier sollen später noch einige weitere Transformationen mit P1 durchgeführt werden
  with TLinie.Create(Fenster.Zeichenobjekte, AktuellesZeichenformat) do
  SetzeGroesse2(P1, P); // übergibt (0,0), (P.X, P.Y)
end;
Ich weiß aus dem Debugger, dass P1 in der aufrufenden Prozedur nicht (0,0) ist, aber in der aufgerufenen Prozedur ist er (0,0).

Folgende Syntaxen funktionieren hingegen:
Delphi-Quellcode:
procedure TFrameKonstruktion.ZeichnenSetzeEndpunkt(P: TPoint);
var
  P0: TPoint;
begin
  P0 := ZeichenpunktStart;
  // hier sollen später noch einige weitere Transformationen mit P0 durchgeführt werden
  with TLinie.Create(Fenster.Zeichenobjekte, AktuellesZeichenformat) do
  SetzeGroesse2(P0, P); // übergibt (P0.X, P0.Y), (P.X, P.Y)
end;
Delphi-Quellcode:
procedure TFrameKonstruktion.ZeichnenSetzeEndpunkt(P: TPoint);
begin
  with TLinie.Create(Fenster.Zeichenobjekte, AktuellesZeichenformat) do
  SetzeGroesse2(ZeichenpunktStart, P); // übergibt (ZeichenpunktStart.X, ZeichenpunktStart.Y), (P.X, P.Y)
end;

sakura 23. Jul 2018 09:40

AW: TPoint wird als (0,0) übergeben, abhängig vom Variablennamen
 
Wahrscheinlich gibt es im Objekt TLinie eine Eigenschaft/Feld mit dem Namen P1. Verzichte auf with ... do, um solche Probleme zu vermeiden.

...:cat:...

Redeemer 23. Jul 2018 09:47

AW: TPoint wird als (0,0) übergeben, abhängig vom Variablennamen
 
Danke, die sind wohl versehentlich ins public gerutscht. :oops:

Sherlock 23. Jul 2018 09:49

AW: TPoint wird als (0,0) übergeben, abhängig vom Variablennamen
 
Delphi-Quellcode:
With
ist tödlicher als
Delphi-Quellcode:
Goto
...

Sherlock

sakura 23. Jul 2018 09:50

AW: TPoint wird als (0,0) übergeben, abhängig vom Variablennamen
 
Zitat:

Zitat von Redeemer (Beitrag 1408378)
Danke, die sind wohl versehentlich ins public gerutscht. :oops:

Verzichte auf WITH! Das birgt eine Menge an Gefahren und ist seit Jahrzehnten verpönt, nicht ohne Grund, wie Du gerade gemerkt hast.

...:cat:...

p80286 23. Jul 2018 10:31

AW: TPoint wird als (0,0) übergeben, abhängig vom Variablennamen
 
Zitat:

Zitat von sakura (Beitrag 1408380)
Verzichte auf WITH! Das birgt eine Menge an Gefahren und ist seit Jahrzehnten verpönt, nicht ohne Grund, wie Du gerade gemerkt hast.

...:cat:...

Vielleicht sollte Daniel mal FAQ einrichten, da gibt es bestimmt jede Menge Einträge die nicht tot zu kriegen sind, von
Delphi-Quellcode:
if mybool=true then ...
über
Delphi-Quellcode:
 with
und
Delphi-Quellcode:
goto
bis zur Verwendung von vis. Komponenten zur Datenhaltung.

Gruß
K-H

Schokohase 23. Jul 2018 10:44

AW: TPoint wird als (0,0) übergeben, abhängig vom Variablennamen
 
Nicht zu vergessen der Eintrag, dass man FAQs lesen sollte.

himitsu 23. Jul 2018 10:56

AW: TPoint wird als (0,0) übergeben, abhängig vom Variablennamen
 
Zitat:

Zitat von Schokohase (Beitrag 1408387)
Nicht zu vergessen der Eintrag, dass man FAQs lesen sollte.

Das wird Punkt 1, ganz oben in den FAQ.

Und zusätzlich sollte man bei sowas immer zuerst gucken, ob man auch die richtigen Variablen/Felder bekommt. (Code-Insight und Co. verraten einem das ja)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:11 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