Hallo Zusammen,
Sorry für die Frage, ich such mir schon seit Tagen nen Wolf finde aber leider nichts.
Ich möchte ein Edit Feld zur Eingabe einer Uhrzeit benutzen.
Das Format soll so aussehen und 24 Std berücksichtigen.
Im leeren Zustand soll es so aussehen. Der User soll keine andere Eingabe-Möglichkeit haben.
__ : __
Beispiel
08:00
Wäre für nen Tip echt dankbar .
Lg Bernie
Editfeld Uhrzeit Format
Re: Editfeld Uhrzeit Format
Das sieht mir nach einem Fall für ein TMaskEdit aus. Trage als EditMask den String '00:00' ein, dann erscheint genau die Eingabemaske wie von dir gefordert. Die Uhrzeit 16:55 würde dann mit den Tasten '1', '6', '5', '5' eingegeben, ohne den Doppelpunkt. Es gäbe auch die Möglichkeit, '90:90' zu nehmen, damit wären jeweils die 10er Stellen optionar; allerdings muss man dafür die Pfeiltaste drücken, was ich unergonomisch finde.
Die '0' in der Eingabemaske erlaubt nur die Eingabe einer Ziffer an der entsprechenden Stelle, der Doppelpunkt wird durch den TimeSeparator der FormatSettings ersetzt (bei uns aber auch wieder ein Doppelpunkt). Allerdings gibt es m.E. keine Möglichkeit für die 1.Stelle der Stunden nur eine '0', '1' oder '2' und für die erste Stelle der Minuten nur eine '0'..'6' zuzulassen, sodass weiterhin fehlerhafte Uhrzeiten eingetippt werden können.
Siehe: https://wiki.freepascal.org/TMaskEdit
Alternative Zeiteingabe-Felder wären TTimeEdit (standardmäßig auf Palette "Misc") oder TDateTimePicker (Über "Package" > "Install/Uninstall Packages" nachzuinstallieren, Packages DateTimectrls und DateTimeCtrlsDsgn).
Die '0' in der Eingabemaske erlaubt nur die Eingabe einer Ziffer an der entsprechenden Stelle, der Doppelpunkt wird durch den TimeSeparator der FormatSettings ersetzt (bei uns aber auch wieder ein Doppelpunkt). Allerdings gibt es m.E. keine Möglichkeit für die 1.Stelle der Stunden nur eine '0', '1' oder '2' und für die erste Stelle der Minuten nur eine '0'..'6' zuzulassen, sodass weiterhin fehlerhafte Uhrzeiten eingetippt werden können.
Siehe: https://wiki.freepascal.org/TMaskEdit
Alternative Zeiteingabe-Felder wären TTimeEdit (standardmäßig auf Palette "Misc") oder TDateTimePicker (Über "Package" > "Install/Uninstall Packages" nachzuinstallieren, Packages DateTimectrls und DateTimeCtrlsDsgn).
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Editfeld Uhrzeit Format
Hallo!
Bei MaskEdit muss man dann auch kontrollieren, ob die Stunde >= 24 ist und die Minute >=60 - und dann meckern oder automatisch korrigieren.
Dann kann man alles auch gleich selbst machen.
Ich hab vor langer Zeit mal selbst ein TEdit als Time-Editor benutzt.
Die Edit-Componente heisst TimeEdit.
Der Anfangswert is 00:00 und nicht __:__ - sonst müsste man noch Einiges an Code hinzufügen!
Winni
Bei MaskEdit muss man dann auch kontrollieren, ob die Stunde >= 24 ist und die Minute >=60 - und dann meckern oder automatisch korrigieren.
Dann kann man alles auch gleich selbst machen.
Ich hab vor langer Zeit mal selbst ein TEdit als Time-Editor benutzt.
Die Edit-Componente heisst TimeEdit.
Code: Alles auswählen
procedure TForm5.FormCreate(Sender: TObject);
begin
TimeEdit.text := '00:00';
end;
function FillLeadingZeros(s: String; len: Integer) : string; inline;
begin
while length(s) < len do s := '0'+s;
result := s;
end;
// Time editor
procedure TForm5.TimeEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var p, iH, iMin, sel : Integer;
s,h, min : string;
procedure checkAndSet;
begin
if iMin >= 60 then begin iMin := 0; inc(iH); end;
if iMin < 0 then begin iMin := 59; dec(iH); end;
if iH > 23 then iH := 0;
if iH < 0 then iH := 23;
str(iH,H);
str (iMin,min);
H := FillLeadingZeros(H,2);
Min := FillLeadingZeros(Min,2);
TimeEdit.Text := h+':'+min;
TimeEdit.SelStart := sel;
end;
procedure GetInts;
begin
h := copy (s,1,2);
min := copy(s,4,2);
iH := Str2Int(h);
iMin := Str2Int(min);
end;
begin
if key in [VK_0..VK_9,VK_UP,VK_Down,VK_LEFT,VK_RIGHT,VK_END,VK_HOME,VK_RETURN, VK_TAB] then else key := 0;
sel := TimeEdit.SelStart;
s := TimeEdit.Text;
if key in [VK_Up, VK_Down] then
begin
getInts;
if sel <=2 then // hours
begin
if key = VK_Up then Inc(iH) else dec(iH);
end else // minutes
begin
if key = VK_Up then inc(iMin) else dec(iMin);
end;
checkAndSet;
end; // up down
if key in [Vk_0..VK_9] then
begin
p := sel+1;
if (p>0) and (p<= length(s)) and (s[p] <> ':') then
BEGIN
s[p] := chr(key);
key := 0;
inc(sel);
p := sel+1;
if (p>0) and (p<= length(s)) and (s[p] = ':') then inc(sel);
GetInts;
checkAndSet;
end;
end;
end;
Winni
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2805
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Editfeld Uhrzeit Format
Schau mal in der Kompoenentenpalette unter dem Tab Misc. Da liegt eine Komponente namens TTimeEdit. Wäre die etwas für dich?


Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: Editfeld Uhrzeit Format
Hallo Ihr beiden & danke für eure Antworten.
Schau mir mal alles an. Wobei ich wohl mein Glück mal mit TTimeEdit versuchen werde. Wollte jetzt nicht das Rad neu erfinden
Mal sehen was ich hierzu noch alles finde und ob bzw wie man damit Berechnungen anstellen kann.
Lg Bernie
Schau mir mal alles an. Wobei ich wohl mein Glück mal mit TTimeEdit versuchen werde. Wollte jetzt nicht das Rad neu erfinden

Mal sehen was ich hierzu noch alles finde und ob bzw wie man damit Berechnungen anstellen kann.
Lg Bernie