| Autor |
Beitrag |
sourtooth
Hält's aus hier
Beiträge: 6
|
Verfasst: 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:
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
      
Beiträge: 87
98, XP
D3, D5, D7
|
Verfasst: 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
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 14.10.03 14:09
Das sagt mir alles nichts
Könnt ihr mir das vielleicht ein wenig genauer erklären?
Danke.
|
|
Terra23
      
Beiträge: 872
Win 8
Delphi 7
|
Verfasst: 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:
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
|
Verfasst: 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. 
|
|
sourtooth 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 14.10.03 16:53
Hab ich schon, nur hilft es mir nicht weiter, ich weiss nicht, wie man es anwenden soll.
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 16.10.03 14:06
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| begin with TReplaceDialog(Sender) do begin StrList.Values[0] := 'a'; if StrList.Values[0] <> '' then end; |
Oder wie sonst soll ich den Vorschlag von Shark einbinden?
|
|
barfuesser
      
Beiträge: 324
|
Verfasst: Do 16.10.03 14:17
Was hat das mit StringReplace zu tun
barfuesser
|
|
Shark
      
Beiträge: 87
98, XP
D3, D5, D7
|
Verfasst: 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:
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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
for 'i' := 0 to StrList.count - 1 do begin FindText := StrList.Names[i]; ReplaceText := StrList.Values[FindText]; StrList.Values['Z'] := '1';
end; |
|
|
worm
      
Beiträge: 135
D6 Prof
|
Verfasst: Do 16.10.03 22:32
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin 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
      
Beiträge: 872
Win 8
Delphi 7
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Char; Shift: TShiftState); begin Case Key of 'Z', 'z': Key := '2'; 'E', 'e': Key := '3'; end; end; |
|
|
worm
      
Beiträge: 135
D6 Prof
|
Verfasst: 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 Delphi-Quelltext 1: 2: 3:
| case Chr(Key) of 'Z', 'z': Key := Ord('2'); 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.
|
|