Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Simple "Bewegung"
Arbengie - Di 19.01.10 17:30
Titel: Simple "Bewegung"
Hi, neues Problem:
Wenn ich den Button1 an klicke, soll sich dass Label1 5 Pixel nach links bewegen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
var x:real; x1:real;
procedure TForm1.Button1Click(Sender: TObject); begin x:=(Label1.Left); x1:=x+5; Label1.Left:=(x1); end;
end. |
Fehlermeldung ist:
[Error] Unit1.pas(33): Incompatible types: 'Integer' and 'Real'
Der Fehler liegt irgendwo an den Types, da hab ich meine Schwierigkeiten, kann mir vllt auch einer eine kleine Übersicht machen was, was ist?
Niko S. - Di 19.01.10 17:43
Mach mal
Delphi-Quelltext
1:
| Label1.Left := trunc(x1); |
max1235 - Di 19.01.10 17:51
genau. also es ist so:
du hast die evariablen als real deklariert. der abstand zum rand muss aber integer sein. unterschied: real kann eine kommazahl sein. integer ist eine ganzzahl.
Arbengie - Di 19.01.10 17:52
danke hat geklappt :)
jaenicke - Di 19.01.10 17:52
Vor allem:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); var x:real; x1:real; begin x := Label1.Left; x1 := x + 5; Label1.Left := Trunc(x1); end; |
Denn globale Variablen sollte man nur im Notfall benutzen...
Und die überflüssigen Klammern können manchmal Probleme machen, auch wenn sie meistens nur überflüssig sind.
Zudem kannst du Integer als Datentyp benutzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var x, x1: Integer; begin x := Label1.Left; x1 := x + 5; Label1.Left := x1; end; |
Und außerdem: Wozu überhaupt Variablen?
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Label1.Left := Label1.Left + 5; end; |
Hidden - Di 19.01.10 17:52
Hi :)
Die Deklaration als Real macht nur dann Sinn, wenn auch Kommazahlen erwünsht sind. Sonst nimmt man von vornherein Integer, und muss nicht erst eine Kommazahl in eine Ganzzahl verwandeln.
Und dann würde ich vielleicht noch nicht mit globalen Veriablen arbeiten. Viel einfacher ist das hier: Label1.Left := Label1.Left + 5;
mfG,
E: Ich war schon auf Absenden als 2x3x der orangene Kasten kam :cry:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!