[gelöst] Erhöhung mit INC() bei SpinEdit.Value

Rund um die LCL und andere Komponenten
Antworten
catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

[gelöst] Erhöhung mit INC() bei SpinEdit.Value

Beitrag von catweasel »

Hallo

Ich habe eine SpinEdit-Komponente im Einsatz die ich automatisiert erhöhen möchte.

Wenn ich sie mit "Variable:=Variable+10" erhöhe, funktioniert das tadellos.

Code: Alles auswählen

PasswortlaengeSpinEdit.Value := PasswortlaengeSpinEdit.Value+10;


Mache ich das gleiche mit "inc(Variable, 10)" kommt es beim compilieren zu einer Fehlermeldung

Code: Alles auswählen

inc( PasswortlaengeSpinEdit.Value,10);


Fehlermeldung:

Code: Alles auswählen

unit11.pas(231,39) Error: Can't take the address of constant expressions


Geht das grundsätzlich nicht mit INC() in der Komponente?


Gruß
Michael
Zuletzt geändert von catweasel am Mi 5. Apr 2017, 18:11, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Erhöhung mit INC() bei SpinEdit.Value

Beitrag von theo »

Soviel ich weiß geht das nicht. Der Parameter ist ja keine einfache Zahl, sondern das Resultat einer Methode (Set/Get).

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: Erhöhung mit INC() bei SpinEdit.Value

Beitrag von catweasel »

theo hat geschrieben:Soviel ich weiß geht das nicht. Der Parameter ist ja keine einfache Zahl, sondern das Resultat einer Methode (Set/Get).

Müßte das dann nicht auch für

Code: Alles auswählen

PasswortlaengeSpinEdit.Value := PasswortlaengeSpinEdit.Value+10;

gelten? Das funktioniert ja.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Erhöhung mit INC() bei SpinEdit.Value

Beitrag von theo »

catweasel hat geschrieben:
theo hat geschrieben:Soviel ich weiß geht das nicht. Der Parameter ist ja keine einfache Zahl, sondern das Resultat einer Methode (Set/Get).

Müßte das dann nicht auch für

Code: Alles auswählen

PasswortlaengeSpinEdit.Value := PasswortlaengeSpinEdit.Value+10;

gelten? Das funktioniert ja.


Das ist was anderes: Lies den Wert -> Addiere 10 -> Schreib den Wert. Ein Getter kann nicht gleichzeitig ein Setter sein.

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Erhöhung mit INC() bei SpinEdit.Value

Beitrag von Mathias »

Soviel ich weiß geht das nicht. Der Parameter ist ja keine einfache Zahl, sondern das Resultat einer Methode (Set/Get).

Das dies nicht geht, müsste man auf die Assembler-Ebene gucken gehen.

Dieser Code inkrementiert ein einfache Variable um 1, die Ein- und Aus-gabe ist in beiden Fällen i.
Aber ber der property-Variable kommt die Eingabe von der Funktion von Getxxx und die Ausgabe geht in Setxxx.

Code: Alles auswählen

var
  i: Int16;
begin
  i := 1;
  asm
           Inc     i
  end;
  ShowMessage(IntToStr(i));

Wen du i im Asm-Block durch eine Property ersetzt, kommt es auch zu einem Fehler.

Oder bei addieren um 10, sieht das in Assembler so aus:

Code: Alles auswählen

  asm
           Add     i, 10
  end
Zuletzt geändert von Mathias am Mi 5. Apr 2017, 18:12, insgesamt 1-mal geändert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: Erhöhung mit INC() bei SpinEdit.Value

Beitrag von catweasel »

ok, ich denke jetzt hab´ ich es verstanden.
Danke für die Info :)

Gruß
Michael

Antworten