كيفية حساب العمر عن طريق ادخال السنة فقط
#1
السلام عليكم ورحمة الله وبركاته

واجهتني هذه النقطة في عملية تحويل العمر عن طريق ادخال سنة الميلاد في 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
الرد
#2
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. 

ولاهذا عمل
الرد
#3
الخطا بسيط يا اخي اسم الدالة هو 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. 
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#4
السلام عليكم شكرا اخي لكن المشكل ليس بالدالة 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
الرد
#5
اهلا اخي عنتر
بما ان الدالة 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. 
والله اعلم
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#6
اخي انا لدي خلل في برنامجي الصغير حاولت حل المشكلة ولم استطع وبالتالي ان يستنتج البرنامج التسنة من الجهاز وليس من خلال المتغير الذي اعطيته له انا مضبوط .شاهد الكود كيف اقوم بتغيير مكان 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. 
الرد
#7

السلام عليكم
المشكلة في ادخال المعلومات فانت لاتتحقق من المدخل
اما تستخدم حدث أخر غير OnChange او تتحقق من البيانات المدخة تاريخ Valid Date
الرد
#8
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
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#9
السلام عليكم ورحمة الله وبركاته

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

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. 
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم