Re: OnTimer unter Laufzeit Problem...
Delphi-Quellcode:
Merkst du was ?
NewTimer: TTimer;
NewTimer[i] Einen Array deklariert man mit Array[Min..Max] of Datentyp ;) |
Re: OnTimer unter Laufzeit Problem...
Ja, äh
Tigerman hat mir da auch schon so ein beispiel gegeben:
Delphi-Quellcode:
Nur ich versteh nich so ganz wie ich des einbinden soll ... :oops:
procedure TForm1.DoTimer(Sender: TObject);
var i: integer; begin for i := Low(ImageArray) to High(ImageArray) do with ImageArray[i] do Top := Top - 3; end; |
Re: OnTimer unter Laufzeit Problem...
Zitat:
DXC EDIT \\ Hab mir grad die Grundlagen ausgedruckt :wink: |
Re: OnTimer unter Laufzeit Problem...
Jetzt rauchen wohl allen die Köpfe ... :cry: :wink:
DXC |
Re: OnTimer unter Laufzeit Problem...
Der Code von Tigerman ist nur ein Teil. Du musst also noch den array selbst deklarieren:
Delphi-Quellcode:
Natürlich musst du die Pointer dann auch zuweisen und am schluss ide Objekte wieder freigeben.
var
NewImages: array[min..max] of TImage; ... bzw. NewImages: array of TImage; + setLength ... Alternativ kannst du dir auch mal die ObjectList, die gibts IMHO seit D6. Die verwaltet das array selbst und du brauchst dich nicht mehr darum zu kümmern. Auch das Freigeben nimmt die dir ab, wenn OwnesObject = true ist, wobei das die Voreinstellung ist. mfg Christian |
Re: OnTimer unter Laufzeit Problem...
Habs etz mal so probiert :
Delphi-Quellcode:
Kommt aber nur:
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; NewTimer: TTimer; NewImage: TImage; i: Integer; ImageArray: array[1..10] of TImage; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if not Assigned( NewTimer ) then begin NewTimer := TTimer.Create (Nil); NewTimer.Interval := 20; NewTimer.Enabled := True; NewTimer.OnTimer := DoTimer; end; 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); var i: integer; begin for i := Low(ImageArray) to High(ImageArray) do with ImageArray[i] do Top := Top - 3; end; end.
Delphi-Quellcode:
:gruebel: --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 00454B3E in Modul 'Project1.exe'. Lesen von Adresse 00000044' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- MFG DXC |
Re: OnTimer unter Laufzeit Problem...
Wie stellst du dir das vor? Wie soll das funktionieeren? Überleg mal: Was machst du da:
Delphi-Quellcode:
Alles in allem würde ich dir dringend raten dir nochmal die Grundlagen anzugucken...
var
Form1: TForm1; NewTimer: TTimer; NewImage: TImage; // auch hier: willst du jetzt das array nehmen oder die Variable? i: Integer; // Warum deklarierst du i global? Mal davon abgesehen, dass man globale Variablen sowieso meiden sollte(siehe hierzu entsprechenden Thread), warum i? Diese wird noch nicht mal benutzt, weil später ein lokales i verwendet wird ImageArray: array[1..10] of TImage; // Normal fängt man mit 0 an, aber das is nicht so schlimm implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if not Assigned( NewTimer ) then begin NewTimer := TTimer.Create (Nil); // Wo gibts du den Timer wieder frei? Sowas nennt sich dann Speicherleiche NewTimer.Interval := 20; NewTimer.Enabled := True; NewTimer.OnTimer := DoTimer; end; begin // warum noch mal n begin? NewImage := TImage.Create(Nil); // warum nimmst du denn nicht das array? Eigentlich müsste der Compiler dir auch mitteilen, dass dein array gar nicht verwendet wird. Und der Compiler zeigt die Meldungen nicht zum Spaß an... with NewImage do begin Top := 144; Left := 8; Picture.LoadFromFile('xxx.bmp'); Parent := Form1; Name := 'xxx'; // Name musst du IMHO nicht zuweisen, du organisierst ja alles im array (eigentlich) end; end; end; procedure TForm1.DoTimer(Sender: TObject); var i: integer; begin for i := Low(ImageArray) to High(ImageArray) do with ImageArray[i] do Top := Top - 3; end; mfg Christian |
Re: OnTimer unter Laufzeit Problem...
Ich verstehe nicht, wieso man mehrere Timer braucht, wenn sich alle Bilder gleich schnell bewegen sollen.
Wenn du den Timer nicht über den Designer plazieren willst (wieso auch immer), dann würde ich ihn im FormCreate erzeugen und im FormDestroy wieder freigeben. OT: @r2c2: Wieso sollte man einen Array unbedingt mit 0 beginnen? Dafür gibts ja dieses "Feature", dass man den Startwert festlegen kann. Das gibts glaube ich nur bei Delphi, bei C, C++, usw. wäre mir das nicht bekannt. Grüße Faux |
Re: OnTimer unter Laufzeit Problem...
Zitat:
Zitat:
Delphi-Quellcode:
erste recht nicht.
array['A'..'M'] of Integer
mfg Christian |
Re: OnTimer unter Laufzeit Problem...
Zitat:
Wo liegt dann noch das Problem, außer dass er ein paar Delphi-Grundlagen vergessen hat? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz