Autor |
Beitrag |
Daniel L.
      
Beiträge: 140
Erhaltene Danke: 14
W7, W8
TurboD Prof, Delphi Community
|
Verfasst: Do 17.07.14 17:49
Hallo zusammen,
wie kann in verhindern, dass der Benutzer in einem TEdit den Text bzw. Textausschnitte markieren kann?
sänks - Daniel
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 17.07.14 18:22
Zuerst einmal mußt du auf Tastatureingaben und Mausklicks reagieren, denn nur damit kann der Anwender markieren. Von dort aus verweist du auf deine private Methode, um jegliche Markierung rückgängig zu machen: SelLength := 0;
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Fr 18.07.14 08:00
im OnEnter-Ereignis des TEdit einfach den Focus auf ein
anderes Objekt setzen dürfte die einfachste Methode sein 
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
baumina
      
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: Fr 18.07.14 08:11
zuma hat folgendes geschrieben : | im OnEnter-Ereignis des TEdit einfach den Focus auf ein
anderes Objekt setzen dürfte die einfachste Methode sein  |
Nur dann kann der arme Benutzer niemals einen Text dort eingeben *kicher
Wie wärs denn damit :
www.swissdelphicente...showcode.php?id=1403
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 18.07.14 08:17
Daniel L. hat folgendes geschrieben : | wie kann in verhindern, dass der Benutzer in einem TEdit den Text bzw. Textausschnitte markieren kann? |
Welchen Sinn soll das denn haben?
Wenn der Anwender diesen Text verändern können soll, dann schränke ich die Bearbeitungs-Möglichkeiten doch nicht unnötig ein.
Darf es sowieso nicht bearbeitet werden, dann funktioniert der Tipp von zuma sehr gut. Alternativ kann man natürlich auch ein TLabel statt eines TEdit verwenden.
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Fr 18.07.14 08:26
hab das auch so verstanden, das das TEdit nur zur Anzeige genutzt wird.
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
Daniel L. 
      
Beiträge: 140
Erhaltene Danke: 14
W7, W8
TurboD Prof, Delphi Community
|
Verfasst: Fr 18.07.14 11:51
Also der Nutzer soll schon noch ins Edit schreiben können.
Der Verweis auf swissdelphicenter ins hilfreich, danke.
Gruss: Daniel
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 18.07.14 13:25
jasocul hat folgendes geschrieben : | Darf es sowieso nicht bearbeitet werden, dann funktioniert der Tipp von zuma sehr gut. Alternativ kann man natürlich auch ein TLabel statt eines TEdit verwenden. |
Und wozu gibt es dann das Property ReadOnly?
Daniel L. hat folgendes geschrieben : | Also der Nutzer soll schon noch ins Edit schreiben können. Der Verweis auf swissdelphicenter ins hilfreich, danke. |
Was willst du wirklich erreichen? Daß man kein Zeichen in deinem Edit markieren kann oder daß man keines kopieren kann?
Für den ersten Fall hab ich dir bereits eine einfache Lösung gezeigt.
Für den zweiten Fall läßt du einfach die beiden Tastenkombinationen Strg-C und Strg-X nicht zu:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TFormMain.Edit1KeyPress(Sender: TObject; var Key: Char); begin If (Key = #3) Or (Key = #24) Then Key := #0; end; |
Die entsprechenden Tastencodes kannst du ganz leicht mit dem kleinen Tool von Leuselator ermitteln.
Nun bleibt nur noch, das Context-PopUp-Menü zu verhindern. Entweder du weist deinem Edit ein eigenes PopUp-Menü zu oder du schreibst in die Ereignisbehandlung für das Erscheinen des Context-PopUps einfach Folgendes:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TFormMain.Edit1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); begin Handled := True; end; |
Damit findet das Ereignis-Handle in deinem Edit ein frühes Grab 
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Fr 18.07.14 14:04
Und dann drückt jemand STRG + EINF bzw. SHIFT + EINF  . Statt der Tastenkombinationen/des Kontextmenüs sollte man daher besser die entsprechenden Messages deaktivieren, wie es der Code der Schweizer wohl nach kurzem Überfliegen tut.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 18.07.14 14:09
Kopieren funktioniert von außen ja trotzdem noch jederzeit mit jedem Tool, das das Editfeld direkt ausliest, zudem kann man den Text ja abschreiben. Einen Sinn sehe ich darin gerade nicht.
WM_GETTEXT müsste man z.B. noch zusätzlich abfangen. Dazu die Accessibility-Funktionen usw.
Jedenfalls macht es dann eher Sinn ein eigenes Control zu implementieren. Da funktionieren die Standardwege nicht und man muss diese nicht erst alle abfangen.
Ein Programm mit Controls, die den Zugriff auf ihre Texte blocken, kann (bzw. darf in einigen Einrichtungen) allerdings dann nicht überall verwendet werden, wenn dann auch die Screenreader für Sehbehinderte nicht funktionieren...
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 18.07.14 14:22
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 18.07.14 14:30
jasocul hat folgendes geschrieben : | ReadOnly verhindert nicht, dass man die Daten markieren und kopieren kann.
Dann müsste man schon Enabled auf False setzen. Der graue Text sieht dann aber auch nicht besonders hübsch aus. Kann man natürlich auch wieder anpassen, aber dann wird wieder suggeriert, dass man auf das TEdit zugreifen kann. Also alles irgendwie nicht besonders angenehm und schon gar nicht an irgendwelche Standards ausgerichtet. |
Ja glaubst du etwa , das weiß ich nicht? Ich habe doch nirgendwo was Gegenteiliges behauptet! Wie kommst du dazu, mich derart unqualifiziert belehren zu wollen?
Letztlich habe ich auf jene Aussage geantwortet, die behauptet, daß man, wenn man die Bearbeitung eines Edits verhindern will, diesem Edit bei OnEnter den Focus entreißen sollte. Dieses Vorgehen ist garantiert kein Standard! Dafür gibt es das Property ReadOnly. Also bitte nichts durcheinanderbringen und Beiträge etwas aufmerksamer lesen! Du hast z.B. auch überlesen, daß der TE nicht möchte, daß das TEdit für die Bearbeitung gesperrt ist. Um genauer in Erfahrung zu bringen, was der TE eigentlich beabsichtigt, habe ich ihm genau diese Frage gestellt. Die Antwort darauf muß man wissen, wenn man sein Problem lösen will.
Im Übrigen habe ich oben ausführlich beschrieben, wie man sauber verhindert, daß der Eintrag eines TEdit kopiert werden kann (getestet). Was soll deiner Meinung daran nicht funktionieren?
Zuletzt bearbeitet von Perlsau am Fr 18.07.14 14:33, insgesamt 1-mal bearbeitet
|
|
Daniel L. 
      
Beiträge: 140
Erhaltene Danke: 14
W7, W8
TurboD Prof, Delphi Community
|
Verfasst: Fr 18.07.14 16:44
Also keinen Streit meinetwegen
Kurz angedeutet: Es geht um ein Wörter - Ratespiel.
Der User soll u.a. in einem Editfeld ein Wort editieren können, in dem er einzelne Buchstaben hinzufügen oder entfernen kann, aber er soll weder markieren noch paste % copy können.
Entsprechend werde ich eure Vorschläge probieren.
Danke nochmal: Daniel L.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.07.14 08:18
Das hört sich erst recht so an als sei ein TEdit nicht sinnvoll.
Für ein Spiel würde ich das Ganze auf einer Paintbox selber zeichnen.
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 19.07.14 08:49
Vermutlich geht's um's "Galgemännle", wie man bei uns im Badischen sagt 
|
|