delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيفية حساب العمر عن طريق ادخال السنة فقط
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله وبركاته

واجهتني هذه النقطة في عملية تحويل العمر عن طريق ادخال سنة الميلاد في edit فقط فتعطيني العمر

في edit2

PHP كود :
function Years(PastDate,CurrentDate:TDate):integer;
var
  
PastMonth,PastDay,PastYear,CurrentYear,CurrentMonth,CurrentDay:word;
begin
  DecodeDate
(PastDate,PastYear,PastMonth,PastDay);
  
DecodeDate(CurrentDate,CurrentYear,CurrentMonth,CurrentDay);
  if (
PastYear=CurrentYear) and (PastMonth=CurrentMonth) and (PastDay=CurrentDay) then
    Result
:=0
  
else
  
begin
    Result
:=CurrentYear-PastYear;
    if (
PastMonth>CurrentMonth) then
      Dec
(Result)
    else
    
begin
      
if PastMonth=CurrentMonth then
        
if (PastDay>CurrentDay) then
          Dec
(Result);
    
end;
  
end;
end;

procedure TForm1.dtp1Change(Sender: TObject);
begin
 Edt3
.Text := IntToStr(YearsBetween(dtp1.Date,now));
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
 Edt2
.Text:=Format(' %d ', [Years(StrToDate('03/06/1978'),Date)]);
 
end;

end. 
محاولة تغير التاريخ كمل ب EDIT1.TEXT
PHP كود :
procedure TForm1.edt1Change(Sender: TObject);
var
   
date1, date2: TDate;
begin
  date1 
:= StrTofloat(Edt1.Text);
  
date2 := Now;
  
Edt2.Text:=  FloatToStr(YearsBetween(date2, date1));
end;

end. 

ولاهذا عمل
الخطا بسيط يا اخي اسم الدالة هو Years وليس YearsBetween غير الكود ليصبح
PHP كود :
function Years(PastDate,CurrentDate:TDate):integer;
var
  
PastMonth,PastDay,PastYear,CurrentYear,CurrentMonth,CurrentDay:word;
begin
  DecodeDate
(PastDate,PastYear,PastMonth,PastDay);
  
DecodeDate(CurrentDate,CurrentYear,CurrentMonth,CurrentDay);
  if (
PastYear=CurrentYear) and (PastMonth=CurrentMonth) and (PastDay=CurrentDay) then
    Result
:=0
  
else
  
begin
    Result
:=CurrentYear-PastYear;
    if (
PastMonth>CurrentMonth) then
      Dec
(Result)
    else
    
begin
      
if PastMonth=CurrentMonth then
        
if (PastDay>CurrentDay) then
          Dec
(Result);
    
end;
  
end;

end;
procedure TForm1.edt1Change(Sender: TObject);
var
   
date1, date2: TDate;
begin
  date1 
:= StrTofloat(Edt1.Text);
  
date2 := Now;
  
Edt2.Text:=  FloatToStr(Years(date2, date1));
end;

end. 
السلام عليكم شكرا اخي لكن المشكل ليس بالدالة yearsbetween

و الدالة years
PHP كود :
procedure TForm1.edt1Change(Sender: TObject); 
var 
   
date1, date2: TDate; 
begin 
  date1 
:= StrTofloat(Edt1.Text); 
  
date2 := Now; 
  
Edt2.Text:=  FloatToStr(YearsBetween(date2, date1)); 
end; 

end. 

في هذه الدالة عند ادخال السنة فقط يعطيني عمر غير صحيح اظن المشكلة في تحويل الادخال في edit1
اهلا اخي عنتر
بما ان الدالة YearsBetween تحسب الفارق بين تاريخين فسيكون date1 يحتوي على تاريخ وليس رقم كما فعلت انت ادن :
date1 := StrToDate(Edt1.Text); ليكون الكود كما يلي :
PHP كود :
procedure TForm1.edt1Change(Sender: TObject); 
var 
   
date1, date2: TDate; 
begin 
  date1 
:= StrToDate(Edt1.Text); 
  
date2 := Now; 
  
Edt2.Text:=  FloatToStr(YearsBetween(date2, date1)); 
end; 

end. 
والله اعلم
اخي انا لدي خلل في برنامجي الصغير حاولت حل المشكلة ولم استطع وبالتالي ان يستنتج البرنامج التسنة من الجهاز وليس من خلال المتغير الذي اعطيته له انا مضبوط .شاهد الكود كيف اقوم بتغيير مكان 2014 بدالة تستنتج السنة من النظام ليعمل في كل زمان .
وما هي الكائنات التي اضيفها للبرنامج مثل date او غيرها .. وشكرا .

PHP كود :
unit Unit1;

interface

uses
  Windows
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  
Dialogs, StdCtrls, ComCtrls;

type
  TForm1 
= class(TForm)
    
lbl1: TLabel;
    
lbl2: TLabel;
    
edt1: TEdit;
    
edt2: TEdit;
    
btn1: TButton;
    
btn2: TButton;
    
lblAnswer: TLabel;
    
procedure btn1Click(Sender: TObject);
    
procedure btn2Click(Sender: TObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin

lblAnswer
.Caption:= 'Hello Mr.'+edt1.Text +',Your were born in '+edt2.Text+',your Age is :'+ IntToStr(2014 - StrToInt(edt2.Text));
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
edt1
.Text:='';
edt2.Text:='';
lblAnswer.Caption:=''
end;

end. 

السلام عليكم
المشكلة في ادخال المعلومات فانت لاتتحقق من المدخل
اما تستخدم حدث أخر غير OnChange او تتحقق من البيانات المدخة تاريخ Valid Date
FaLcon_DZ كتب :اخي انا لدي خلل في برنامجي الصغير حاولت حل المشكلة ولم استطع وبالتالي ان يستنتج البرنامج التسنة من الجهاز وليس من خلال المتغير الذي اعطيته له انا مضبوط .شاهد الكود كيف اقوم بتغيير مكان 2014 بدالة تستنتج السنة من النظام ليعمل في كل زمان .
وما هي الكائنات التي اضيفها للبرنامج مثل date او غيرها .. وشكرا .

PHP كود :
unit Unit1;

interface

uses
  Windows
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  
Dialogs, StdCtrls, ComCtrls;

type
  TForm1 
= class(TForm)
    
lbl1: TLabel;
    
lbl2: TLabel;
    
edt1: TEdit;
    
edt2: TEdit;
    
btn1: TButton;
    
btn2: TButton;
    
lblAnswer: TLabel;
    
procedure btn1Click(Sender: TObject);
    
procedure btn2Click(Sender: TObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin

lblAnswer
.Caption:= 'Hello Mr.'+edt1.Text +',Your were born in '+edt2.Text+',your Age is :'+ IntToStr(2014 - StrToInt(edt2.Text));
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
edt1
.Text:='';
edt2.Text:='';
lblAnswer.Caption:=''
end;

end. 
السلام عليكم
اولا ان اردت مسح ما بوجد في edit.text يمكنك ايضا استعمال :
PHP كود :
edit1.clear; 
للحصول على تاريخ اليوم يوجد دالة now) dateToStr) واستعمالها يكون هكدا :
PHP كود :
edit1.text:=DateToStr(now); 
التاريح ياخد من الجهاز لدى تاكد من صحته اولا .
للاستزادة ابحث في المنتدى بوجد العديد من المواضيح حول دلك
http://delphi4arab.net/forum/showthread....7%D1%ED%CE
او
http://delphi4arab.net/forum/search.php?searchid=753889
السلام عليكم ورحمة الله وبركاته

ان شاء الله قد توصلت الى الحل

PHP كود :
procedure TForm1.edt1Change(Sender: TObject);
var
year,month,day:word;
begin
  
if edt1.Text <> '' then
  begin
 DecodeDate
(date, Year, Month, Day);
  
Edt2.Text:=   IntToStr((year) - StrToInt(edt1.Text))
  
end
else
    
edt2.Clear;
  
end;

end.