Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Leeres Eingabefeld mit Standardwert füllen (https://www.delphipraxis.net/187701-leeres-eingabefeld-mit-standardwert-fuellen.html)

Jean312 24. Dez 2015 05:30

Leeres Eingabefeld mit Standardwert füllen
 
Ein Hallo an die DP-Gemeinde,
ich möchte Eingabefelder mit einem Standardwert füllen, wenn diese leer sind (z.B. Straßenname für das Eingabefeld "Straße"). Sobald das erste Zeichen in diesem Eingabefeld geschrieben wurde, soll dieser Standardwert verschwinden und wenn es leer ist wieder erscheinen.

Habe es mit Canvas.Textout versucht, dies löst aber eine Exception aus. Ich habe es im onCreate des Forms und im onChange des Eingabefeldes benutzt.
Hat jemand eine Idee, warum die Exception ausgelöst wird oder wie ich das realisieren kann?

Vielen Dank im Voraus.

Perlsau 24. Dez 2015 06:25

AW: Leeres Eingabefeld mit Standardwert füllen
 
  1. Default-String in einer Variablen im Private-Abschnitt als Konstante festlegen: EditText_Nachname = 'hier Nachname eingeben';
  2. Beim Programmstart Default-String zuweisen: Edit_Nachname.Text := EditText_Nachname;
  3. In der Ereignisbehandlung OnEnter prüfen, ob der Text in Edit_Nachname dem Default-String entspricht.
  4. Wenn ja, dann Edit_Nachname.Clear; ausführen, ansonsten den Text belassen.
  5. In der Ereignisbehandlung OnExit prüfen, ob Edit_Nachname.Text leer ist.
  6. Wenn ja, dann Default-String zuweisen: Edit_Nachname.Text := EditText_Nachname;
So würde zumindest ich das machen. Soll der Default-String erst verschwinden, wenn der Anwender Text eingibt, dann eben in OnKeyPress die Prüfung in Punkt 3 durchführen. OnKeyPress wird ausgelöst, bevor das gedrückte Zeichen ins Editfeld geschrieben wird. Daher kannst du in OnKeyPress prüfen, ob der String im Editfeld dem Defaultstring entspricht und diesen dann löschen, bevor das Zeichen geschrieben wird.

Jean312 24. Dez 2015 06:48

AW: Leeres Eingabefeld mit Standardwert füllen
 
Vielen Dank für die rasche Antwort.
Diese Methode hatte ich so ähnlich schon eingebunden.
Habe aber sehr viele Objekte dieser Art. Ich dachte mir, dass es eben mit dieser Art Textout auf ein ungefülltes Eingabefeld schneller geht.
Dann werde ich es eben wohl doch mit dem guten alten Stringvergleich machen müssen. 😕

frankyboy1974 24. Dez 2015 07:20

AW: Leeres Eingabefeld mit Standardwert füllen
 
hallo,

es gibt doch die Eigenschaft 'texthint' eines Tedit. Ich weiss nicht ab wann es diese Eigenschaft gibt, aber ich benutze diese schon seit Jahren.

mfg

Perlsau 24. Dez 2015 07:25

AW: Leeres Eingabefeld mit Standardwert füllen
 
Zitat:

Zitat von Jean312 (Beitrag 1325177)
Habe aber sehr viele Objekte dieser Art. Ich dachte mir, dass es eben mit dieser Art Textout auf ein ungefülltes Eingabefeld schneller geht.

In diesem Fall würde es sich aus meiner Sicht lohnen, eine eigene Komponente von TEdit abzuleiten und diese Funktionalität dort bereitzustellen. Du brauchst dann ein weiteres Property (published, so daß es im OI bearbeitet werden kann), in das der Default-String eingegeben wird. Die entsprechenden Überprüfungen kannst du dann ebenfalls gleich im Komponenten-Code erledigen.

Jean312 24. Dez 2015 08:56

AW: Leeres Eingabefeld mit Standardwert füllen
 
Habe mir das auch schon überlegt, aber eben noch nie gemacht. Muss mal sehen, ob ich hier Einträge finden kann, wie man soetwas umsetzt. Danke für eure Tipps.

haentschman 24. Dez 2015 09:05

AW: Leeres Eingabefeld mit Standardwert füllen
 
Moin...:P
Zitat:

In diesem Fall würde es sich aus meiner Sicht lohnen, eine eigene Komponente von TEdit abzuleiten
...wenn man nicht unbedingt was dabei lernen will kann man auch was fertiges nehmen. Das TJvEdit von den Jedis hat eine Property EmptyValue... :thumb: Sobald das Edit den Focus verliert und leer ist wird der EmptyValue hineingeschrieben. Beim Betreten wird der EmptyValue geleert um gleich schreiben zu können.

Perlsau 24. Dez 2015 09:13

AW: Leeres Eingabefeld mit Standardwert füllen
 
Noch nie gemacht – eine prima Gelegenheit, damit anzufangen:
Zitat:

Zitat von haentschman (Beitrag 1325183)
Moin...:P

Auch dir :cheers:

Zitat:

Zitat von haentschman (Beitrag 1325183)
Zitat:

In diesem Fall würde es sich aus meiner Sicht lohnen, eine eigene Komponente von TEdit abzuleiten
...wenn man nicht unbedingt was dabei lernen will kann man auch was fertiges nehmen. Das TJvEdit von den Jedis hat eine Property EmptyValue... :thumb: Sobald das Edit den Focus verliert und leer ist wird der EmptyValue hineingeschrieben. Beim Betreten wird das Edit geleert um gleich schreiben zu können.

War aber nicht ganz das, was der TE wollte: "Sobald das erste Zeichen in diesem Eingabefeld geschrieben wurde, soll dieser Standardwert verschwinden ..."

Uwe Raabe 24. Dez 2015 09:55

AW: Leeres Eingabefeld mit Standardwert füllen
 
Zitat:

Zitat von frankyboy1974 (Beitrag 1325178)
es gibt doch die Eigenschaft 'texthint' eines Tedit. Ich weiss nicht ab wann es diese Eigenschaft gibt, aber ich benutze diese schon seit Jahren.

Das ist genau die richtige Lösung. Die Funktionalität gibt es wohl schon seit Windows Vista, aber die erste Delphi-Version, die das Property anbietet, kann ich gerade auch nicht benennen. Bei XE2 ist es zumindest schon dabei.

DeddyH 24. Dez 2015 09:56

AW: Leeres Eingabefeld mit Standardwert füllen
 
Genau, wozu das Rad neu erfinden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz