AGB  ·  Datenschutz  ·  Impressum  







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

Procedur verstehen

Ein Thema von paul.kunig · begonnen am 2. Jul 2019 · letzter Beitrag vom 3. Jul 2019
Antwort Antwort
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#1

AW: Procedur verstehen

  Alt 2. Jul 2019, 19:45
Nimm das [ref] einfach weg. Ich kann mir nicht vorstellen, dass das dahin gehört.

https://pascal.today/2016/08/17/cons...-vs-non-const/
Zitat:
Const

The const parameters are almost the same as standard parameters, but have some differences. It is not allowed to set the value to the const parameter inside of the function/procedure either pass it as a var/out parameter to other routines. The const parameters are passed by value (simple types) or by reference (string, fixed array, dynamic arrays and records. However this depends on the size of the parameter. If the size of the parameter is bigger than a certain amount of bytes then it is passed by reference instead) but without copy on write – remember, those are marked read-only and we cannot assign values to them or pass them to var parameters of other routines. You can specify [Ref] before the parameter to force the compiler to pass the value by reference – so it will be the same as var parameter except that the routine cannot modify the value directly via assignment. But be warned that const [Ref] parameters cannot be captured by the anonymous methods (lambdas) – as it is with “Result” in functions.
  Mit Zitat antworten Zitat
paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Procedur verstehen

  Alt 2. Jul 2019, 20:05
Danke DieDolly,

o.k. Verstanden. Ab einer bestimmten Größe wird der Wert als Referenz übergeben.
Das hätte mir als Antwort schon gereicht.

Was du mit wegnehmen meinst ist mir allerdings nicht klar.

Nächstes Problem:
Der übergebene Wert wird in der Prozedur ignoriert.

Ich rufe DoPaint auf und übergebe als Parameter ein Canvas und ein Rect.
Dennoch enthält ARect aus der oben genannten Procedure nicht die übergebenen Werte(Maße), sonder die Werte(Maße) der bereitstellenden Komponente, in diesem Fall der Komponente Layout1.

Jemand eine Idee, aus welchem Grund der an ARect übergebene Wert nicht übernommen wird?

Gruß
  Mit Zitat antworten Zitat
paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Procedur verstehen

  Alt 2. Jul 2019, 20:07
Danke Heuman
  Mit Zitat antworten Zitat
paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Procedur verstehen

  Alt 2. Jul 2019, 21:21
Die Frage warum der Wert nicht übergeben wird, ist noch offen.
Nur falls jemand wegen des Dankes meint die Sache sei erledigt.

Weitere Frage:
Die
Delphi-Quellcode:
procedure TForm1.Layout1Paint(Sender: TObject; Canvas: TCanvas;
  const [Ref] ARect: TRectF);
erwartet als Parameter ein Canvas.

Erstelle ich in diesem onPaint-Ereignis ein Rechteck ohne vorher ein Canvas beim Aufruf der Prozedur zu übergeben, wird dennoch ein Rechteck gezeichnet.

Warum?

Gruß
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Procedur verstehen

  Alt 3. Jul 2019, 09:08
Die Frage warum der Wert nicht übergeben wird, ist noch offen.
Nur falls jemand wegen des Dankes meint die Sache sei erledigt.

Weitere Frage:
Die
Delphi-Quellcode:
procedure TForm1.Layout1Paint(Sender: TObject; Canvas: TCanvas;
  const [Ref] ARect: TRectF);
erwartet als Parameter ein Canvas.

Erstelle ich in diesem onPaint-Ereignis ein Rechteck ohne vorher ein Canvas beim Aufruf der Prozedur zu übergeben, wird dennoch ein Rechteck gezeichnet.

Warum?

Gruß
Das ist doch eine Event-Prozedur die automatisch feuert, wenn Layout1 (was auch immer das ist) neu gezeichnet wird. Sender, Canvas, ARect usw. werden dadurch doch automatisch übergeben (von dem das Event auslösenden Element). Du kannst dann anschließend mit den Dingen was machen, also dafür sorgen, dass das Element so gezeichnet wird, wie du willst.
Ralph
  Mit Zitat antworten Zitat
paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Procedur verstehen

  Alt 3. Jul 2019, 10:56
Danke Jumpy,

hatte da wohl ein Brett vor dem Kopf. Du hast natürlich recht.
Allerdings stellt sich mir eine weitere Frage.
Warum wird hier ARect als Konstante angegeben, obwohl diese doch in der Routine geändert werden soll, kann, darf?

Danke auch an ConnorMcLeod

Gruß
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Procedur verstehen

  Alt 3. Jul 2019, 13:22
Warum wird hier ARect als Konstante angegeben, obwohl diese doch in der Routine geändert werden soll, kann, darf?
Das Objekt ARect (oder ist es nicht ein Record?) wird als const aber by Referenz übergeben. Du kannst dann in der Variable ARect nichts anderes reinpacken, also kein anderes Object/Record. Aber du kannst mit dem Object/Record das da drin ist schon was machen!
Ralph
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
714 Beiträge
 
Delphi 12 Athens
 
#8

AW: Procedur verstehen

  Alt 3. Jul 2019, 11:41
Die Frage warum der Wert nicht übergeben wird, ist noch offen.
Nur falls jemand wegen des Dankes meint die Sache sei erledigt.

Weitere Frage:
Die
Delphi-Quellcode:
procedure TForm1.Layout1Paint(Sender: TObject; Canvas: TCanvas;
  const [Ref] ARect: TRectF);
erwartet als Parameter ein Canvas.

Erstelle ich in diesem onPaint-Ereignis ein Rechteck ohne vorher ein Canvas beim Aufruf der Prozedur zu übergeben, wird dennoch ein Rechteck gezeichnet.

Warum?

Gruß
Die Methode sieht aus wie ein von der IDE erzeugter Handler für einen onPaint Event (FMX?). Einen solchen Event ruft man nicht selbst auf, den ruft das Framework auf wenn das Control neu gezeichnet werden muss. Man kann das erzwingen, in dem man eine Methode des Controls (Invalidate, Update, Refresh, wie immer as auch in FMX heißt) aufruft. Der übergebene Canvas ist normalerweise der des Controls, aRect der Bereich auf dem Canvas, der neu gezeichnet werden muss.
Peter Below
  Mit Zitat antworten Zitat
paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Procedur verstehen

  Alt 3. Jul 2019, 11:52
Hallo peterbelow,

absolut richtig was du sagst.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Procedur verstehen

  Alt 2. Jul 2019, 21:36
Nächstes Problem:
Der übergebene Wert wird in der Prozedur ignoriert.

Jemand eine Idee, aus welchem Grund der an ARect übergebene Wert nicht übernommen wird?
Das ist vollkommen korrekt, da in ARef ein Verweis auf ein existierendes TRect übergeben wird, also kein Wert!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  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 23:57 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-2025 by Thomas Breitkreuz