Entwickler-Ecke

Sonstiges (Delphi) - Tasten in Memo verbieten


Eddie - So 16.10.05 21:37
Titel: Tasten in Memo verbieten
Hi Leute,

Ich würde gerne wissen wie ich in einem Memo folgende Tasten "verbieten" kann:
- Backspace
- Entfernen
- Pfeiltasten

Außerdem würde ich es gerne so machen, dass man nichts mehr in das Memo einfügen kann.

Wär schön wenn ihr mir helfen könnt.
Vielen Dank schon mal.


DarkHunter - So 16.10.05 21:39

Wenn du das Memo auf readonly stellst kann der Anwender nix mehr einfügen

die Tasten kannst du verbieten indem du sie über keydown abfängst


Eddie - So 16.10.05 21:44

Wenn ich das Memo auf ReadOnly stelle kann ich aber auch nichts mehr reinschreiben!

Das andere werd ich mal probieren. Danke


DarkHunter - So 16.10.05 21:51

Das ist der Sinn von ReadOnly -> der Anwender kann nix mehr reinschreiben
Das Programm hingegen schon


Eddie - So 16.10.05 21:54

Das ist aber nicht dass was ich bezwecken will!!!
Der nutzer soll ja noch alle Tasten (außer die oben genannten) benutzen können und da nützt ReadOnly nix!


DarkHunter - So 16.10.05 21:56
Titel: Re: Tasten in Memo verbieten
user profile iconEddie hat folgendes geschrieben:

Außerdem würde ich es gerne so machen, dass man nichts mehr in das Memo einfügen kann.


dann hab ich den Satz falsch verstanden, sorry


Christian S. - So 16.10.05 21:56

Dann hilft DarkHunters zweiter Hinweis: Im OnKeyDown-Ereignis abfangen. Dazu am Besten mal die Suche im Forum bemühen. :-)


Ironwulf - So 16.10.05 21:56
Titel: Re: Tasten in Memo verbieten
[quote="user profile iconEddie"]
Außerdem würde ich es gerne so machen, dass man nichts mehr in das Memo einfügen kann.
quote]

Was soll der Satz dann aussagen?

EDIT:

mal wieder zu spät...


Eddie - So 16.10.05 22:04

Sorry. Da hab ich mich wohl etwas unverständlich ausgedrückt.
Ich meinte das man nichts mehr aus dem Zwischenspeicher einfügen kann.


DarkHunter - So 16.10.05 22:06

also möchtest du "Einfügen" verbieten, bzw STRG+V richtig?


Eddie - So 16.10.05 22:08

jap.


DarkHunter - So 16.10.05 22:08

Müsstest du auch über das KeyDown abfangen, sollte aber zu machen sein.


Lannes - So 16.10.05 22:10

Hallo,

da http://www.delphi-forum.de/viewtopic.php?t=49660&start=0&postdays=0&postorder=asc&highlight= geht es zwar um ein EditFeld, aber das kannst Du einfach anpassen.


Eddie - So 16.10.05 22:19

Vielen Dank für den Tipp. Werd mal ausprobieren.


Eddie - Mi 19.10.05 10:51

Ich hab das jetzt mal ausprobiert. Das mit der Zwischenablage von Lannes hat hervorragend funktioniert.

Die Sache mit den Tasten funktioniert aber nicht ganz.
Ich habs folgendermaßen probiert (In KeyPress):


Delphi-Quelltext
1:
2:
If Key = Char(vk_Backspace) then
  Key := #0;

Mein Problem ist jetzt folgendes: Die Tasten Entf, Pos1, Ende und die Pfeiltasten funktionieren trotzdem noch.
Hab schon alles mögliche Probiert und es hat einfach nicht funktioniert. Kann mir vielleicht jemand sagen was ich falsch mache?


Lossy eX - Mi 19.10.05 11:02

Also ich bin ganz ehrlich der Meinung du solltest das Memo komplett sperren und zusätzliche Eingaben über ein Editfeld oder anderweitig ermöglichen. Der Grund ist recht simple. Du musst unter anderem Strg+A blocken. Du musst die Mausmarkierungen blocken. Sobald etwas markiert wird und eine Taste gedrückt wird musst du dies abfangen und darauf reagieren. Du möchtest zu viel verhindern. Mir stellt sich da die Frage ob das so sinnvoll ist und ob der Benutzer da nicht vielleicht eine total verkrüppelte Steuerung vorgesetzt bekommt und es letzten endes nicht mehr sinnvoll benutzen kann.

Wäre auch mal interessant zu wissen was du damit vor hast. Vielleicht gibt es ja eine besser Möglichkeit als ihn so umstänndlich zu beschneiden. Vor allem da du recht viel Zeit investieren musst und es dann doch noch irgendwelche Schlupflöcher gibt.


Eddie - Mi 19.10.05 11:06

Ich bin dabei einen Schreibtrainer um das 10-Fingersystem zu lernen, zu schreiben.
Die Tasten möchte ich verbieten weil es einen Modus gibt wo keine korrektur erlaubt ist.


Lannes - Mi 19.10.05 11:39

Hallo,
zu deinem Code, vk_Backspace ist falsch, so ist es richtig:

Delphi-Quelltext
1:
2:
If Key = Char(vk_Backthen
  Key := #0;


@user profile iconLossy eX: richtig :!:

@user profile iconEddie:
Probier mal dies:
- ein Panel auf die Form
- Panel.Enabled auf False
- auf das Panel das Memo
- den folgenden Code in das Ereignis OnKeyPress der Form

Delphi-Quelltext
1:
2:
if Key in ['a'..'z','A'..'Z','0'..'9',' 'then//<---- anpassen
  Memo.Text := Memo.Text + Key;


Lossy eX - Mi 19.10.05 11:50

Ähh. Lanes. War schneller. In etwa so etwas würde ich auch empfehlen.

Du könntest das Memo auch auf ReadOnly stellen und beim OnKeyPress des Memos dann die Buchstaben hinzufügen. Je nachdem was dir optisch besser gefällt und wie das besser in dein Programm passt könntest du bei einem solchen Test ein extra Fenster aufpoppen lassen und in einem Label den zu tippenden Text und in einem anderen die Zeichen von Form.OnKeyPress darstellen. Also Möglichkeiten gibt es genügend. Es kommt nur darauf an was für den Benutzer offensichtlicher ist und was besser aussieht.


Eddie - Do 20.10.05 19:57

user profile iconLannes hat folgendes geschrieben:
Hallo,
zu deinem Code, vk_Backspace ist falsch, so ist es richtig:

Delphi-Quelltext
1:
2:
If Key = Char(vk_Backthen
  Key := #0;


So stands natürlich auch bei mir im Quelltext. Ich saß zu dem Zeitpunkt nur grad nicht vor dem Programm sonder in der Schule vorm PC. :D

Auf jeden fall hab ich die Tipps ein wenig abgewandelt und habs jetzt so hingekommen, dass alles so funktioniert wie ichs haben wollte.
Vielen Dank!!