Autor Beitrag
DXC
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 61

WINXP + SP2
D6 Pers, D2005 Pers
BeitragVerfasst: Fr 19.08.05 14:39 
Hallo,

Leider bekomme ich bei folgendem Quellcode einen Fehler: :?

Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EInvalidCast mit der Meldung 'Ungültige Typumwandlung' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Der sinn des Quellcodes ist dass sich das Bild nach oben verschiebt...
ausblenden volle Höhe 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:
...
procedure DoTimer (Sender: TObject);
private
    { Private-Deklarationen }
...

procedure TForm1.Button1Click(Sender: TObject);
var
  NewTimer: TTimer;
  NewImage: TImage;
begin
  NewTimer := TTimer.Create (Nil);
  NewTimer.Interval := 20;
  NewTimer.Enabled := True;
  NewTimer.OnTimer := DoTimer;
  begin
    NewImage := TImage.Create(Nil);
    with NewImage do
      begin
      Top := 144;
      Left := 8;
      Picture.LoadFromFile('xxx.bmp');
      Parent := Form1;
      Name := 'xxx';
      end;
  end;
end;


procedure TForm1.DoTimer(Sender: TObject);
begin
  (Sender as TImage).Top := (Sender as TImage).Top - 3;
end;


Danke für jede Antwort... :wink:

MFG
DXC

Moderiert von user profile iconTino: "Hilfe" im Titel entfernt. Quote-Tags hinzugefügt.
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Fr 19.08.05 14:55 
Der Fehler liegt in Zeile 32. Der Sender ist vom Type TTimer und nicht TImage. ;-)

Lg Martin
DXC Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 61

WINXP + SP2
D6 Pers, D2005 Pers
BeitragVerfasst: Fr 19.08.05 18:57 
Hallo,

Leder funktioniert es dann auch nicht (habe es auch schon versucht :wink: ).

Kommt nur der Fehler:
ausblenden Delphi-Quelltext
1:
2:
3:
[Fehler] Unit1.pas(53): E2003 Undefinierter Bezeichner: 'Top'
[Fehler] Unit1.pas(53): E2003 Undefinierter Bezeichner: 'Top'
[Fataler Fehler] Project1.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden


Hm, vielleicht hab ich im allgemeinen etwas falsch gemacht, hier noch mal der Quellcode:

ausblenden volle Höhe 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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure DoTimer (Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  NewTimer: TTimer;
  NewImage: TImage;
begin
  NewTimer := TTimer.Create (Nil);
  NewTimer.Interval := 20;
  NewTimer.Enabled := True;
  NewTimer.OnTimer := DoTimer;
  begin
    NewImage := TImage.Create(Nil);
    with NewImage do
      begin
      Top := 144;
      Left := 8;
      Picture.LoadFromFile('xxx.bmp');
      Parent := Form1;
      Name := 'xxx';
      end;
  end;
end;


procedure TForm1.DoTimer(Sender: TObject);
begin
  (Sender as TTimer).Top := (Sender as TTimer).Top - 3;
end;


end.


Wäre nett wenn Ihr mir beim lösen des Problems helfen könntet...

MFG
DXC
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Fr 19.08.05 19:06 
du weist dass ein Timer kein Top hat, oder?
Ausserdem ist der NewTimer ja dann eine lokale Variable (auch das Image.) was bedeutet in anderen Prozeduren wirds schwer, darauf zuzugreifen...
Der Timer wird nur solange existieren, bis die Button Prozedur einmal durchgelaufen ist. Und es ist unwahrscheinlich, dass das solange dauert, wie der Intervall eines Timers.
Ich hab KEINE ahnung warum du unbedingt mit dem sender arbeiten willst (der sender ist wie der name schon sagt das objekt, das die prozedur auslöst. also der Timer. willst du den (unsichtbaren) timer verschieben? geht nicht.
mach die variable NewImage global und erzeuge sie lieber im Form Create (oder setze das Image von Hand auf die Form, das cheint mir auch schlauer. das gleiche geht auch mit dem Timer.)
Ich hoffe ich hab dir Helfen können..

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
DXC Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 61

WINXP + SP2
D6 Pers, D2005 Pers
BeitragVerfasst: Fr 19.08.05 19:35 
Hallo,

erstmals Danke denn jetzt funktioniert es endlich hab es jetz so gelöst:

ausblenden Delphi-Quelltext
1:
NewImage.Top := NewImage.Top - 3;					

... und NewImage und NewTimer Global definiert :wink:

Aber wenn ich jetzt 2x schnell hintereinander auf den Button klicke dann kommt das 2-te Bild aber doppelt so schnell :shock: .

So wollte ich das eigentlich nicht kann mir die frage auch noch jemand bitte beantworten :oops: ? (@Mod: Habe extra kein neues Topic erstellt weil es einfach zusammengehör, hoffe du verstehst mich... :wink: )

Danke, danke, danke, ... :wink:

MFG
DXC