Konuyu Paylaş : facebook gplus twitter

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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba.

@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

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Kolon rengi serhat 3 248 16-01-2018, Saat: 13:41
Son Yorum: Abdullah ILGAZ
  Excel satır rengi dilo 3 366 02-01-2018, Saat: 12:05
Son Yorum: dilo
  pagecontrol rengi hakkında goabdullah 4 613 14-12-2016, Saat: 10:01
Son Yorum: SimaWB



Konuyu Okuyanlar: 1 Ziyaretçi