Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Punkte in Edit.Text fest vorgeben (https://www.delphipraxis.net/148745-punkte-edit-text-fest-vorgeben.html)

paulus11 7. Mär 2010 17:07


Punkte in Edit.Text fest vorgeben
 
Guten Abend,

ich wollte euch mal fragen, ob es möglich ist Punkte in einer Edit.Text-Komponente vorzugeben bzw. fest zu integrieren.
Das heißt ich öffne das Programm und in die Text Edit kann ich dann, in meinen Fall, das Datum eingeben, wobei das dann diesem Format entsprechen sollte: "dd.mm.yyyy" ... und die Punkte sollen schon fest vorgegeben sein und nicht verschwinden oder sonstiges.
Hoffe es gibt eine einfache Antwort.

Lieben Dank an alle die eine Antwort parat haben!

Lg

SirThornberry 7. Mär 2010 17:10

Re: Punkte in Edit.Text fest vorgeben
 
Die einfachste Art ist ein TMaskEdit zu verwenden. Dort kann man so etwas einstellen.
Eine andere Möglichkeit der Datumseingabe ist die Verwendung eines TDateTimePickers (oder so ähnlich)

paulus11 7. Mär 2010 19:43

Re: Punkte in Edit.Text fest vorgeben
 
Cool, danke funktioniert einwandfrei.

Jetzt noch eine Frage^^...ich lasse die Daten (Plural von Datum) in eine Spalte einer StringGrid schreiben.
Wenn ich dann auf einen Button klicke, kann ich die gesamte StringGrid bearbeiten.
Da der Benutzer nicht immer das ganze Datum mit Punkten eingeben soll, wollte ich nun fragen, ob es möglich ist, dieses Format (dd.mm.yyyy) mit den festen Punkten auch auf eine ganze StringGrid-Spalte zu übertragen?
Hab leider keine Option gefunden wo man das einstellen kann.:/

Nochmal danke für die schnelle Antwort.;)

Matze 7. Mär 2010 21:40

Re: Punkte in Edit.Text fest vorgeben
 
Hallo,

ich vermute, du hast "goEditing" auf "true".

Delphi-Quellcode:
// Ereignis: OnGetEditMask
procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer;
  var Value: string);
begin
   with Sender as TStringGrid do
   begin
     if ACol = 1 then // in diesem Beispiel: Index 1 = Spalte 2
       Value := '!90.90.9900;1;_';
   end;
end;
Beim manuellen Editieren im StringGrid wird die Maske verwendet. In dem Fall für die 2. Spalte.

Übrigens, denke daran, die Eingaben zu prüfen. Denn die Maske garantiert nicht, dass ein gültiges Datum eingegeben wird. Auch "49.13.8273" wäre zulässig, jedoch kein gültiges Datum.

Grüße, Matze

paulus11 8. Mär 2010 07:48

Re: Punkte in Edit.Text fest vorgeben
 
Hey, viele Dank das du mir hilfst.
Ich habe jetzt aber ein Problem das richtig einzubinden.
Liegt wahrscheinlich an meinen Schul-Delphi.-.-

Also: Wie kann ich diese procedure in eine "Button-procedure" einbauen...bzw. gleich direkt in die procedure für den Button einbinden.

Tut mir leid für die dumme Frage..für euch ist das sicher ein Kinderspiel.

Thx für jede Antwort!

Matze 8. Mär 2010 11:15

Re: Punkte in Edit.Text fest vorgeben
 
Vielleicht habe ich dich auch falsch verstanden, aber ein Button ist hier überflüssig.

Wenn du bei StringGrid "Options.goEditing" auf "true" hast (davon ging ich aus), dann kannst du den StringGrid-Inhalt direkt im StringGrid ändern ohne zusätzlichen Button.
Und mein Code baut dir die Datumsmaske in das StringGrid ein, wenn du dieses direkt editierst.

paulus11 8. Mär 2010 16:05

Re: Punkte in Edit.Text fest vorgeben
 
Ah ok, gut ich hab deine procedure ganz einfach ins Programm miteingebunden (seperat), nur komischerweise fundktioniert es nicht...also ich kann die StringGrid bearbeiten, aber ohne vorgegebene "Maske".
Muss ich noch irgendwas konkretes beachten?

Matze 8. Mär 2010 16:10

Re: Punkte in Edit.Text fest vorgeben
 
Ja du musst dir die Ereignis-Prozedur von Delphi generieren lassen. Das geht so:

- Markiere das StringGrid (einmal drauf klicken)
- Wechsel zum Objektinspektor auf den Reiter "Ereignisse"
- Suche den Eintrag "OnGetEditMask" und klicke dort doppelt
- Delphi erstellt nun die Prozedur und dort fügst zu die fehlenden Zeilen meines Codes ein.

Und wie geschrieben gilt mein Code für die 2. StringGrid-Spalte. Für andere Spalten musst du "ACol" anpassen.

paulus11 8. Mär 2010 16:56

Re: Punkte in Edit.Text fest vorgeben
 
Boa, cool es funktioniert einwandfrei.
Vielen Dank, du hast meinen Horizont echt erweitern können.
Kannst du mir vllt. noch sagen was Delphi in deiner Procedure genau macht, weil ich kenn aus der Schule diese Art von "proceduren" nicht und weiß nicht genau was man dort wie schreiben kann/muss.

Delphi-Quellcode:
with Sender as TStringGrid do
   begin
     if ACol = 1 then // in diesem Beispiel: Index 1 = Spalte 2
       Value := '!90.90.9900;1;_';
   end;
Ich danke dir sehr für deine gedult, gibt nicht viele die die haben.:)

DANKE

Matze 8. Mär 2010 17:57

Re: Punkte in Edit.Text fest vorgeben
 
Hallo,

also im Prozedurkopf stehen Parameter. Das kennst du sicher von Funktionen.
Im Parameter "Sender" steht die Komponente, die die Prozedur aufruft (hier: das StringGrid). In "ACol" und "ARow" stehen die Indizes der Zelle, die gerade vom Anwender bearbeitet wird (Spalten- und Zeilenindex). "Value" ist ein Parameter, der seinen Wert nach außen weitergibt, denn vor "Value" steht "var" (Call-By-Reference und nicht wie sonst Call-By-Value, falls du da nachschlagen möchtest).
"Value" wird dem StringGrid als Maske zurück gegeben.
Und genau diese Maske setzen wir in der Prozedur beim Editieren der 2. Spalte (ACol = 1).

Das mal ganz grob. Genaueres können dir sicher andere sagen, falls du weitere Informationen dazu haben möchtest. Was Delphi intern genau wohin weitergibt o.ä. weiß ich auch nicht.

Grüße, Matze


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 Uhr.

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