| Autor |
Beitrag |
marvin521993
      
Beiträge: 172
|
Verfasst: Mo 22.01.07 20:06
Hi
mein Problem ist folgendes:
Ich habe ein formular mit einem memo drauf und drunter eine combobox, wo man eine zahl von 1 - 25 auswählen kann.
Ich möchte nun erreichen, das der eingegebene memo text beim buttonklick verschlüsselt um soviele zeichen in einem anderen memo erscheint, wie in der combobox ausgewählt worden ist
Kann mir da jemand helfen!
|
|
DnC
      
Beiträge: 98
XP
Delphi 3,6,7,2005 PE
|
Verfasst: Mo 22.01.07 20:09
du musst eben jedes Zeichen heraussuchen und im Caesarcode verschlüsseln... müsste doch zu machen sein.
Du kannst dazu am Besten 2 for - Schleifen verwenden, das aktuelle Zeichen mit Ord umwandeln, erhöhen und mit Chr zurückmachen... musst dir nur was einfallen lassen, um am Ende wieder vorne anzufangen, wenn du verstehst...
hoffentlich kommst du damit klar 
|
|
marvin521993 
      
Beiträge: 172
|
Verfasst: Mo 22.01.07 20:12
Kannst du mir da vllt ein Quelltext herrichten
sry bin noch nicht so lange mit delphi vertraut
danke
|
|
DnC
      
Beiträge: 98
XP
Delphi 3,6,7,2005 PE
|
Verfasst: Mo 22.01.07 20:18
mal sehen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| for a:=0 to Memo1.Count do begin for b:=1 to Length(Memo1.Lines[a]) do begin Memo2.Lines[a]:=Chr(Ord(Memo1.Lines[a])+Combobox1.ItemIndex+1); end;
end; |
Kann sein, dass ich mich in den For - Schleifen um eins vertan hab, mach ich oft. Um das Überschreiten der ASCII - Grenze zu vermeiden... lass dir selbst was einfallen. Ich will dir ja nicht den Spaß nehmen.
Zur Erklärung:
Delphi-Quelltext
wandelt einen Char in einen Int um, nach dem ASCII - Code, wenn ich mich recht erinnere
Delphi-Quelltext
macht das genau andersherum
Der Rest müsste klar sein
So in der Art KÖNNTE es klappen. Ich übernehm keine Garantie!
Edit: ansonsten würd ich einfach die Forensuche empfehlen: CAERSAR
|
|
marvin521993 
      
Beiträge: 172
|
Verfasst: Mo 22.01.07 20:43
Der hat da irgendein problem mit dem memo1.count da macht der rote balken
gibt es da keine einfache formel die immer jeden buchstaben einzeln um die in der combobox ausgewählten zahl verschlüsselt?
|
|
DnC
      
Beiträge: 98
XP
Delphi 3,6,7,2005 PE
|
Verfasst: Mo 22.01.07 20:45
Delphi-Quelltext
Sorry.
Müsste aber eig. klar sein...
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mo 22.01.07 20:47
marvin521993 hat folgendes geschrieben: | | Der hat da irgendein problem mit dem memo1.count da macht der rote balken |
Es muss ja auch Memo1.lines.Count heißen
//edit: Ich habe 2min getippt? Oh gott...
|
|
marvin521993 
      
Beiträge: 172
|
Verfasst: Mo 22.01.07 20:49
Memo2.Lines[a]:=Char(Ord(Memo1.Lines[a])+Combobox1.ItemIndex+1);
In der Zeile macht er auch nen roten balken an der stelle hinter der klammer und vor dem + combobox
sry wie gesagt ich kenn mich noch nicht so gut in delphi aus
|
|
DnC
      
Beiträge: 98
XP
Delphi 3,6,7,2005 PE
|
Verfasst: Mo 22.01.07 20:51
erstmal nur chr...
was sagt er denn?
|
|
marvin521993 
      
Beiträge: 172
|
Verfasst: Mo 22.01.07 20:53
dann ist trotzdem noch an der stelle en fehler
|
|
DnC
      
Beiträge: 98
XP
Delphi 3,6,7,2005 PE
|
Verfasst: Mo 22.01.07 20:55
was sagt denn der Compiler?
|
|
marvin521993 
      
Beiträge: 172
|
Verfasst: Mo 22.01.07 20:58
wenn der compiler diese fehlermeldungen unter der unit sind, dann sagen se:
Inkompatible Typen, deklaration erwartet, aber dateiende gefunden, ';' erwartet aber'.' gefunden
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mo 22.01.07 21:00
Fehlermeldung markieren und F1 drücken 
|
|
marvin521993 
      
Beiträge: 172
|
Verfasst: Mo 22.01.07 21:04
Diese Fehlermeldung wird angezeigt, wenn der Compiler zwei kompatible (sehr ähnliche) Typen erwartet, die Typen aber tatsächlich unterschiedlich sind. Dieser Fehler kann in sehr unterschiedlichen Situationen auftreten – beispielsweise, wenn eine Read- oder Write-Klausel in einer Eigenschaft eine Methode enthält, deren Parameterliste nicht mit der Eigenschaft übereinstimmt, oder wenn ein Parameter für eine Standardprozedur oder -methode den falschen Typ hat.
Dieser Fehler kann auch auftreten, wenn in zwei Units jeweils ein Typ mit demselben Namen deklariert wird. Diese Fehlermeldung kann zudem angezeigt werden, wenn eine Prozedur aus einer importierten Unit einen Parameter mit einem gleichnamigen Typ enthält, und eine Variable eines gleichnamigen Typs an die Prozedur übergeben wird.
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:
| unit unit1; interface type ExportedType = (alpha, beta, gamma);
implementation begin end.
unit unit2; interface type ExportedType = (alpha, beta, gamma);
procedure ExportedProcedure(v : ExportedType);
implementation procedure ExportedProcedure(v : ExportedType); begin end;
begin end.
program Produce; uses unit1, unit2;
var A: array [0..9] of char; I: Integer; V : ExportedType; begin ExportedProcedure(v); I:= Hi(A); end. |
Die Standardfunktion Hi erwartet ein Argument des Typs Integer oder Word, stattdessen wird ein Array verwendet. In dem Aufruf von ExportedProcedure ist V vom Typ unit1.ExportedType, da unit1 vorher in unit2 importiert wurde. Daher tritt ein Fehler auf.
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:
| unit unit1; interface type ExportedType = (alpha, beta, gamma);
implementation begin end.
unit unit2; interface type ExportedType = (alpha, beta, gamma);
procedure ExportedProcedure(v : ExportedType);
implementation procedure ExportedProcedure(v : ExportedType); begin end;
begin end.
program Solve; uses unit1, unit2; var A: array [0..9] of char; I: Integer; V : unit2.ExportedType; begin ExportedProcedure(v); I:= High(A); end. |
Eigentlich sollte die Standardfunktion High und nicht Hi verwendet werden. Für den aufruf von ExportedProcedure gibt es zwei alternative Lösungen. Erstens könnten Sie die Reihenfolge der uses-Klausel ändern. Dies könnte aber zu ähnlichen Fehlern führen. Eine robustere Lösung ist, den Typennamen voll mit der Unit, die den gewünschten Typ deklariert, zu qualifizieren, wie es In diesem Beispiel für die Deklaration
von V vorgenommen wurde.
Meinst du Möglicherweise das?
Moderiert von Gausi: Delphi-Tags hinzugefügt
|
|
DnC
      
Beiträge: 98
XP
Delphi 3,6,7,2005 PE
|
Verfasst: Mo 22.01.07 21:06
ich hatte mich geirrt... die Lösung ist etwas komplizierter, etwa so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button1Click(Sender: TObject); var a,b:Integer; str:String; begin Memo2.Clear; for a:=0 to Memo1.Lines.Count do begin str:=''; for b:=1 to Length(Memo1.Lines[a]) do begin str:=str + Chr(Ord(Memo1.Lines.Strings[a][b])+1); end; Memo2.Lines.Add(str); end; end; |
Mein Fehler war, dass Ord und Chr nur auf Chars anwendbar sind, nicht auf Strings.
Ich nehme also einen frischen String str:='';
und tue das aktuelle Zeichen (verändert dran) str:=str + Chr(Ord(Memo1.Lines.Strings[a][b])+1);
Das muss ich dann ausgeben Memo2.Lines.Add(str);
den 2. Teil musst du dir immer noch überlegen 
Zuletzt bearbeitet von DnC am Mo 22.01.07 21:12, insgesamt 1-mal bearbeitet
|
|
marvin521993 
      
Beiträge: 172
|
Verfasst: Mo 22.01.07 21:11
dann ist noch die frage wie ich verhindern kann, das der das leerzeichen auch verschlüsselt.
weil wenn ich ein leerzeichen mach und das verschlüssel wird es immer als ! dargestellt
|
|
DnC
      
Beiträge: 98
XP
Delphi 3,6,7,2005 PE
|
Verfasst: Mo 22.01.07 21:13
Delphi-Quelltext 1:
| if (not(Memo1.Lines.strings[a][b])=' ')) then [...] |
ist doch ganz logisch, oder? Immer erst denken, dann fragen!
|
|
marvin521993 
      
Beiträge: 172
|
Verfasst: Mo 22.01.07 21:16
muss ich die zeile die du mir eben gezeigt hast durch was ersetzen oder einfach unten drunter schreiben?
|
|
DnC
      
Beiträge: 98
XP
Delphi 3,6,7,2005 PE
|
Verfasst: Mo 22.01.07 21:18
[edit]nein, im Ernst:
Die Zeile schaut, ob da grad ein Leerzeichen ist. Das verschlüsselst du eben nicht, sondern fügst es einfach so an... sie reicht nicht ganz aus
Delphi-Quelltext 1: 2: 3:
| if (not(Memo1.Lines.strings[a][b]=' ')) then str:=str + Chr(Ord(Memo1.Lines.Strings[a][b])+1) else str:=str + Memo1.Lines.Strings[a][b]; |
|
|
marvin521993 
      
Beiträge: 172
|
Verfasst: Mo 22.01.07 21:23
och mann ich raff dis nich der macht da jetz schon wieder ne fehlermeldung bei dem =
Operator ist auf diesen operandentyp nicht anwendbar
|
|