Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Wiso geht eigentlich inc(form1.width); nicht? (https://www.delphipraxis.net/53439-wiso-geht-eigentlich-inc-form1-width-%3B-nicht.html)

ferby 16. Sep 2005 16:58


Wiso geht eigentlich inc(form1.width); nicht?
 
Hallo,

Ich möchte das die Breite meiner Form jede Sekunde um eins größer wird. Dazu habe ich einen Timer und in ontimer den code:

Delphi-Quellcode:
 inc(form1.width);
Nur leider funktioniert das inc(bla); anscheinend nur bei variabel. Warum geht das hier nicht? wäre ja viel einfacher anstatt:

Delphi-Quellcode:
form1.width:=form1.width+1;

Kann mich wer aufklären,
danke,
ferby

freak4fun 16. Sep 2005 17:01

Re: Wiso geht eigentlich inc(form1.width); nicht?
 
Aus meiner Hilfe(F1):

Zitat:

Warning: You can’t use Inc on properties because it modifies the parameter.
MfG
freak

ferby 16. Sep 2005 18:07

Re: Wiso geht eigentlich inc(form1.width); nicht?
 
Hallo,

danke für die antwort,
kannst du mir das genauer erklären, den soweit ich weiß steht inc(form1.width); für form1.width:=form1.width+1; also warum soll das einemal "modifies the parameter" und das andere mal nicht???


Ferby

Robert Marquardt 16. Sep 2005 18:07

Re: Wiso geht eigentlich inc(form1.width); nicht?
 
Denk mal nach. Eine Property besteht in Wirklichkeit aus einer Lesefunktion und einer Schreibprozedur.
Irgendwie macht ein Inc auf eine Prozedur keinen Sinn.

static_cast 16. Sep 2005 18:12

Re: Wiso geht eigentlich inc(form1.width); nicht?
 
Hoi,

kannst aber schreiben

Delphi-Quellcode:
Form1.Width:=Succ(Form1.Width);
sieht auf jeden Fall besser aus als ;)

Delphi-Quellcode:
Form1.Width:=Form1.Width+1;

alzaimar 16. Sep 2005 18:23

Re: Wiso geht eigentlich inc(form1.width); nicht?
 
Zitat:

Zitat von static_cast
Hoi,

kannst aber schreiben

Delphi-Quellcode:
Form1.Width:=Succ(Form1.Width);
sieht auf jeden Fall besser aus als ;)

Delphi-Quellcode:
Form1.Width:=Form1.Width+1;

Das ist aber Geschmackssache, in meine Anwendungen kommen mir jedenfalls keine Sukkulenten. Und auch keine Predatoren.

schöni 16. Sep 2005 22:45

Re: Wiso geht eigentlich inc(form1.width); nicht?
 
Hallo!

Beim Stöbern in der DP komme ich grad zu diesem Thread und muss da mal meinen Senf dazu geben:

Zitat:

Warning: You can?t use Inc on properties because it modifies the parameter.
Wenn das die Erklärung ist, warum:

Delphi-Quellcode:
inc(Form1.Width)
nicht funktioniert, aber:

Delphi-Quellcode:
Form1.Width := Succ(Form1.Width)
dann doch funzt, obwohl Komponenteneigenschaften mittels Streaming System uber Routinen versorgt werden, ist mir nicht ganz klar. Ist die Umsetzung dieser Pascalanweisungen denn sooooo grundverschieden? Was macht denn die Funktion SUCC() groß anders als die Prozedur INC(), wenn wir mal vom Rückgabewert der einen Funktion absehen?

Bitte klärt mich auf

Schöni

jfheins 16. Sep 2005 23:08

Re: Wiso geht eigentlich inc(form1.width); nicht?
 
Inc() verändert den ihr übergebenen Wert - schon mal versucht, eine Funktion um eins zu erhöhen ?

Fakt ist: Propertys können nicht als var-Parameter übergeben werden, weil sie nicht zwingend eine Variable repräsentatieren.

mael 16. Sep 2005 23:13

Re: Wiso geht eigentlich inc(form1.width); nicht?
 
Der eigentliche Grund ist, daß inc() und dec() System-Funktionen sind (Stichwort Compiler-Magic), die direkt in einen Assembler-Befehl umgesetzt werden. meißt INC/DEC bei inc(x,>=2) bzw dec(x,>=2) in ADD/SUB.

Man könnte natürlich in den Kompiler die Behandlung von Eigenschaften einbauen. Ich denke mal das es nicht getan wurde ist um zu verdeutlichen, daß inc/dec hier nicht "hochoptimierten" Kode erzeugt (wie es in der Hilfe heißt).
So ähnlich wie es üblich ist in C++ Operatoren meißtens dann zu verwenden wenn die Operation schnell ist, bei langsamen Operationen aber Funktionen mit Namen.

Ich fände es aber auch besser wenn es gehen würde, machbar ist es sicherlich!

DP-Maintenance 17. Sep 2005 08:18

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Ist ja eine Frage zu Delphi.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz