delphi4arab منتديات دلفي للعرب
مشكلة في حسابات تتعلق بالزمن والتاريخ - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : مشكلة في حسابات تتعلق بالزمن والتاريخ (/showthread.php?tid=184)

الصفحات: 1 2


مشكلة في حسابات تتعلق بالزمن والتاريخ - مهدي - 20-05-2008

و عليكم السلام و رحمة الله

أنا هنا لكنك لم تجبني فيما كتبت

إقتباس : اقتباس:
وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00
وجبة العشاء تبدأ من الساعة 18:00 وتنتهي على الساعة 21:00
المبيت يبدأ من الساعة 00:00 وتنتهي على الساعة 05:00
ملاحظة أولية خطأ في السطرين الأخيرين و الصواب

وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00
وجبة العشاء تبدأ من الساعة 18:01 وتنتهي على الساعة 21:00
المبيت يبدأ من الساعة 00:01 وتنتهي على الساعة 05:00



مشكلة في حسابات تتعلق بالزمن والتاريخ - medreg - 21-05-2008

مهدي كتب :و عليكم السلام و رحمة الله

أنا هنا لكنك لم تجبني فيما كتبت

السلام عليكم أعذرني لم انتبه
ظننتك وجدت الخطأ وأصلحته وأن ما كتبته هو انك حذرتني من الخطأ

وسأشرح لك

الصواب هو :
وجبة الغذاء تبدأ من الساعة 11:01 وتنتهي على الساعة 14:00
وجبة العشاء تبدأ من الساعة 18:01 وتنتهي على الساعة 21:00
المبيت يبدأ من الساعة 00:01 وتنتهي على الساعة 05:00

ملاحظة أخرى
كيف يمكن للساعة ان تخرج في ورقة الطباعة بهذا الشكل
00:00 بدلا من 00:00:00
وكيف يمكن للتاريخ ان يخرج في ورقة الطباعة على هذا الشكل
01/01/2008 بدلا من 2008/01/01


مشكلة في حسابات تتعلق بالزمن والتاريخ - مهدي - 22-05-2008

و عليكم السلام و رحمة الله

إقتباس :كيف يمكن للساعة ان تخرج في ورقة الطباعة بهذا الشكل
00:00 بدلا من 00:00:00

هل تريد إلغاء حساب الثواني ؟

إقتباس :وكيف يمكن للتاريخ ان يخرج في ورقة الطباعة على هذا الشكل
01/01/2008 بدلا من 2008/01/01

يمكنك تغيير شكل التاريخ من الإعدادت الإقليمية في لوحة التحكم

بدلا من dd-MM-yyyy اكتب yyyy-MM-dd


مشكلة في حسابات تتعلق بالزمن والتاريخ - medreg - 22-05-2008

السلام عليكم ورحمة الله تعالى وبركاته
وصباح الخير

نعم **** إلغاء حساب الثواني حتى تظهر الساعة بأربعة ارقام في الطباعة بدلا من ستة ارقام

أما بالنسبة للتاريخ
فانا اعرف بان التغيير يكون في لوحة التحكم
لكن ما ****ه هو ان التغيير يكون داخل البرنامج لكي حتى ولو كان في الويندوز يظهر من اليسار الى اليمين لا بد من اظهاره في البرنامج من اليمين الى اليسار
وشكرًا


مشكلة في حسابات تتعلق بالزمن والتاريخ - مهدي - 22-05-2008

و عليكم السلام و رحمة الله و بركاته

إقتباس : لماذا هذه النجوم التي تظهر في مكان بعض الكلمات
توجد بعض الكلمات محظورة في المنتدى

إقتباس :لكن ما ****ه هو ان التغيير يكون داخل البرنامج لكي حتى ولو كان في الويندوز يظهر من اليسار الى اليمين لا بد من اظهاره في البرنامج من اليمين الى اليسار
إليك هذا المثال الذي يحدث التغيير الذي أردته و ذلك لإستعمال كائن TButton و كائنين من TEdit

كود :
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  Present: TDateTime;
  Year, Month, Day, Hour, Min, Sec, MSec: Word;
begin
  Present:= Now;
  DecodeDate(Present, Year, Month, Day);
  Edit1.Text:=IntToStr(Year)+'-'+IntToStr(Month)+'-'+IntToStr(Day) ;
  DecodeTime(Present, Hour, Min, Sec, MSec);
  Edit2.Text:=IntToStr(Hour) + ':'+ IntToStr(Min)
end;

end.



مشكلة في حسابات تتعلق بالزمن والتاريخ - medreg - 22-05-2008

شكرًا جزيلاً وسأرى بعد التجربة وأخبرك


مشكلة في حسابات تتعلق بالزمن والتاريخ - medreg - 24-05-2008

السلام عليكم ورحمة الله تعالى وبركاته
الأكود الذي تمت به التجربة وحولته هو الملف المرفق من طرفكم
DATE_HEURE_correct
لقد حولته من DateTimePicker إلى DBedit
ولم افلح (اين الخطأ يا ترى)

لابد من الإطلاع على المرفق وتبيين الخطأ أين يكمن
وتصحيحه من فضلكم


مشكلة في حسابات تتعلق بالزمن والتاريخ - merouane - 25-05-2008

و عليكم السلام ورحمة الله تعالى وبركاته

الخطأ هو

كود :
table3.fieldByName('HR_DEP1').asdateTime:=table3.fieldByName('DT_DEP1').asdateTime;
table3.fieldByName('HR_ARV1').asdateTime:=table3.fieldByName('DT_ARV1').asdatetime;

في حين:

DT_DEP1, DT_ARV1: Date
HR_DEP1, HR_ARV1: Time

لمعالجة الوضعية (أؤكد أنها تتغير حسب المبرمج، البرنامج، ...) تستطيع استعمال هذه الطريقة:

اللون الأزرق يعبر عن التعديل

كود :
procedure TForm1.Calcul1Click(Sender: TObject);
var t1,t2,
   [color=Blue] t01,t02[/color] : tdatetime;
    i,j     : integer;
    AYear,AMonth,ADay : word;

[COLOR=Blue]  function TheTime(AYear,AMonth,ADay:word ;heure:string):tdatetime;
  var Hour,Min,Sec,MSec : Word;
  begin
      DecodeTime(strtotime(heure),Hour,Min,Sec,MSec);
      Result := EncodeDateTime(AYear,AMonth,ADay,Hour,Min,Sec,MSec);
  end;[/COLOR]
begin
i:=DaysBetween(table3.fieldByName('DT_DEP1').asdateTime,table3.fieldByName('DT_ARV1').asdatetime);

DecodeDate(table3.fieldByName('DT_DEP1').asdateTime,
           AYear,AMonth,Aday);
t1:=EncodeDateTime(AYear,AMonth,ADay,
                   14,00,00,00);

[color=Blue]t01 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_DEP1').AsString);[/color]

DecodeDate(table3.fieldByName('DT_ARV1').asdatetime,
           AYear,AMonth,Aday);
t2:=EncodeDateTime(AYear,AMonth,ADay,
                   11,01,00,00);

[color=Blue]t02 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_ARV1').AsString);[/color]

j:=0;
if ([color=Blue]t01[/color]<t1)then
j:=j+1;
if [color=Blue]t02[/color]>=t2 then
j:=j+1;

table3.Edit;
table3.FieldByName('Nb_RPJ1').asInteger:=(i-1+j);
table3.Post;

DecodeDate(table3.fieldByName('DT_DEP1').asdateTime,AYear,AMonth,Aday);
t1:=EncodeDateTime(AYear,AMonth,ADay,
                   21,00,00,00);
[color=Blue]t01 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_DEP1').AsString);[/color]

DecodeDate(table3.fieldByName('DT_ARV1').asdatetime,AYear,AMonth,Aday);
t2:=EncodeDateTime(AYear,AMonth,ADay,
                   18,00,00,00);
[color=Blue]t02 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_ARV1').AsString);[/color]

j:=0;
if ([color=Blue]t01[/color]<t1)then
j:=j+1;
if [color=Blue]t02[/color]>=t2 then
j:=j+1;

Table3.edit;
table3.FieldByName('Nb_RPM1').asInteger:=(i-1+j);
table3.post;

DecodeDate(table3.fieldByName('DT_DEP1').asdateTime,AYear,AMonth,Aday);
t1:=EncodeDateTime(AYear,AMonth,ADay,
                   05,00,00,00);
[color=Blue]t01 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_DEP1').AsString);[/color]

DecodeDate(table3.fieldByName('DT_ARV1').asdatetime,AYear,AMonth,Aday);
t2:=EncodeDateTime(AYear,AMonth,ADay,
                   00,00,00,00);
[color=Blue]t02 := TheTime(AYear,AMonth,Aday,table3.fieldByName('HR_ARV1').AsString);[/color]

j:=0;
if ([color=Blue]t01[/color]<t1)then
j:=j+1;
if ([color=Blue]t02[/color]>t2) then
j:=j+1;

table3.edit;
table3.FieldByName('N_Che1').asInteger:=(i-1+j);
table3.FieldByName('N_RP1').AsInteger:=Table3.fieldbyname('Nb_RPJ1').AsInteger + table3.fieldbyname('Nb_RPM1').AsInteger;
table3.Post;
end;

بالنسبة للإدخال في الجدول حاول دائما الإدخال مرة واحدة.

كود :
table3.Edit;
table3.FieldByName('Nb_RPJ1').asInteger:=(i-1+j);
table3.FieldByName('Nb_RPM1').asInteger:=(i-1+j);
table3.FieldByName('N_Che1').asInteger:=(i-1+j);
table3.FieldByName('N_RP1').AsInteger:=
                 Table3.fieldbyname('Nb_RPJ1').AsInteger + table3.fieldbyname('Nb_RPM1').AsInteger;
table3.Post;

ملاحظة: الحل المقترح مع انه يقوم بما تريد إلا أنه ليس نهائي تستطيع دائما التحسين

ننتظر النتيجة ، و بالتوفيق Smile



مشكلة في حسابات تتعلق بالزمن والتاريخ - medreg - 25-05-2008

شكرًا جزيلاًا هذا هو المطلوب وجزاكم الله عنا كل خير
ووفقكم لما فيه الخير
متمنيين من المولى عز وجل ان يضع اعمالكم هذه في ميزان حسناتكم