Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Yanlış ise font rengi değişsin
#1
Selam.

function kullanarak 3 farklı edit'deki time formatını doğruysa siyah yanlış ise font rengini kırmızı yaparak kullanıcıya bilgilendirmek istiyorum;
Fakat tek bir function ile hangi 3 edit'den biri time yanlış girilmişse o edit'in fontunu nasıl kırmız yaptırabilirim?



function TMainForm.TimeKontrol(Const StrSure: String): String;
begin
  Kontrol := Edit1.Text;
  if (Length(Kontrol) = 8) and (Copy(Kontrol, 3, 1) = ':') and   (Copy(Kontrol, 6, 1) = ':') and (StrToTimeDef(Kontrol, Now) <> (Now)) then
  begin
    Edit1.Font.Color := $000000;
  end
  else
  begin
    Edit1.Font.Color := $0000FF;
  end;
Hayat bazen güzel olabiliyor.
Cevapla
#2
Merhaba, 
Sorularımız da kullandığımız IDE sürümünü de yazarsak cevapları ona göre yazmamız daha kolay olur.. 

Yeni sürümlerde kendi bünyesinde gelen Regular Expressions ile bu tip kontrolleri yapmak inanılmaz basitleşti.. 
Regular expressions + Helper yazarak form üzerine koyduğunuz tüm TEdit sınıfı için artık ekstra kod yazmadan "<nesneadi>.SaatFormatiniKontrolEt;" yazman yeterli olacaktır..
Saat formatını kontrol ettirirken unutmamız gereken bir kaç kontrol var.. 
SAAT : 00 - 23 arası değer alabilir..
DAKİKA ve SANİYE : 00 - 59 arası değer alabilir..
Ayrıca bunların arasında ayraç olarak ":" vardır.. 
Tüm bu kontrolleri gördüğün gibi tek bir satır ile çözebiliyoruz..

Kolay gelsin,
İyi çalışmalar.

unit Unit1;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;


type
TEditHelper = class helper for TEdit
 procedure SaatFormatiniKontrolEt;
end;


type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation
{$R *.dfm}
uses System.RegularExpressions;

{ TEditHelper }

procedure TEditHelper.SaatFormatiniKontrolEt;
const
APattern = '^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$';
ArrayOfColor : Array [False..True] of TColor = (clRed, clBlack);
begin
 Self.Font.Color := ArrayOfColor[ TRegEx.IsMatch(self.Text, APattern, []) ];
end;

end.

Kullanımı :
Edit1.SaatFormatiniKontrolEt;
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#3
Merhaba.

@barutali süper bir çözüm vermiş. Üstüne laf gibi algılanmasın, eski Delphi sürümü kullananlar için izlediğin yol da doğru, seninkinin kontrollü bir versiyonunu ve kullanımını yazayım.

Sihrili kelime TEdit(Sender)  ile kodlanmış kısmıdır. Kaç tane EDIT nesnen varsa hepsini bir tanesinin  OnChange eventine bağlarsan, hepsi için aynı şekilde çalışır. Idea

Aynı şekilde @barutali 'nin verdiği örnek için de OnChange eventine

TEdit(Sender).SaatFormatiniKontrolEt;
şeklinde kullandığın ve her EDIT nesneni aynı OnChange eventine yönlendirirsen sonuç alırsın.


function TimeKontrol(Const StrSure: String): TColor;
Var
 DefTime : TDateTime;
begin
 DefTime :=  Now();
 Result  := clRed;
 if    (Length(strSure) = 8)
   and (Copy(strSure, 3, 1) = ':')
   and (Copy(strSure, 6, 1) = ':')
   and (StrToTimeDef(strSure, DefTime) <> (DefTime))
   then Result := clBlack;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
 TEdit(Sender).Font.Color := TimeKontrol( TEdit(Sender).Text );
end;
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#4
(24-12-2016, Saat: 21:50)mrmarman Adlı Kullanıcıdan Alıntı: Merhaba.

@barutali süper bir çözüm vermiş. Üstüne laf gibi algılanmasın, eski Delphi sürümü kullananlar için izlediğin yol da doğru, seninkinin kontrollü bir versiyonunu ve kullanımını yazayım.

Sihrili kelime TEdit(Sender)  ile kodlanmış kısmıdır. Kaç tane EDIT nesnen varsa hepsini bir tanesinin  OnChange eventine bağlarsan, hepsi için aynı şekilde çalışır. Idea

Aynı şekilde @barutali 'nin verdiği örnek için de OnChange eventine

TEdit(Sender).SaatFormatiniKontrolEt;
şeklinde kullandığın ve her EDIT nesneni aynı OnChange eventine yönlendirirsen sonuç alırsın.


function TimeKontrol(Const StrSure: String): TColor;
Var
 DefTime : TDateTime;
begin
 DefTime :=  Now();
 Result  := clRed;
 if    (Length(strSure) = 8)
   and (Copy(strSure, 3, 1) = ':')
   and (Copy(strSure, 6, 1) = ':')
   and (StrToTimeDef(strSure, DefTime) <> (DefTime))
   then Result := clBlack;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
 TEdit(Sender).Font.Color := TimeKontrol( TEdit(Sender).Text );
end;

Estağfurullah hocam.. Sizden çok şey öğrendim.. Hakkınızı helal edin.
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#5
Barutali tek kelime mükemmel, elinize sağlık...

Mrmarmah çok teşekkür ederim, sizi aramızda tekrar gördüğüme sevindim...
Hayat bazen güzel olabiliyor.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Uygulama, geçerli işlem için yanlış türde bir değer kullanıyor. şeklinde hata uyarısı denizfatihi 11 2.987 30-12-2021, Saat: 13:45
Son Yorum: denizfatihi
  Panel rengi Husv 3 1.149 20-12-2021, Saat: 20:48
Son Yorum: engerex
  [ÇÖZÜLDÜ] Anahtar sütun bilgileri yetersiz veya yanlış hatası cemakkus 2 1.479 14-11-2021, Saat: 10:45
Son Yorum: cemakkus
  Delphi'de harici font dosyası kullanma imkanı varmı? Nasıl? ferhatganem 2 1.133 04-04-2021, Saat: 14:56
Son Yorum: ozcanm
  Memo font rengi değiştirme Haydar 3 2.314 05-06-2020, Saat: 16:12
Son Yorum: cinarbil



Konuyu Okuyanlar: 1 Ziyaretçi