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
    { Private declarations }
  public
    { Public declarations }
  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: