Hey liebe wwwler,
ich arbeite momentan an einem Programm, das dazu in der Lage ist die Uhrzeit im Dualsystem darzustellen. Ich bin mittlerweile bei einem Prototypen angelangt, der dazu in der Lage ist von der Uhrzeit null an zu rechnen. Zumindestens fast, denn aus irgendeinem Grund wird mein erstes Shape (ich benutze Shapes als Punkte, wobei ein roter Punkt eine eins darstellt und ein weißer eine null) nach der ersten Sekunde rot und danach weis, was ja auch noch richtig ist. Doch sollte dann das nächste Feld rot werden und danach das erste wieder rot, dann nur das dritte rot, u.s.w. ich denke ich kann davon ausgehen, dass ihr wisst, wie man im Dualsystem zählt. Nun ja bei mir wird leider stets nur das erste Feld rot, dann weis, dann wieder rot, gleiches passiert übrigens auch bei den minuten und den stunden. Ich selbst habe schon gesucht, jedoch scheine ich den Fehler zu übersehen.
Hier der Quelltext:
unit Binaeruhr;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, BinaeruhrHeader, StdCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
procedure ShapesErzeugen;
procedure Zahlenlesen(a:array of integer; Shapes:array of TShape);
var
Form1: TForm1;
minZaehler, stuZaehler:integer;
sek, min, stu:array [0…10] of integer;
sekShapes, minShapes, stuShapes:array of TShape; //Länge:6,6,5
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
var clear, Zaehler : integer;
begin
ZaehlerStellen;
for Zaehler:=0 to 9 do
sek[Zaehler]:=Dualzaehlen(sek);
inc(minZaehler);
Zahlenlesen(sek, sekShapes);
if minZaehler=60 then
begin
ZaehlerStellen;
for Zaehler:=0 to 9 do
min[Zaehler]:=Dualzaehlen(min);
inc(stuZaehler);
for clear:=0 to 9 do
sek[clear]:=0;
Zahlenlesen(min, minShapes);
minZaehler:=0;
end;
if stuZaehler=60 then
begin
ZaehlerStellen;
for Zaehler:=0 to 9 do
stu[Zaehler]:=Dualzaehlen(stu);
for clear:=0 to 9 do
min[clear]:=0;
Zahlenlesen(stu, stuShapes);
StuZaehler:=0;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var clear : integer;
begin
minZaehler:=0;
stuZaehler:=0;
ShapesErzeugen;
for clear:= 0 to 9 do
begin
sek[clear]:=0;
min[clear]:=0;
stu[clear]:=0;
end;
end;
procedure ShapesErzeugen;
var i, oben, links:integer;
begin
SetLength(sekShapes, 6);
SetLength(minShapes, 6);
SetLength(stuShapes, 5);
oben:=32;
links:=24;
for i:=0 to 5 do
begin
sekShapes[i]:= TShape.Create(nil);
sekShapes[i].Parent:=Form1;
sekShapes[i].Shape:=stCircle;
sekShapes[i].Top:=oben;
sekShapes[i].Left:=links;
oben:=oben+16;
sekShapes[i].Width:=9;
end;
oben:=32;
links:=88;
for i:=0 to 5 do
begin
minShapes[i]:= TShape.Create(nil);
minShapes[i].Parent:=Form1;
minShapes[i].Shape:=stCircle;
minShapes[i].Top:=oben;
minShapes[i].Left:=links;
oben:=oben+16;
minShapes[i].Width:=9;
end;
oben:=32;
links:=166;
for i:=0 to 4 do
begin
stuShapes[i]:= TShape.Create(nil);
stuShapes[i].Parent:=Form1;
stuShapes[i].Shape:=stCircle;
stuShapes[i].Top:=oben;
stuShapes[i].Left:=links;
oben:=oben+16;
stuShapes[i].Width:=9;
end;
end;
procedure Zahlenlesen(a:array of integer; Shapes:array of TShape);
var lauf, Zahl:integer;
begin
for lauf:= 0 to length(Shapes)-1 do
begin
if a[lauf] = 1 then
Shapes[lauf].Brush.Color:=clred;
if a[lauf] = 0 then
Shapes[lauf].Brush.Color:=clwhite;
end;
end;
end.
unit BinaeruhrHeader;
interface
function Dualzaehlen (a:array of integer): integer;
procedure ZaehlerStellen;
var Nr, Zaehler:integer;
implementation
procedure ZaehlerStellen;
begin
Zaehler:=0;
end;
function Dualzaehlen (a:array of integer):integer;
var lauf:integer;
begin
if Zaehler=0 then
begin
lauf:=-1;
repeat
inc(lauf);
if a[lauf]=0 then
a[lauf]:=1
else
a[lauf]:=0;
until a[lauf]=1;
end;
result:=a[Zaehler];
inc(Zaehler);
end;
end.
Ich weis, dass das ganze noch nicht sehr übersichtlich ist und eigentlich müssten die selbst erstellten procedures auch in die Headerdatei, aber die feinarbeiten erledige ich noch zum Schluss. Wer das gesamte Programm einsehen möchte kann es unter http://rapidshare.com/files/378920275/Bin__ruhr.rar runterladen.
Schon mal im voraus vielen Dank, da ich aus Erfahrung weis, dass man sich auf die Mitglieder dieses Forums verlassen kann.
lg
bluebutton