![]() |
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:
Nur leider funktioniert das inc(bla); anscheinend nur bei variabel. Warum geht das hier nicht? wäre ja viel einfacher anstatt:
inc(form1.width);
Delphi-Quellcode:
form1.width:=form1.width+1;
Kann mich wer aufklären, danke, ferby |
Re: Wiso geht eigentlich inc(form1.width); nicht?
Aus meiner Hilfe(F1):
Zitat:
freak |
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 |
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. |
Re: Wiso geht eigentlich inc(form1.width); nicht?
Hoi,
kannst aber schreiben
Delphi-Quellcode:
sieht auf jeden Fall besser aus als ;)
Form1.Width:=Succ(Form1.Width);
Delphi-Quellcode:
Form1.Width:=Form1.Width+1;
|
Re: Wiso geht eigentlich inc(form1.width); nicht?
Zitat:
|
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:
Delphi-Quellcode:
nicht funktioniert, aber:
inc(Form1.Width)
Delphi-Quellcode:
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?
Form1.Width := Succ(Form1.Width)
Bitte klärt mich auf Schöni |
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. |
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
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. |
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