Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi Facharbeit (https://www.delphipraxis.net/151556-delphi-facharbeit.html)

hanki 22. Mai 2010 22:34


Delphi Facharbeit
 
Hallo,
ich schreibe in der Schule eine Facharbeit im Fach Informatik,
jedoch habe ich ein Problem bei dem ich von alleine nicht auf die Lösung komme.
Es geht sich um die Cäsar-Verschlüsselung die soweit auch ohne Probleme geht.
Ich will jedoch die Eingabe von dem Edit-Feld nur auf zahlen beschränken.
Hierbei ist mein Problem dass ich dies in eine if verschachtelung(sofern man es so nennen kann) einbauen muss und keine Ahnung haben wie.
Ich würde mich über schnelle Hilfe sehr freuen.
Hier also noch der Quelltext in den ich diese Überprüfung eingebunden haben will.
Delphi-Quellcode:
procedure TForm1.btsatztverschluesselnClick(Sender: TObject);
var i, k, v: integer;
 begin
  if length (edeingabe.text)=0 then
   begin
    showmessage('Es ist kein Satz zum verschlüsseln vorhanden!')
   end
   else begin
    v:= StrToIntdef(edverschiebung.Text,5);                                              
    edausgabe.clear;                                                            
     for i := 1 to Length(edeingabe.Text) do
      begin                                                                      
       k:= Ord(edeingabe.Text[i]);                                              
       k := k + v;                                                              
       edausgabe.Text := edausgabe.Text + chr(k);
      end;
   end;
 end;

Luckie 22. Mai 2010 22:40

Re: Delphi Facharbeit
 
Wie wäre es mit der Forensuche?
http://www.delphipraxis.net/internal...=tedit+ziffern

rollstuhlfahrer 22. Mai 2010 22:45

Re: Delphi Facharbeit
 
Zitat:

Zitat von hanki
Hallo,
ich schreibe in der Schule eine Facharbeit im Fach Informatik,
jedoch habe ich ein Problem bei dem ich von alleine nicht auf die Lösung komme.
Es geht sich um die Cäsar-Verschlüsselung die soweit auch ohne Probleme geht.

Soweit ok.
Zitat:

Zitat von hanki
Ich will jedoch die Eingabe von dem Edit-Feld nur auf zahlen beschränken.

Folgendes musst du mit deinem Edit verknüpfen, in das nur Zahlen dürfen (OnKeyPress). Dies sorgt dafür, dass nur Zahlen eingegeben werden können und alles andere in einem Fehlerton endet.
Delphi-Quellcode:
procedure TForm1.eSchluesselKeyPress(Sender: TObject; var Key: Word);
begin
  if NOT (Key in [#8, '0'..'9', ',']) then
    Key := #0;
end;
Zitat:

Zitat von hanki
Hier also noch der Quelltext in den ich diese Überprüfung eingebunden haben will.

Hausaufgaben macht hier keiner und erst recht keine Facharbeit. -> Ein bisschen Eigeninitiative ist nicht schlecht.

Bernhard

Sir Rufo 22. Mai 2010 22:49

Re: Delphi Facharbeit
 
Zitat:

Zitat von Luckie

Das ist nicht Teil der Facharbeit, darum hat er sich mit dem Thema "Suche" noch nicht auseinandergesetzt :mrgreen:

hanki 22. Mai 2010 22:50

Re: Delphi Facharbeit
 
Also zuersteinmal danke für die schnellen antworten ;)
die forensuche hätte ich gründlicher nutzen können das ist richtig.entschuldigung.
Um auf die eigeninitiative zu sprechen zu kommen:
Ich habe etwas ausprobiert jedoch hat er dann immer zwei fehler angezeigt und ich habe mir gedacht ich kann besser von 0 anfangen :
hier mein versuch:
Delphi-Quellcode:
procedure TForm1.btsatztverschluesselnClick(Sender: TObject);
var i, k, s, v: integer;
 begin
  if length (edeingabe.text)=0 then
   begin
    showmessage('Es ist kein Satz zum verschlüsseln vorhanden!')
   end
 else begin
  for s:=1 to length(edverschiebung) do
   begin
    if Pos(edverschiebung[s],eingabemoeglichkeit)>0
     then begin
      v:= StrToIntdef(edverschiebung.Text,5);                                              
      edausgabe.clear;
    end;                                                            
     for i := 1 to Length(edeingabe.Text) do
      begin                                                                      
       k:= Ord(edeingabe.Text[i]);                                                  
       k := k + v;                                                              
       edausgabe.Text := edausgabe.Text + chr(k);
      end;
     end;
   end;
 end;

Luckie 22. Mai 2010 22:56

Re: Delphi Facharbeit
 
Zitat:

Zitat von hanki
hier mein versuch:

Schön. Und?

hanki 22. Mai 2010 22:59

Re: Delphi Facharbeit
 
ja da liegt mein probelm =P
Delphi sagt mir:-klasse besitzt keine standarteigenschaft
-typ unkompatibel

hat jemand eine ahnung warum ?

Sir Rufo 22. Mai 2010 23:01

Re: Delphi Facharbeit
 
Zitat:

Zitat von hanki
ja da liegt mein probelm =P
Delphi sagt mir:-klasse besitzt keine standarteigenschaft
-typ unkompatibel

hat jemand eine ahnung warum ?

Wegen den Sonnenflecken, musste mal 14 Tage warten, dann sind die weg und vielleicht geht es dann. :mrgreen:

Wo sagt Delphi das?
Zeigt Delphi eine Zeilen-Nummer mit an?

Wir sind Programmierer, keine Hellseher!

Luckie 22. Mai 2010 23:02

Re: Delphi Facharbeit
 
Und jetzt bitte noch den zweiten Teil der Fehlerbeschreibung: Wo? In welcher Zeile tritt der Fehler auf? Wir sind hier keine Hellseher.

s.h.a.r.k 22. Mai 2010 23:03

Re: Delphi Facharbeit
 
@Sir Rufo & Luckie: Habt ihr euch bzgl Hellseher abgesprochen?! :mrgreen:

Btw: Ab Delphi 2010 ist NumbersOnly ein Feature eines Edit-Feldes!

taaktaak 22. Mai 2010 23:04

Re: Delphi Facharbeit
 
Nun, die Angabe "edVerschiebung" ist sicherlich zu wenig. Das ist vermutlich ein TEdit, du musst schon genau angeben welche Eigenschaft des TEdit du in diesem Fall verwenden willst >> deshalb funktioniert es mit edVerschiebung.Text

s.h.a.r.k 22. Mai 2010 23:08

Re: Delphi Facharbeit
 
@hanki: ich glaub auch, du solltest dir über das eigentliche Problem erst mal Gedanken machen und genau sagen, was du willst. Denn es ist ein Unterschied, ob du dem User verbieten willst, in das Edit-Feld Zahlen einzutragen, oder ob du das Edit-Feld nur auf vorhandensein von "Nicht-Zahlen" prüfen willst.

rollstuhlfahrer 22. Mai 2010 23:11

Re: Delphi Facharbeit
 
außerdem finde ich es angebracht, dass man Variablen entsprechend ihrer Bedeutung benahmt. Du hast jetzt hier 4 Zählvariabnel. Als ich vor etwa 3 Monaten eine Caesar-Verschlüsselung im Unterricht erstellen sollte, kam ich mit einer einzigen zurecht. KLeiner Tipp dafür: Schau dir mal den Quellcode von UpperCase an. Da braucht man nur 1 Zeile zu verändern und den Schlüssel einzulesen (inkl. aller anderen benötigten Strings) und dann ist die fertig.

Bernhard

hanki 22. Mai 2010 23:12

Re: Delphi Facharbeit
 
Delphi-Quellcode:
procedure TForm1.btsatztverschluesselnClick(Sender: TObject);
var i, k, s, v: integer;
begin
  if length (edeingabe.text)=0 then
   begin
    showmessage('Es ist kein Satz zum verschlüsseln vorhanden!')
   end
else begin
  for s:=1 to length(edverschiebung) do
   begin
    if Pos(edverschiebung[color=#ff0000][s][/color],eingabemoeglichkeit)>0 
     then begin
      v:= StrToIntdef(edverschiebung.Text,5);                                              
      edausgabe.clear;
    end;                                                            
     for i := 1 to Length(edeingabe.Text) do
      begin                                                                      
       k:= Ord(edeingabe.Text[i]);                                                  
       k := k + v;                                                              
       edausgabe.Text := edausgabe.Text + chr(k);
      end;
     end;
   end;
end;
Was ich bewerkstelligen möchte ist,dass der Benutzer nur zahlenwerte eingeben kann,das sonst eine verschlüsselung nur mit dem Verschiebungswert 5 erreicht wird:
Delphi-Quellcode:
v:= StrToIntdef(edverschiebung.Text,5);

rollstuhlfahrer 22. Mai 2010 23:13

Re: Delphi Facharbeit
 
wie in #11 schon gesagt: Es fehlt ein .Text

Bernhard

hanki 22. Mai 2010 23:22

Re: Delphi Facharbeit
 
Delphi-Quellcode:
procedure TForm1.btsatztverschluesselnClick(Sender: TObject);
var i, k, s, v: integer;
 begin
  if length (edeingabe.text)=0 then
   begin
    showmessage('Es ist kein Satz zum verschlüsseln vorhanden!')
   end
 else begin
  for s:=1 to length(edverschiebung) do
   begin
    if Pos(edverschiebung[s],eingabemoeglichkeit)>0
     then begin
      v:= StrToIntdef(edverschiebung.Text,5);                                              
      edausgabe.clear;
    end;                                                            
     for i := 1 to Length(edeingabe.Text) do
      begin                                                                      
       k:= Ord(edeingabe.Text[i]);                                                  
       k := k + v;                                                              
       edausgabe.Text := edausgabe.Text + chr(k);
      end;
     end;
   end;
 end;
habe nun das .text hinzugefügt und es klappt auch.
danke schonmal,
jedoch besteht nun noch das problem, dass mein text zu oft verschlüsselt wird.
werde aber noch drübergucken.
DANKE an alle ;)
wer noch ideen hat, ich bin immer dankbar =P

s.h.a.r.k 22. Mai 2010 23:26

Re: Delphi Facharbeit
 
Dankbar und so ein Smiley ( -> =P) passen einfach nicht zusammen :zwinker:

Wieso nimmst du dieses StrToIntDef()? Klar, kann das Sinn machen, aber der User bekommt ja nicht mal mit, wenn du intern mit 5 rechnest! Verbiete entweder komplett die Eingabe von anderen Zeichen außer 0-9, oder baue eine Abfrage ein, sodass der User eine Warnmeldung bekommt, wenn er etwas anderes eingebaut hat, als Zahlen. Das kannst du mit der Val()-Methode (siehe Hilfe, da steht ausreichend über deren Verwendung drin) lösen. Somit kommst du erst gar nicht in die Situation, dass ein Wert genommen wir, den der User gar nicht eingegeben hat, was auch der einzig richtige wäre!

rollstuhlfahrer 22. Mai 2010 23:29

Re: Delphi Facharbeit
 
was heißt: "zu oft verschlüsselt"??

und deine Prüfmethode ob nur erlaubte Zeichen in dem Eingabefeld stehen ist der letzte Müll. Es muss nur 1 Zeichen drin sein und schon meint die, es wären nur gültige Zeichen drin. Meint sie, es wären nur ungültige Zeichen drin, dann kommt irgendwas zufälliges raus, weil v nicht initialisiert ist.

Mach doch ne eigene Funktion mit booleschem Rückgabewert, die prüft, ob ein String nur gültige Zeichen enthällt.
z.B.:
Delphi-Quellcode:
function GueltigerString(Eingabe, GueligeZeichen: String): boolean; // (c) by Bernhard Wendel (wenn, dann alles übernehmen)
var i: Integer;
begin
  Result := true;
  for i := 1 to Length(Eingabe) do
  begin
    if Pos(Eingabe[i], GueltigeZeichen) = -1 then
    begin
      Result := false;
      Exit;
    end;
  end;
end;
Bernhard

hanki 22. Mai 2010 23:34

Re: Delphi Facharbeit
 
Dass es der letzt Müll ist weiß ich auch selber.
Deswegen schreibe ich ja in dieses Forum, damit ich lerne es demnächst besser zu machen.
Also danke für die Hilfe ;) sind zwar noch kleine Probleme aber die löse ich selber.
danke.
MFG Tim


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 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