Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Probleme mit den Items von der ComboBox zu verschlüsseln?


bruce185 - Sa 14.07.07 16:10
Titel: Probleme mit den Items von der ComboBox zu verschlüsseln?
Guten Tag,
ich möchte gerne die Einträge die in der ComboBox1 sind, verschlüsseln und anschließend abspeichern.

Ich habe das mal so probiert:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button1Click(Sender: TObject);
var
  str: TStringList;
  i: integer;
begin
  str := TstringList.Create;

  str.Text:=ComboBox1.Items.GetText;
  for i:=1 to length(str.GetText) do
    str[i]:=char(23 Xor Ord(str[i]));

  str.SaveToFile('Einstellungen.dat');

  str.Free;
end;


an dieser stelle str[i] erhalte ich fehlermeldung, anscheinend weil ich mit TStringList arbeite.
Wie könnte ich diesen Code umschreiben, damit er richtig funktioniert?

MfG


Heiko - Sa 14.07.07 17:02

Wenn ich mich geradr richtig erinnere fangen Stringlisten bei 0 an und nicht bei 1. Also einfach str[i-1] ;)


bruce185 - Sa 14.07.07 17:07

Danke Dir.
Das problerm ist, das str[i] oder str[i-1] vom Compiler nicht akzeptiert wird, also ich kann mein programm garnicht Compilieren, weil dort was fehlt, z.B. str.Count[i], aber so geht das auch nicht.
Woran kann das liegen?

Edit: Sry, an dieser stelle Ord(str[i]) ist der fehler.
Wisst ihr vieleicht, was dort fehlt?

MfG


Heiko - Sa 14.07.07 17:16

Dein Problem war (wie ich gerade erst richtig sehe [vorhin nur überfloegn ;) ]): Du greifst auf die Elemente (Lines) zu und nicht auf den Text.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
var
  str: TStringList;
  i: integer;
begin
  str := TstringList.Create;

  str.Text:=ComboBox1.Items.Text;
  for i:=1 to length(str.Text) do str.Text[i]:=char(23 Xor Ord(str.Text[i]));

  str.SaveToFile('Einstellungen.dat');

  str.Free;
end;


bruce185 - Sa 14.07.07 17:28

Das geht auch nicht.
Folgende fehlermeldung an stelle char:

Delphi-Quelltext
1:
2:
  [Fehler] Unit1.pas(36): Der linken Seite kann nichts zugewiesen werden
  [Fataler Fehler] Project2.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden


Nochmal zu meinem problem, ich möchte die Items speichern und nicht den Text von der ComboBox, weil somit nur der Text verschlüsselt wird.
Ich weiss leider nicht, wie das geht.

MfG


Heiko - Sa 14.07.07 17:31

Du meinst jetzt die Eigenschaften von jedem Item, die jedes Item besitzt?

//EDIT: Das würde dir aber nix bringen, denn bei ComboBox=>StringList gehen die extra gesetzten Eigenschaften verloren. Was müsste denn mitgespeichert werden?


bruce185 - Sa 14.07.07 20:19

Also, bei nächstem Starten des Programms werde ich ja das von der gespeicherten Datei wieder auslesen und dann entschlüsseln und wieder anzeigen in der ComboBox.

Aber es kommt immer fehlermeldung, wenn ich das was dann im TStringList gespeichert wurde, verschlüsseln möchte und das verschlüsselte abspeichern.


Heiko - Sa 14.07.07 20:24

Also reicht der Text doch...

Um die Items brauchst du dich nicht kümmern, das macht Delphi von alleine (Zeilenumbruch = nächstes Item) ;).

Folgendes Funktioniert:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
  Text: String;
begin
  ComboBox1.Items.Text:='blubb'#1310'blubb2';
  Text:=ComboBox1.Items.Text;
  for i:=1 to length(Text) do Text[i]:=char(23 Xor Ord(Text[i]));
  ShowMessage(Text);

  //str.SaveToFile('Einstellungen.dat'); <-- hier nen FileStream verwenden
end;