كيف نعرف عنوان Object ما في في الذاكرة؟
#1
السلام عليكم ورحمة الله وبركاته

كيف يمكنني معرفة عنوان object في الذاكرة ؟
مثلا :

PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
Var
  
Date1: TDate;
  
Date2: TDate;
begin

end
; 
بصيغة اخرى : كيف يمكنني معرفة قيمة التي يأخدها date1 و date2 ؟
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#2
وعليكم السلام ورحمة الله وبركاته
PHP كود :
var
  
Date1: TDate;
  
Date2: TDate;
begin
  ShowMessage
(IntToHex(Integer(Addr(Date1)), 8));
  
ShowMessage(IntToHex(Integer(@Date2), 8));
//طريقتين كلاهما صحيح 
كيف كان درس المؤشرات في المجلة Smile؟
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#3
السلام عليكم

اضافتا لما قاله الاخ kachwahed

ان الصنف TDate هو مشتق من الصنف TDateTime و هذا الاخير من صنف Double و هذا الاخير هو ذو حجم 8 بايت
و بالتالى اذا ذهبنا الى عنوان المتغير الذى هو من نوع TDate فان اول 8 بايت هى القيمة التى تعبر عن التاريخ .. و هذه القيمة هى من نوع Double ... .
و هذه الصـــــــــــــورة توضح ما قلناه و كيفية قراءة القيمة Double التى منها يستخرج التاريخ .

بالتوفيق.


الملفات المرفقة
.7z   Sans titre.7z (الحجم : 169.22 ك ب / التحميلات : 10)
الرد
#4
بارك الله فيكم

الاخ كش واحد :
إقتباس :كيف كان درس المؤشرات في المجلة ؟
هههههه دسم إطلعة عليه قبل ان اطرح السؤال .

الاخ hanipino :
بارك الله فيك على المعلومات الاضافية روعة .

المسئلة بنوع من التفصيل :
لحظ الصورة :
[صورة: attachment.php?attachmentid=3247&stc=1&d=1329265505]
انا لم اقصد عنوان المؤشير بل قيمة المؤشر ؟؟
من المفروض ان :
Date1 و Date2 : تأخد القيمة nil .
Date3 : يأخد قيمة وهي عنوان object Date في الذاكرة؟ كيف احصل على تلك القيمة:
(Sad
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
Var
  
Date1: TDate;
  
Date2: TDate;
  
Date3: TDate;
begin
   
Try
     
Date3 := TDate.Create;
     
ShowMessage(.........);
     
ShowMessage(.........);
     
ShowMessage(.........);
   Finally
     
FreeAndNil(Date3);
   
End;
End; 
انا دوما احاول ان اجرب ماذا اقراء Big Grin ..
لحظ هده الاسطر من كتاب عروة عيسى :

[صورة: attachment.php?attachmentid=3248&stc=1&d=1329265530]


الملفات المرفقة
.jpg   PartOfMemory.jpg (الحجم : 26.96 ك ب / التحميلات : 42)
.jpg   BookOfOrwaIssaPage5.jpg (الحجم : 7 ك ب / التحميلات : 41)
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#5
وعليكم و السلام ورحمة الله

الاخ عبد المالك لديك لبس أو مغالطة
الTDate ليس object وانما نوع متغير في الأصل مؤشر على متغير Double كما قال اخي هاني
ومنه لا يمكنك انشائه باستدعاء Create
قيمته تكون صفرا فرضا مثل أغلب المتغيرات
باختلاف هذا النوع يعرض بشكل اليوم/الشهر/السنة
تحديدا الصفر هو عدد الأيام منذ التاريخ 30/12/1899 راجع الHelp
إقتباس :TDate représente un type spécial de valeur TDateTime sans partie décimale. Une valeur TDate représente le nombre de jours qui se sont écoulés depuis le 30 décembre 1899.
الرد
#6
شكرا اخي لكن TDate انا من صنعه ...
PHP كود :
unit UTest;

interface

Type
  TDate 
= Class
    public
    
Day: byte;
    
Month: byte;
      
Year: Integer;
    
Procedure SetValeur(D,M: byte; y: integer);
    Function 
leapyear: boolean;
  
End;

  
implementation

Uses
   SysUtils
;

Procedure TDate.SetValeur(D,M: byte; y: integer);
Begin
  day   
:= d;
  
month := m;
  
year  := y;
end;

Function 
TDate.leapyear:boolean;
begin 
  Result 
:= isleapyear(year);
end;


End. 

[COLOR="DarkOrange"]لا مشكلة نأخد المسئلة بصفة عامة :
لحظ الكود التالي :[/COLOR]
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
Var
  
Obj1: TMyObject;
  
Obj2: TMyObject;
  
Obj3: TMyObject;
begin
   
Try
     
Obj3 := TMyObject.Create;
     
ShowMessage(.........);
     
ShowMessage(.........);
     
ShowMessage(.........);
   Finally
     
FreeAndNil(Obj3);
   
End;
End; 
انا لم اقصد عنوان المؤشير بل قيمة المؤشر ؟؟
من المفروض ان :
Obj1 و Obj2 : تأخد القيمة nil .
Obj3 : يأخد قيمة وهي عنوان object Obj3 في الذاكرة؟ كيف احصل على تلك القيمةSad

بارك الله فيكم
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#7
إقتباس :لكن TDate انا من صنعه ...
لم تذكر ذلك بسؤالك!
+ ابتعد عن الاسماء الموجودة سابقا بدلا من TDate سمي اسم أخر

إقتباس :انا لم اقصد عنوان المؤشير بل قيمة المؤشر ؟؟
يعني لم تفهم شيئ مما سبق
ان كان للمؤشر عنوان فله قيمة وهي ماهو مو جود بالمكان المؤشر اليه حسب نوعه.
ان كان Nil يعني لا يؤشر على شيئ= لاتوجد قيمة

عندما تستدعي Create لاي Object فهي تقوم بالازم بما في ذلك وضع قيمة ابتدائية

لكل Object دالة/اجراء Constructor و Destructor
الرد
#8
بارك الله فيك على المعلومات القيمة .

كما دكر اخي كش واحد سبقا دالة تعيد عنوان المؤشر :
PHP كود :
ShowMessage(IntToHex(Integer(Addr(Date1)), 8)); 
لكن ماهي الدالة التي ترجع لي قيمة المؤشر وليس عنوانه ؟SadSad
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد
#9

بكل بساطة Date1 من نوع TDate تاريخ لإظهارها يكفي ShowMessage مع DateToStr للتحويل من تاريخ الى نص
كود :
ShowMessage(DateToStr(Date1));
الرد
#10
يا اخي Tdate فقط اتخدته كمثال ......
PHP كود :
ShowMessage(IntToHex(Integer(Addr(Obj1)), 8)); 
الدالة السابقة ترجع عنوان المؤشر .

لكن ماهي الدالة التي ترجع لي قيمة المؤشر وليس عنوانه ؟
كن متواضعا ولا تكن متكبرا // الصبر + المثابرة = النجاح
الرد


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


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