![]() |
Zufallsnamen erzeugen...
moin.
Ja, ich wollte wiessen wie das geht? Wenn man z.B. auf einen Butteon klickt und dann werden in den Editfeldern Zufällige Namen erzeug! Hilfe... :?: |
meinst Du sowas?
Delphi-Quellcode:
function RandName(Length : Integer):String;
var i : Byte; begin randomize(); result := ''; SetLength(Result,Length); for i := 0 to Length do begin Result[i] := Char(Random(25)+65); end; end; |
Hi!
Eine weitere überlegegung wäre einfach 3 Arrays zu definieren in denen du dann 3-Silbige Namen speicherst (also 1 Array für 1te Silbe, usw.). Dann rufst du einfach dreimal hintereinander Random auf liest mit der zahl dann die Silbe aus dem Array raus und hast so deinen zusammengefummelten Namen. :mrgreen: |
Zitat:
|
Zitat:
|
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin Label1.Caption := RandName(8); end; |
Jain. Also das ist schon in der Richtung, aber ich will Richtigen Namen haben. Also die Vorschlag von phlux ist schon in die Richtung, ich weiss bloss nicht wie ich es machen soll! :oops:
|
Hi!
Also mal ein grobes Code Beispiel:
Delphi-Quellcode:
//Global definierst du dir 3 Arrays, diese müssen global deklariert sein weil man sie sonst vorher nicht initialisieren kann
var Silbe_Anfang: Array[0..2] of String = ('am','zum','ent'); Silbe_Mitte: Array[0..2] of String = ('put','bei','fern'); Silbe_Ende: Array[0..2] of String = ('ieren','spiel','en'); //Dann irgendwo im Form.OnCreate event einmal Randomize ausführen procedure TForm1.FormCreate(Sender: TObject); begin Randomize; end; //Schließlich auf Knopfdruck Zufallswörter generieren procedure TForm1.Button1Click(Sender: TObject); var i, j, k: Integer; begin //Label leeren Label1.Caption := ''; //Zufallszahl erzeugen i := Random(2); //Mit Zflszahl Silbe aus dem Array auslesen und Label.Caption hinzufügen Label1.Caption := Label1.Caption + Silbe_Anfang[i]; j := Random(2); Label1.Caption := Label1.Caption + Silbe_Mitte[j]; k := Random(2); Label1.Caption := Label1.Caption + Silbe_Ende[k]; end; |
Delphi-Quellcode:
hier so etwa der Vorschlag von Phlux, müsstes halt die Silben entsprechen ändern... ?
function RandName2:String;
var S1 : array [0..4] of String; S2 : array [0..4] of String; S3 : array [0..4] of String; begin S1[0] := 'gen';S1[1] := 'sen';S1[2] := 'fen';S1[3] := 'ten';S1[4] := 'pen'; S2[0] := 'gan';S2[1] := 'san';S2[2] := 'fan';S2[3] := 'tan';S2[4] := 'pan'; S3[0] := 'gon';S3[1] := 'son';S3[2] := 'fon';S3[3] := 'ton';S3[4] := 'pon'; randomize(); result := S1[Random(4)]+S2[Random(4)]+S3[Random(4)]; end; |
Phlux war schneller...
|
Jepp, und ich würd Randomize nur einmal ausführen und nicht jedesmal in der Function :wink:
|
Ist mir schon klar, aber da ich nur die Funktion gepostet habe, ist es, meiner Meinung nach, besser dieses dort hineinzuschreiben, damit es nicht vergessen geht.
Verstanden! :evil: Achnein, nicht böse gemeint, aber Du verstehst schon was ich meine, oder? :D |
kaykay, ich wollte damit auch nicht haarspalterisch erscheinen :wink:
ist halt nur als hinweis gedacht das es so falsch ist. aber solange es so funzt zum teufel mit den regeln *G :mrgreen: |
Danke Jungs :D , Aber wie kann ich richtige Namen erzeugen z.B.: Alex, Mike, Christian, Wolfgang, Fridolin...usw.?
|
Vieleicht indem Du ein Array mit ca hundert solchen Namen erstellst, und dann von diesem einen ausliest...
oder wie stellst Du dir vor sonst richtige Namen zu erzeugen??? |
Wenn es sein muss :lol: . aber ich habe versucht statt silben richtige Namen zu schreiben. aber es wernden nur zwei der ersten namen erzeigt.warum eigentlich? Und wie geht das mit ca. 100 Namen aufschreiben?
|
Falls dir diese Kunstnamen nicht reichen bzw. missfallen kannst du das ganze auch mit nur einem Array machen, die prozedur wird dann halt entsprechend gekürzt. Ich weiß ja nicht wieviele Namen du in den Array schreiben willst, aber vllt macht es Sinn die Namen in eine Textdatei auszulagern und dann ggf. in den Array zu laden.
|
Delphi-Quellcode:
Ergebnis: Auf Label 1 kommt zufällig einer deiner hundert Namen. Vielleicht willst du sie aber auch aus einer Datei auslesen, hätte ein paar Vorteile...
namen: array[0..99] of string = ({so, deine namen, als string mit Kommas (100 Stück)});
//in der Procedure: Label1.Caption := namen[random(99)]; //und noch bei starten (also im Project-Source oder onCreate ein Randomize... --- hey phlux, wir könnten unsere Gehirne zusammenpacken, dann müsste man so was nicht doppelt denken... :freak: |
Ja, wäre auch nicht schlecht. Und welche Vorteile hätte es? Ich meine die Namen kann der Benutzer jederzeit ändern! :?:
|
Stichwort Strings in resourcen packen *G
Zitat:
|
und die namen aus ressourece laden?
|
Genau mit dem Delphi-Resourceneditor ne Resource erstellen, in der dann die Strings abspeichern (durchnummeriert von 1..unendlich) und dann wieder auslesen.
|
ja ressource hab ich schon erstellt, wie kann ich die in mein Progamm importieren?
|
Füll dir eine Stringlist mit echten Namen (von Hand) und lass dir eine Zufallszahl berechnern. Als Ausgabe dann Stringlist[Zufallszahl] ...
Warum einfach wenns auch kompliziert geht :lol: |
Delphi-Quellcode:
zugreifen kann ich dir nur eine Möglichkeit ohne die VCL geben.
{$R ressource.res}
Chris |
herdamit! :lol:
|
Hellas!
Delphi-Quellcode:
Ohne Funktionsgewähr, aus dem Delphikochbuch abgetippt und modifiziert :mrgreen:
function GetResString(Nr: Integer): String;
var p: PChar; begin p := StrAlloc(256); LoadString(hInstance, Nr, p, 255); Result := p; StrDispose(p); end; Nr, ist die Nummer deines Strings in der Resource!! |
Ist nicht wahr. ich habe das Buch auch aber diese Funktion hab ich nicht gefunden? Was für eins ist es? Ich kann doch nicht sooo blöd :freak: :nerd: sein,oder? trotzem danke sehr!
|
Im Delphi Kochbuch 5 auf seite 1037 (ausm kopf jetz)
R368 Ressourcen einbinden (nicht ausm Kopf) |
ähm warum denn eine Resource? Entweder in den SourceCode (wenn mans nicht ändern soll) oder in eine txt/ini, wenn jeder seine eigenen Namen machen darf. Ist meine Meinung!
|
Ja genau, soll denn der User den Sourcecode bearbeiten können, oder habe ich dich falsch verstanden, NeoDeluxe???
|
Das Problem ist ja das der Array irgendwann sollte er 100 Namen oder so drin haben ganz schön ungemütlich im Quelltext wird ;) ich finde sowas sollte man auslagern.
|
Zitat:
|
Wenn er es aber nicht editierbar lassen will???
|
heul doch :tongue:
dann kann er es von mir aus in eine Resource packen... ich gebe mich ja schon geschlagen! |
Am einfachsten realisierbar wäre doch eine Textdatei mit Cäsar-Verschlüsselung. Ich habe so etwas schon mal gemacht und könnte mal meinen Code posten. (@Nailor: Unser Satzgenerator, aber ohne die wesentlichen Programmteile ;-) )
|
Hülf! Die Hesse komme!!
Egal ist eure Cäsar Verschlüsselung ne einfache XOR Verschlüsselung?? Oder was habt ihr da gebastelt? Ach ja, die Strings sind immer noch mit einem Resourcen-Hacker (ResHack, zb.) editierbar, in der compilierten(!) .exe! |
Du kennst keine Cäsar-Verschlüsselung? a=b b=c... Das ist sehr schwer. Ich poste mal meinen Satzgenerator, bevor Braincode seinen postet.
PS: Du kannst auch eine 3DES-Verschlüsselung auf die Strings hetzen. Aber es gilt doch wohl der Grundsatz der Verhältnismäßigkeit. PPS: Aprops Cäsar. Ich hab mal eine mit variabler Verschiebung. Und mit variabler Verschiebungs-Verschiebung gemacht.... |
Als unter dem Schema sagt mir das was also einfache XOR Verschlüsselung (vom Prinzip her zumindest) zeig mal ein bisschen Code :wink:
|
Liste der Anhänge anzeigen (Anzahl: 1)
Hab ich mal gemacht, als mir langweilg war:
Delphi-Quellcode:
schon länger her, aus meiner Anfangszeit. Ich hab ihn jetzt 1:1 gepostet. Also keine pingeligen Anmerkungen, ich weiß (vieles) mittlerweile selbst besser. Prinzipielle Anregungen natürlich gerne. Ich nutze den Code nicht mehr, ich nehme:
unit NailCrypt;
interface type TKeyArray = Array of String; //Klasse mit dem Ergebnis TNailCrypt = Class //Die Crypt-Klasse mit Funktionen public function OpenKeyFile(Filename: String): TKeyArray; function Encrypt(Plain_Text: String; KeyToUse: TKeyArray; Offset: integer): String; function Decrypt(Crypted_Text: String; KeyToUse: TKeyArray; Offset: integer): String; end; implementation function TNailCrypt.Encrypt(Plain_Text: String; KeyToUse: TKeyArray; Offset: integer): String; var i,j: integer; //Schleifenvariablen lpt,lks,lka: integer; //Längenangaben: PlainText, KeyStrings und KeyArray begin lka := length(keytouse); //Anzahl der Schlüsselzeilen lks := Length(KeyToUse[0]); //Länge der Schlüssezeilen lpt := Length(Plain_Text); //Länge des zu verschlüsselnden Textes SetLength(Result,lpt); //Länge des Ergebnisses for i := 1 to lpt do //Den kompletten String lang for j := 1 to lks do //Die komplette Schlüssel-Zeile if Plain_Text[i] = KeyToUse[lka-1,j] then //vergleichen begin Result[i] := KeyToUse[(i-1+offset) mod (lka-1),j]; //und den entsprechenden Eintrag Break; //wählen und abbrechen end else if j = lks then //Wenn nicht gleich und alle durch Result[i] := Plain_Text[i]; //alten nehmen end; function TNailCrypt.Decrypt(Crypted_Text: String; KeyToUse: TKeyArray; Offset: integer): String; var i,j: integer; //Schleifenvariablen lct,lks,lka: integer; //Längenvariablen begin lka := Length(KeyToUse); //Anzahl der Schlüsselzeilen lks := Length(KeyToUse[0]); //Länge der Schlüssezeilen lct := Length(Crypted_Text); //Länge der zu entschlüsselnden Textes SetLength(Result,lct); //Länge des Ergebnisses for i := 1 to lct do //Den kompletten String lang for j := 1 to lks do //Die komplette Schlüssel-Zeile if KeyToUse[(i-1+offset) mod (lka-1),j] = Crypted_Text[i] then //vergleichen begin Result[i] := KeyToUse[lka-1,j]; //und den entsprechenden Eintrag Break; //wählen und abbrechen end else if j = lks then //Wenn nicht gleich und alle durch Result[i] := Crypted_Text[i]; //gleich lassen end; function TNailCrypt.OpenKeyfile(FileName: String): TKeyArray; var SomeFile: TextFile; Buffer: String; begin AssignFile(SomeFile,FileName); //File Assign Reset(SomeFile); //und Reset SetLength(Result,0); //Schlüssellänge einstellen while not eof(SomeFile) do //Die komplette File lang begin SetLength(Result, Length(Result) + 1); //Schlüssellänge erhöhen, Readln(SomeFile,Buffer); //Zeile einlesen Result[High(Result)] := Buffer; //und speichern end; closefile(SomeFile); //File Close end; end. ![]() PS: Anwendungsbeispiele:
Delphi-Quellcode:
verschlüsselungen und entschlüsselungen (der gleichen art) kann man addieren, wenns 0 gibt, ist der Text wieder "plain".
for Count := 1 to Listbox1.Items.Count do
Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,0); Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,(Count - 1) mod 10 + 1); Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,(Count - 1) mod 10); Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,Count); Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,Count - 1); Listbox1.Items.Strings[Count - 1] := Crypting.Encrypt(Listbox1.Items.Strings[Count - 1], Key,1); //einen davon Die Schlüsseldatei ist eine Textdatei mit allen erlaubten Zeichen. ("durchgeschüttelt"). Je mehr Zahlen, desto sicherer (obwohl das ganze nie wirklich sicher wird...). PS: ich häng mal eine an: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz