Autor Beitrag
marvin521993
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 172



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 98

XP
Delphi 3,6,7,2005 PE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 172



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 98

XP
Delphi 3,6,7,2005 PE
BeitragVerfasst: Mo 22.01.07 20:18 
mal sehen:

ausblenden 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 //Die For - Schleifen eben
    Memo2.Lines[a]:=Chr(Ord(Memo1.Lines[a])+Combobox1.ItemIndex+1); //oder so ähnlich
  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:
ausblenden Delphi-Quelltext
1:
ord					

wandelt einen Char in einen Int um, nach dem ASCII - Code, wenn ich mich recht erinnere

ausblenden Delphi-Quelltext
1:
chr					

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: Suche in der Entwickler-Ecke CAERSAR
marvin521993 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 172



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 98

XP
Delphi 3,6,7,2005 PE
BeitragVerfasst: Mo 22.01.07 20:45 
ausblenden Delphi-Quelltext
1:
Memo1.Lines.Count					


Sorry.
Müsste aber eig. klar sein...
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mo 22.01.07 20:47 
user profile iconmarvin521993 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 172



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 98

XP
Delphi 3,6,7,2005 PE
BeitragVerfasst: Mo 22.01.07 20:51 
erstmal nur chr...

was sagt er denn?
marvin521993 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 172



BeitragVerfasst: Mo 22.01.07 20:53 
dann ist trotzdem noch an der stelle en fehler
DnC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 98

XP
Delphi 3,6,7,2005 PE
BeitragVerfasst: Mo 22.01.07 20:55 
was sagt denn der Compiler?
marvin521993 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 172



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mo 22.01.07 21:00 
Fehlermeldung markieren und F1 drücken ;)
marvin521993 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 172



BeitragVerfasst: 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.

ausblenden volle Höhe 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:
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..9of 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.

ausblenden volle Höhe 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:
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..9of 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 user profile iconGausi: Delphi-Tags hinzugefügt
DnC
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 98

XP
Delphi 3,6,7,2005 PE
BeitragVerfasst: Mo 22.01.07 21:06 
ich hatte mich geirrt... die Lösung ist etwas komplizierter, etwa so:

ausblenden 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);//statt der eins das gewünschte
  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 :wink:


Zuletzt bearbeitet von DnC am Mo 22.01.07 21:12, insgesamt 1-mal bearbeitet
marvin521993 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 172



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 98

XP
Delphi 3,6,7,2005 PE
BeitragVerfasst: Mo 22.01.07 21:13 
ausblenden Delphi-Quelltext
1:
if (not(Memo1.Lines.strings[a][b])=' ')) then [...]					


ist doch ganz logisch, oder? Immer erst denken, dann fragen!
marvin521993 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 172



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 98

XP
Delphi 3,6,7,2005 PE
BeitragVerfasst: 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

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 172



BeitragVerfasst: 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