So ich hab mal ein wenig rumexperimentiert. Jedoch freezt sich mein Programm immer noch.
Also auf dem Hauptformular gibt es einen Timer, der für die Animation ausführern soll und danach auch wiederholen. Diese Animationen sind einzelne Prozeduren in einer anderen
Unit. Nun habe ich in der anderen
Unit einen Timer erstellt um eine gewisse Zeit warten zu können, ohne jeglichen Erfolg.
Also der Timer auf meinem Hauptformular ganz billig (wird mit 2 Buttons gestartet/gestoppt):
Delphi-Quellcode:
//Effekte Timer
procedure TfrmMain.effectTimer(Sender: TObject);
begin
//Blinken Animation
if blinken1.Checked then
begin
ani_blinken();
end
//mittlere Ebene rotieren
else if rotierendeEbene1.Checked then
begin
end;
end;
Die rotierende Ebene ist noch nicht programmiert, da ich die eine Animation ja noch nicht ganz hab.
Und dann in der
Unit animations:
Delphi-Quellcode:
unit animations;
interface
uses
ExtCtrls;
type
TMyTimer =
class(TTimer)
procedure TimerProc(Sender: TObject);
end;
procedure waitpertimer(msec: Integer);
procedure ani_blinken();
var
timetoend: Integer;
timestriked: Integer = 0;
timeend: Boolean;
implementation
uses
windows, Forms, draw;
procedure TMyTimer.TimerProc(Sender: TObject);
begin
inc(timestriked);
if timestriked = timetoend
then
begin
timestriked := 0;
timeend := true;
end;
end;
procedure waitpertimer(msec: Integer);
var Timer: TMyTimer;
begin
Timer := TMyTimer.Create(
nil);
Timer.Enabled := False;
Timer.Interval := 10;
Timer.OnTimer := Timer.TimerProc;
timetoend := round(msec/10);
timeend := false;
Timer.Enabled := True;
repeat
Application.ProcessMessages;
until (timeend);
Timer.Enabled := False;
Timer.Free;
end;
//Lässt den LED Cube blinken
procedure ani_blinken();
begin
//Cube an
set_cube();
waitpertimer(500);
//Cube aus
clear_cube();
waitpertimer(500);
end;
end.
Die clear_cube und set_cube Funktionen sind in einer anderen
Unit. Dort sollen später 0815-Zeichen-Routinen rein, damit man zum Beispiel eine Ebene nicht imemr mit Schleifen füllen muss.