Guten Morgen,
als erstes mal entschuldige ich mich für den schlecht gewählten Titel, etwas besseres ist mir aber nicht eingefallen.
Jetzt zu meinem Problem:
Ich möchte für den About-Dialog meines Programmes eine kleine Spielerei machen, d.h. genau genommen sollen wild wechselnde Buchstaben nach einander in den richtigen Text umgewandelt werden, wir man es vielleicht aus "Hacker-Filmen" her kennt, oder bei Entschlüsselungen. Ich weiß das hört sich kompliziert an, im Anhang findet ihr eine Demo wie es aussehen soll.
Das ganze habe ich wie folgt versucht:
Delphi-Quellcode:
var
Letters : array[1..12] of Boolean;
x : Integer;
function Chaos : String;
var
buchstabe, s, t: String;
i : Integer;
begin
for i := 0 to 6 do
begin
buchstabe := Chr((Random (26) + 65));
if (Boolean(Random(2))) then
begin
buchstabe := LowerCase(buchstabe);
end;
s := form1.label1.caption;
if Pos(buchstabe, s) <> 0 then begin
buchstabe := Chr((Random (26) + 65));
if (Boolean(Random(2))) then
begin
buchstabe := LowerCase(buchstabe);
end;
end
else
result := buchstabe;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Letters[1] = false then label1.Caption := Chaos;
if Letters[2] = false then label2.Caption := Chaos;
if Letters[3] = false then label3.Caption := Chaos;
if Letters[4] = false then label4.Caption := Chaos;
if Letters[5] = false then label5.Caption := Chaos;
if Letters[6] = false then label6.Caption := Chaos;
if Letters[7] = false then label7.Caption := Chaos;
if Letters[8] = false then label8.Caption := Chaos;
if Letters[9] = false then label9.Caption := Chaos;
if Letters[10] = false then label10.Caption := Chaos;
if Letters[11] = false then label11.Caption := Chaos;
if Letters[12] = false then label12.Caption := Chaos;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
var
i : Integer;
txt : String;
begin
txt := 'DelphiPraxis';
for x := 0 to 1 do
begin
i := Random(12)+1;
if Letters[i] = false then
begin
TLabel(Form1.Components[i]).Caption := txt[i];
Letters[i] := true;
Application.ProcessMessages;
end
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
q : Integer;
begin
Randomize;
Timer1.Enabled := true;
Timer2.Enabled := true;
end;
Der erste Timer prüft ob die Boolean-Variablen den wert false haben, wenn ja wird wieder Chaos ausgeführt, d.h. ein neuer Buchstabe wird eingesetzt. Der zweite Timer generiert eine Zufallszahl von 1-12, weißt dann dem Label mit der generierten Nummer den Buchstaben aus der Variable txt zu. So sollte es jedenfalls sein. Leider jedoch kommen beim ausführen des Programmes alle Buchstaben durcheinander und auch andere Buchstaben wie z erscheinen. Weiß jemand was ich falsch mache oder wie man sowas sonst machen könnte ? Ich bin für jegliche Hilfe sehr dankbar.
P.S.: Solltet ihr meinen Code testen wollen, stellt Timer1 auf ein Interval von 105, Timer2 auf 1000.
Thx