Autor Beitrag
sourtooth
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 13.10.03 19:56 
Hallo!

Ich bin in Sachen Delphi Programmierung noch ein Anfänger, und habe mich an mein erstes Programm gemacht.
In diesem soll folgendes sofort in einem Memo Feld umgewandelt werden:

1= I/i
2 = Z/z
3 = E/e
4 = A/a
5 = S/s
6= G/g
8 = B/b
0= O/o

Und hier der bisherige Quelltext:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);

var
  SelPos: Integer;
  begin
  with TReplaceDialog(Sender) do
  begin
    SelPos := Pos(FindText, Memo1.Lines.Text); FindText := 'z'; ReplaceText := '2';
    if SelPos > 0 then
    begin
      Memo1.SelStart := SelPos - 1;
      Memo1.SelLength := Length(FindText);
      Memo1.SelText := ReplaceText;
    end else;
    end;
end;


Das funzt ja soweit ganz gut, es wird aber nur z mit 2 ersetzt.
Wie bau ich die anderen Buchstaben ein, die ersetzt werden sollen?
Und wie wird die "Beachtung" der Gross/Kleinschreibung deaktiviert,sodass auch nach Z und nicht nur nach z gesucht wird?

Vielen Dank!

sourtooth
Shark
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 87

98, XP
D3, D5, D7
BeitragVerfasst: Mo 13.10.03 21:24 
versuchs mal mit einer TStringList und der Eigenschaft Values:

StrList.Values['0'] := 'a/A'; // Values setzen
...

if StrList.Values[irgendeine Zahl] <> '' then // Auslesen

nur ein Beispiel
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 13.10.03 23:06 
Wie wäre es mit StringRepalce? Allerdings erst ab einer Delphi Version > D3 verfügbar. In den Faq sollte aber ein Ersatz für StringReplace existieren.
sourtooth Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 14.10.03 14:09 
Das sagt mir alles nichts :(
Könnt ihr mir das vielleicht ein wenig genauer erklären?
Danke.
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Di 14.10.03 14:49 
... warum willst du umwandeln? Mach doch im OnKeyPress-Ereigniss einfach so, daß du prüfst, ob eine der Buchstabentasten aus deiner Liste gedrückt wurde und sage dann, daß es nicht erlaubt ist und setze zusätzlich stattdessen die entsprechende Ziffer:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
If Key=Buchstabe
Begin
Key:=#0; <- Rückschritt
Key:=Zahl;
End;


Die Prozedur geht sicherlich noch ein wenig einfacher, denke ich... :-)

_________________
Hasta La Victoria Siempre
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 14.10.03 14:55 
sourtooth hat folgendes geschrieben:
Das sagt mir alles nichts :(
Könnt ihr mir das vielleicht ein wenig genauer erklären?
Danke.

Ich habe eine klasse Idee für dich: Kuck mal nach StringReplace in der Hilfe. :P
sourtooth Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 14.10.03 16:53 
Hab ich schon, nur hilft es mir nicht weiter, ich weiss nicht, wie man es anwenden soll.
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 15.10.03 14:42 
Dann poste mal deine Versuche wie du die Funktion StringReplace in deinem Code eingefügt hast.

Gruß
Tino
sourtooth Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 16.10.03 14:06 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  begin
  with TReplaceDialog(Sender) do
  begin
  { Perform a global case-sensitive search for FindText in Memo1 }
  StrList.Values[0] := 'a';
 if StrList.Values[0] <> '' then // ?? was dann???

end;


Oder wie sonst soll ich den Vorschlag von Shark einbinden?
barfuesser
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: Do 16.10.03 14:17 
Was hat das mit StringReplace zu tun :?:

barfuesser
Shark
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 87

98, XP
D3, D5, D7
BeitragVerfasst: Do 16.10.03 14:52 
Mit meinem Vorschlag merkst Du Dir nur, was Du mit was ersetzen willst.

Du willst Z mit 1 ersetzen:

StrList.Values['Z'] := '1'; //hat ich oben falsch

und so weiter...

dann ersetzen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
for i := 0 to StrList.count - 1 do
begin
  FindText := StrList.Names[i]; 
  ReplaceText := StrList.Values[FindText] ;

  ersetzen...



end;
sourtooth Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 16.10.03 17:09 
Danke für deine Antwort.
Zitat:
[Error] l33t.pas(51): Declaration expected but 'FOR' found
[Error] l33t.pas(53): Undeclared identifier: 'FindText'
[Error] l33t.pas(53): Undeclared identifier: 'StrList'
[Error] l33t.pas(53): Undeclared identifier: 'i'
[Error] l33t.pas(54): Undeclared identifier: 'ReplaceText'

die o.g. Fehlermeldung bekam ich, als ich das eingegeben hatte:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);

// 2 Z ; 3 E ; 4 A ; 5  S ; 8 - B
for 'i' := 0 to StrList.count - 1 do
begin
  FindText := StrList.Names[i];
  ReplaceText := StrList.Values[FindText];
  StrList.Values['Z'] := '1';

end;
worm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 135


D6 Prof
BeitragVerfasst: Do 16.10.03 22:32 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState); 
begin
// 2 Z ; 3 E ; 4 A ; 5  S ; 8 - B 
  Case Key of
    'Z''z': Key := '2';
    'E''e': Key := '3';
  end;
end;
Nach dem Schema müsste es gehen. Kommt drauf an, was du jetzt eigentlich erreichen wolltest.
Und Du solltest wirklich erstmal etwas über die Grundlagen lernen, bevor du wild herumprobierst. Schnapp Dir'n Buch und lern die Grundlagen, danach kannst du auf dieser Basis weitermachen.

_________________
In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Fr 17.10.03 00:36 
@Worm: Eine ähnlich Lösung hatte ich ihm auch angeboten; die wollte er scheinbar nicht..

@Sourtooth: Wenn überhaupt, dann muss es For I heißen und nicht For 'I'..

_________________
Hasta La Victoria Siempre
sourtooth Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 19.10.03 17:31 
@Terra
Das lag daran, dass ich zu der Zeit nicht viel damit anfangen konnte, da ich es nicht verstanden hatte...

Ich bin jetzt worms Exempel gefolgt, bekomme aber die Fehlermeldung, dass
''Property and Method Memo1KeyUp'' nicht kompatibel sein.
Woran liegts?
So ist der Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Char; 
Shift: TShiftState); // ich musste Char verwenden, weil bei Word Delphi meinte, dass die //Typen nicht kompatibel miteinander sein
begin
  Case Key of
    'Z''z': Key := '2';
    'E''e': Key := '3';
  end;
end;
worm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 135


D6 Prof
BeitragVerfasst: Mo 20.10.03 00:53 
sourtooth hat folgendes geschrieben:
@Terra
Das lag daran, dass ich zu der Zeit nicht viel damit anfangen konnte, da ich es nicht verstanden hatte...
Buch lesen!

Hmm, welche Delphi-Version benutzt du eigentlich? Die Fehlermeldung kenn ich gar nicht. Das einzige, was ich mir vorstellen könnte, was Du gemacht haben könntest, hätte die Fehlermeldung "Deklaration von ... unterscheidet sich von vorheriger Deklaration" ergeben.

Naja, wie auch immer, die Parameterliste einer Ereignisbehandlungsroutine kannst du nicht einfach verändern, der Fehler lag im Code. Da Key vom Typ Word ist, darf man nicht Key mit 'Z' etc vergleichen, sondern muss Key in einen Char umwandeln. Dazu gibt's die Funktion Chr. Es hieße also
ausblenden Delphi-Quelltext
1:
2:
3:
case Chr(Key) of
  'Z''z': Key := Ord('2');  //Ord ist in diesem Fall das Gegenstück zu Chr
end;
Habe das aber mal getestet und festgestellt, dass dadurch am Tastendruck irgendwie nichts verändert wird. Nimm also Memo1.OnKeyPress, dann kannst du auch den Code nehmen, den ich zuerst gepostet hatte, denn bei OnKeyPress bekommst du einen Wert vom Typ Char. Und damit funktioniert die Umwandlung direkt bei der Eingabe auch.

_________________
In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.