Lazarus- Hilfe?
Wir müssen in Informatik bei einer Projektarbeit ein Programm erweitern. Dort geht es um die Verschlüsselung nach dem Cäsar-Prinzip. Auf einer Form gibt es ein eine MemoKomponente, welche mit 'Klartext' betitelt ist. Drunter sind zwei EditKomponente. Die erste ist mit 'Alphabet' betitelt und in dieser EditKomponente steht das Alphabet. Die zweite ist mit 'Schlüssel' betitelt, in dieser kann ein Schlüssel (vom Nutzer) eingetragen werden (das Alphabet in jeder erdenklichen Reihenfolge).
Nun soll ich programmieren, dass das Programm durch einen Button prüft, ob der Schlüssel genutzt werden kann. Sprich, dass es 26 Buchstaben sind und sie alle nur einmal vorkommen. Wenn das ganze so ist, soll auf einem Panel eine Nachricht erscheinen 'A les richtig, du kannst diesem Schlüssel nutzen'. Wenn das nicht so ist, soll auf dem selben Panel eine Nachricht erscheinen 'Überprüfe deinen Schlüssel nochmal. Sind alle 26 Buchstaben einmal vorhanden?'
Ich weiß leider nicht, wie ich das in meinem Programm umsetzten soll. Falls ich etwas undeutlich erklärt habe, einfach melden. Ich versuche er gerne nochmal anders zu erklären.
Ich hoffe einer von euch kann mit hier weiterhelfen!
Hast du denn auch einen ansatz/Programmcode oder musste auch die editfelder erstellen etc? Bis wann musst du das programm geschrieben haben?
Ich habe schon die Komplette Form, nur der oben beschriebene Teil muss gemacht werden.
Bis morgen - ich weiß, sehr kurzfristig
Kannst du den code den du hast einfach mal hier posten? Oh und füge bitte auch eine onclick action ein, wenn man auf den button clickt.
Sorry, ich weiß nicht genau wie ich das machen soll. Ich kann ja schlecht das ganze Formular hier hin kopieren
Nur den code des formulars. Und "onclick" event des buttons musst du natürlich selbst erstellen
Kannst du kurz erklären, wie das geht?
Sonst gerne auch mit einer FA
2 Antworten
Also du erstellst ein onClick event.
Im onclick event machst du:
Einlesen des strings/schluessel:
String schl:=edit1.text();
String fehlermeldung="deine fehlermeldung";
Sring gut ="der gute text";
if length(schl) <>26 then
Begin
Panel1.text:=fehlermeldung
exit;
End
String temp:="";
For i:=0 to length(schl) do
For j:=0 to length(temp) do
Begin
if temp[j]==schl[i] then
Begin
Panel1.text:=fehlermeldung
exit;
End
End
temp:=temp+schl[i]
Begin
Panel1.text:=gut
End
Den code musst du natürlich für deinen fall anpassen und da könnten natürlich kleinere tippfehler in dem code sein, den ich hier geschrieben habe. Aber im grunde sollte es so gehen
Du musst ganz am anfang schreiben:
Var schl,temp:String;
Und die Zeilen wo ich String davor geschrieben habe lässt du String einfach weg.
Also
String schl:=edit1.text();
wird zu
schul:=edit1.text();
Lazarus findet in dem Teil außerdem keine 'text'. Und sagt 'syntax error'
Werden wohl einige sachen drin sein, die du anpassen müsstest. ich weiß nicht wie dein editfeld heißt. Ich denke mal das heißt nicht edit1. Die fehler müsstest du selbst beheben. Dafür gibt die delphi ja tipps. Oder du vertraust mir soweit, dass du mir den bildschirm über teamviewer anzeigst. Das wird alles sonst kompliziert.
Viel erfolg jedenfalls
procedure TForm1.Button1Click(Sender: TObject);
var key:string;
i:char;
err: boolean;
begin
key := schluessel.text; // Einlesen
err := (length(key)<>26); // Länge ungleich 26 ?
for i:='A' to 'Z' do // Alle Zeichen einmal vorhanden ?
if key.CountChar(i)<>1 then err:=true;
if err then // Ausgabe
label1.caption:='Prüfe den Schlüssel'
else
label1.caption:='Alles richtig'
end;
Namen der Komponenten und Text für die Ausgabe musst du natürlich anpassen.
Wow, vielen Danke!!
Leider sagt Lazarus bei 'key := schluessel.text;' das 'text' ein illegal quallifier ist. Kannst du mir da weiterhelfen?
schluessel heisst das Edit-Feld bei mir auf dem Formular, das musst du halt anpassen. Genau wie label1 unten...
Vielen Dank dafür!!!
Beim ersten Teil jedoch ' String schl:=edit1.text(); kommt eine Fehlermeldung (illegal expression). Kannst du mir auch da weiterhelfen?
Außerdem wollte ich fragen, ob ich noch irgendwo (außer der Texte) etwas einfügen muss