Entwickler-Ecke
Multimedia / Grafik - Farbenwechseln-Nach zufall?
Pdd - Sa 22.01.05 16:29
Titel: Farbenwechseln-Nach zufall?
Hi @all
Ich habe ne frage: Ich will mit der funktion canvas etwas zeichnen und das soll in einer nach zufall bestimmten farbe passieren. Da ich aber nicht zig-tausende if :lol: abfragen machen will, denke ich das man das auch anders machen kann.
Ich habe schon gesucht aber nichts gefunden. Gibt es da vieleicht ein befehl wie:
canvas.pen.color:=clrandom??? :roll:
Ich wäre dankbar für jeden-auch noch so verrückten vorschlag.
mfg Pdd :roll:
Moderiert von
Christian S.: Topic aus Off Topic verschoben am Sa 22.01.2005 um 16:22
Delete - Sa 22.01.05 16:31
Delphi-Quelltext
1:
| color := RGB(random(256), random(256), random(256)); |
Edit: Fehler entfernt.
BenBE - Sa 22.01.05 16:34
Einfacher und schneller:
Delphi-Quelltext
1:
| Color := Random($01000000); |
cybersoul - Sa 22.01.05 16:34
Oder besser...
Quelltext
1:
| color := RGB(random(256), random(256), random(256)); |
Sonst kommt niemals Weiß (Rot=255; Grün=255; Blau=255) zustande.
cybersoul - Sa 22.01.05 16:35
Die Möglichkeit von BenBE ist natürlich besser,
ich war nur zu langsam.
Pdd - Sa 22.01.05 16:38
Danke :) :) :)
Funktioniert
Julian W. - Di 05.04.05 22:11
Hi Leute,
habe ein ganz ähnliches Problem. Gibt es eine Funktion, mit der man per random oder so zufällig eine Label ueberschrift auswählen kann?
Mit anderen Worten,
ich habe
- Hallo
- Wie gehts
- Tschüss
zur auswahl(als mögliche label captions) und möchte jetzt eine davon per zufall auswählen. Ist das soweit noch nachvollziehbar was ich meine :?: :?: :?: :?
Natürlich könnte mann mit random eine zufällige Zahl erzeugen und dann mit if die Überschriften zuordnen. Ich habe aber leider 20-30 zur auswahl und das würde mir dann doch zu viel.
Ich hoffe ihr versteht mein Problem und könnt mir helfen.
Viele Grüße Julian
P.s.: Bin nicht wütend aber ich finde den Smiley einfach witzig!! :arrow: :motz:
Kroni - Di 05.04.05 23:26
Case of bla....
oder Definier ein Array of String.....
dort kannst du dann deine Captions einspeichern und die dann per ZUfall aufrufen!
GTA-Place - Mi 06.04.05 06:51
Schreib alle Wörter in eine Stringlist und zeigs dann so an:
Delphi-Quelltext
1:
| Label1.Caption := MyStringList.String[Random(20)+1]; |
Wenn als Zufall 15 rauskommt und das 16. Wort = "Hallo" ist, dann ist die Caption des Labels auch "Hallo".
BenBE - Mi 06.04.05 09:08
Ohne +1, da StringListen mit Index 0 anfangen.
Lossy eX - Mi 06.04.05 10:09
Das Beste wäre dann auch noch, wenn du die Größe aus der Stringliste holst. Dann musst du nicht mehr wissen wie viele Texte drin stecken.
Delphi-Quelltext
1:
| Label1.Caption := MyStringList.String[Random(MyStringList.Count)]; |
Julian W. - Mi 06.04.05 16:09
Danke schonmal so weit.
Aber mal ne ganz dumme Frage :oops: : Wie erstellt mann denn so eine StringListe?
Ich habe mal in der Delphi hilfe geguckt, das hat mich dann nur noch mehr verwirrt. :? :eyecrazy:
Und im Internet oder hier im Forum hab ich auch nix vernümftiges gefunden.
Kann mann die nicht mit nem memo feld erstellen oder so?? Gruß Julian
Tino - Mi 06.04.05 16:16
Julian W. hat folgendes geschrieben: |
Wie erstellt mann denn so eine StringListe? |
In dem Du das Forum fragst:
STRINGLIST ERSTELLEN. Gleich im 2. Topic solltest Du die Antwort finden.
Gruß
Tino
Karlson - Mi 06.04.05 16:23
Lossy eX hat folgendes geschrieben: |
Das Beste wäre dann auch noch, wenn du die Größe aus der Stringliste holst. Dann musst du nicht mehr wissen wie viele Texte drin stecken.
Delphi-Quelltext 1:
| Label1.Caption := MyStringList.String[Random(MyStringList.Count)]; | |
Na, wenn dann aber richtig ;)
Delphi-Quelltext
1:
| label1.caption := MyStringList[Random(MyStringList.Count - 1)]; |
Lossy eX - Mi 06.04.05 16:53
Damit hättest du erfolgreich das letzte Item ausgeschlossen. ;-)
Der übergene Wert stellt nicht den größtmöglichen Wert sondern die Reichweite dar. Da Random bei 0 mit zählen anfängt stimmt deines leider nicht. Siehe auch Beitrag
cybersoul vom 22.01. ;-)
Julian W. - Mi 06.04.05 16:58
Wäre es dann nicht am geschicktesten, wenn mann die Strings in eine Txt oder ini datei schreibt und sie dann aufruft?
Moderiert von
AXMD: :?:-Taste war kaputt
zemy - Mi 06.04.05 17:03
Klingt nach kanonen und Spatzen... Was spricht dagegen, die paar Texte direkt im Code zu verankern, wenn du sie nicht wirklich extern brauchst?
Karlson - Mi 06.04.05 17:18
Lossy eX hat folgendes geschrieben: |
Damit hättest du erfolgreich das letzte Item ausgeschlossen. ;-)
Der übergene Wert stellt nicht den größtmöglichen Wert sondern die Reichweite dar. Da Random bei 0 mit zählen anfängt stimmt deines leider nicht. Siehe auch Beitrag cybersoul vom 22.01. ;-) |
hmmm. da muss ich noch mal nachschauen :lol:
edit: Okay, stimmt. Dein Tippfehler mit dem MyStringList.String[...] bleibt aber ;)
UGrohne - Mi 06.04.05 17:24
Karlson hat folgendes geschrieben: |
hmmm. da muss ich noch mal nachschauen :lol: |
Man, jetzt wollte ich gerade auf Deinen ursprünglichen Beitrag antworten und Du änderst ihn einfach wieder :twisted:
Aber hier der Ausschnitt aus der Hilfe:
Zitat: |
Delphi-Syntax:
function Random [ ( Range: Integer) ];
Beschreibung
In Delphi gibt Random eine Zufallszahl im Bereich 0 <= X < Range zurück. Wird der Parameter Range nicht angegeben, liefert Random einen Real-Wert im Bereich |
< Range bedeutet also, dass in Deinem Beispiel die Funktion etwas kleiner als 4, also maximal 3 zurückliefern würde, womit das letzte Item niemals angezeigt werden würde ;-)
//EDIT: Musst Du es denn schon wieder editieren? *grrr*
Julian W. - Mi 06.04.05 19:47
zemy hat folgendes geschrieben: |
Klingt nach kanonen und Spatzen... Was spricht dagegen, die paar Texte direkt im Code zu verankern, wenn du sie nicht wirklich extern brauchst? |
Wie soll dass den gehen??
Ich habe hir mal das, was ich bis jetzt geschrieben habe ihr könnt es euch ja mal angucken. Irgendwie geht das nicht und ich weiß nicht wo dran`s liegt. :(
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1; f: string; LList: TStringlist; implementation
{$R *.dfm}
procedure test;
begin f := 'C:\Programme\Borland\Delphi7\Projects\Neu Textdatei.ini' ; LList := Tstringlist.Create; LList.loadfromfile(f); LList.Free; end;
procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption := LList.String[Random(LList.Count)]; end;
end. |
Gruß Juli
Moderiert von
Christian S.: Delphi-Tags hinzugefügt.
Lossy eX - Do 07.04.05 10:15
Also dein Problem ist, dass du die Liste zwar Ordnungegemäß erstellst, sie auch lädst aber dummerweise direkt hinterher gleich wieder frei gibst. Damit bist du dann genau da wo du auch am Anfang gewesen bist. Ich würde im Übrigen keine globale Variablen nehmen sondern diese als Bestandteil des Forms implementieren.
Um mal mit Köpfchen zu Nageln würde ich es so machen.
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); private fList: TStringList; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin fList := TStringList.Create; fList.LoadFromFile (''); end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin fList.Free; end;
procedure TForm1.Button1Click(Sender: TObject); begin if fList.Count then Label1.Caption := fList[Random(fList.Count)]; end;
end. |
Im OnCreate wird die Liste erstellt und mit Leben gefüllt und im OnClose wird sie wieder gelöscht. In der Zwischenzeit kannst du damit machen was du willst.
Ich würde den fList.Count immer abfragen bevor du auf die Liste zugreifst. Wenn du Random mit 0 aufrufst befindet sich dessen resultat zwischen 0 und 1 auf Fließkommabasis. Abgesehen davon fürt ein Zugrif auf ein nicht vorhandenes Element der Liste dazu, dass du einen Fehler bekommst. Was bei einer ladbaren Textadatei schon passieren kann, wenn jemand dran gedreht hat. ;-)
Julian W. - Do 07.04.05 23:10
@ Lossy eX
Hey, wer sagt's denn :lol: :D :dance: :dance2: :dunce: :party:
Habs endlich hinbekommen!! Vielen, vielen dank für deine/eure Hilfe. Gruß Juli :wink: :mrgreen:
Freeman - Sa 21.05.05 21:06
Hey Leute, mein Problem würde auch dazu passen, und zwar möchte ich ebenfalls die Farbe meines Zeichenstiftes zufällig wechseln lassen, aber ich will, dass es nur zwischen Rot, Blau, Schwarz , Grün und Gelb wechselt.......gibts da ne möglichkeit ???
Greetz
Freeman
OK....hab das Prob jetzt auf andere Weise gelöst....Antwort nicht mehr nötig !!!!! :!:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!