[Delphi] Übersetzen (A zu B)?

Sanjuro

Grünschnabel
Äähm ^^'' Kann mir irgendjemand (bitte ^_^'') sagen, wie ich das in Delphi (6.0) mache, dass ich in ein Rich Edit oben einen Text eingebe (z.B. "ABCDE") und dann auf nen Knopf klicke, und dann unten z.B. "VWXYZ", also dass zum Beispiel A ummer zu V wird, und B immer zu W, etc....
Wär sehr nett ^__^# Danke im Vorraus ^^
 
Ich bin nicht sicher, ob ich dich richtig verstehe; daher bitte beim nächsten Posting mehr auf Gramatik und Rechtschreibung achten .... liegt in deinem eigenem Interesse, da du so schneller eine Antwort erhalten wirst. ;)

Verstehe ich richtig, dass du zu A-n Buchstaben in einem anderen Feld n-Z Buchstaben haben willst ??
 
Wenn ich das richtig verstanden hab, willst Du einfach nur die eingegebenen Zeichen um eine bestimmte Differenz im Alphabet verschieben, oder?
Dazu musst Du einfach nur den ASCII-Code von dem jeweiligen Zeichen nehmen und eine bestimmte Zahl dazu addieren. Das Ergebnis wandelst Du dann wieder in ein Zeichen um.
Such Dir mal aus der OH die Beschreibung für die Funktionen Ord() und Chr(), das sollte Dir helfen.
 
Sorry, äähm, ich bin eigentlich ein totaler Anfänger *g*.
Also:
Ich hab oben ein RichEdit und unten eins. Oben gebe ich zum Beispiel ABC ein, dann klick ich auf den Knopf, der zwischen den beiden RichEdits ist, und dann soll unten z.B. XYZ rauskommen. Aber ich würde auch wollen, dass dann, wenn ich "AB BAC CA" zum Beispiel eingebe, "XY YXZ ZX" rauskommt. Und ich kenne eigentlich nur wenige Befehle...

(@Lirion: Was ist OH? >_<#)
 
Zuletzt bearbeitet:
Online-Hilfe. Da stehen viele lustige und interessante Dinge drin, die einem das Leben leichter machen. Einfach mal den Namen der Funktion im Code markieren und F1 drücken. :)

Du musst den Inhalt des oberen TRichEdit eigentlich nur mit einer Schleife durchlaufen und jedes Zeichen "verschieben":

Code:
var 
  i: Integer;
begin
for i := 0 to Length(RichEdit1.Text) do
begin
  RichEdit2.Text := RichEdit2.Text + Chr(Ord(RichEdit1.Text[i]) + 1);
end;

Ich hab's nicht ausprobiert, aber das sollte klappen.
Erklärung: Mit Ord() holst Du Dir erstmal den ASCII-Wert von dem Zeichen, dann addierst Du eine bestimmte Zahl dazu und wandelst diesen ASCII-Code mit Chr() wieder in ein Zeichen um.
Das machst Du für jedes Zeichen in dem oberen TRichEdit.

Nebenbei erwähnt: Für einzilige Texte ist vielleicht ein normales TEdit besser geeignet, weil Du damit keine Probleme mit Zeilenumbrüchen haben wirst. ;)
 
Boah, cool, tausend Dank ^_^.

Sorry, wenn ich nerve... Aber kannst du mir vielleicht noch sagen, wie ich das mache, dass das bei der Leertaste nicht verändert wird? Und zum beispiel ein F immer gleich bleibt und ein G zu einem U wird, und verschieden viele Buchstaben "vorwärts" geht, als die anderen?
Danke!
 
ganz einfach (ich hab schon länger kein pascal mehr gecodet, man möge mich also wegen der syntax korrigieren):
Code:
if not RichEdit1.Text[i] = "f" and not RichEdit1.Text[i] = " " // das vor die schleife... also nur ausführen, wenn der buchstabe net f oder leerzeichen ist
if RichEdit1.Text[i] = "g"
RichEdit2.Text := RichEdit2.Text + Chr(Ord(RichEdit1.Text[i]) + 14); // g zu einem u
beliebig viele Buchstaben, einfach diese Zahl modifizieren:
RichEdit2.Text := RichEdit2.Text + Chr(Ord(RichEdit1.Text[i]) + DIESE ZAHL HIER);
aber mal ne frage, lirion: wenn da nichts steht (also das feld leer ist), ist dann der ascii-code jedes (nicht vorhandenen) zeichens einfach 0?
 
Nein, wenn der String leer ist, sind ja keine Zeichen drin - und deswegen auch keine ASCII-Codes, auch nicht 0.
In Pascal sind leere Strings auch wirklich leer, im Gegensatz dazu gibt es in anderen Sprachen (unter anderem C und C++) die nullterminierten Strings. Diese Form von String geht so lange, bis der ASCII-Code 0 gefunden wird und wird dann abgeschnitten.

Theoretisch kann man also schon sagen, dass leere Strings einfach nur aus einem "Nullbyte" bestehen. Aber in Pascal ist das soweit ich weiss nicht so, da sind leere Strings auch wirklich leer.
 
Danke an alle, die mir geholfen haben ^_^. Das klappt jetzt, bis auf, wenn ich etwas mit "if not" eingebe. Also wenn ich sämtliche Buchstaben vertauscht habe und dann will, dass alle anderen Zeichen (°!"§$%&/()=?^1234567890, etc.) so bleiben, also geb ich ein:

Code:
  if not RichEdit1.Text[i] = 'F'
  then RichEdit2.Text := RichEdit2.Text + Chr(Ord(RichEdit1.Text[i]) + 0);

Und das alles dann noch mit den ganzen anderen Buchstaben, die ich nciht verändern will.
Dann ist die Zeile "if not RichEdit1.Text[ i ] = 'F'" rot, und der Cursor blinkt hinter dem =, und unten steht: "FOR-Schleifenvariable muss eine einfache lokale Variable sein.", aber ich hab nicht die leiseste Ahnung, was ich machen soll... (Ich hab auch nichts in irgendeiner Hilfe gefunden ~_~)
 
Zurück