Autor Beitrag
Daniel L.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140
Erhaltene Danke: 14

W7, W8
TurboD Prof, Delphi Community
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Fr 18.07.14 08:11 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 18.07.14 08:17 
user profile iconDaniel L. hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconzuma sehr gut. Alternativ kann man natürlich auch ein TLabel statt eines TEdit verwenden.
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140
Erhaltene Danke: 14

W7, W8
TurboD Prof, Delphi Community
BeitragVerfasst: 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



BeitragVerfasst: Fr 18.07.14 13:25 
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Darf es sowieso nicht bearbeitet werden, dann funktioniert der Tipp von user profile iconzuma sehr gut. Alternativ kann man natürlich auch ein TLabel statt eines TEdit verwenden.

Und wozu gibt es dann das Property ReadOnly?

user profile iconDaniel L. hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TFormMain.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  If (Key = #3)  Or   // Strg-C gedrückt
     (Key = #24Then // Strg-X gedrückt
  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:

ausblenden 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 :lol:
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Fr 18.07.14 14:04 
Und dann drückt jemand STRG + EINF bzw. SHIFT + EINF :twisted:. 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. :gruebel:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Fr 18.07.14 14:22 
user profile iconPerlsau hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Darf es sowieso nicht bearbeitet werden, dann funktioniert der Tipp von user profile iconzuma sehr gut. Alternativ kann man natürlich auch ein TLabel statt eines TEdit verwenden.

Und wozu gibt es dann das Property ReadOnly?

ReadOnly verhindert nicht, dass man die Daten markieren und kopieren kann. :wink:
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.
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 18.07.14 14:30 
user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
ReadOnly verhindert nicht, dass man die Daten markieren und kopieren kann. :wink:
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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 140
Erhaltene Danke: 14

W7, W8
TurboD Prof, Delphi Community
BeitragVerfasst: Fr 18.07.14 16:44 
Also keinen Streit meinetwegen :wink:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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



BeitragVerfasst: Sa 19.07.14 08:49 
Vermutlich geht's um's "Galgemännle", wie man bei uns im Badischen sagt :?