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=11875)



هل يمكن كتابة اجراء يستقبل براميتر غير محدد النوع - ELARAPY - 02-04-2022

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

كيف يتم انشاء اجراء او دالة له براميتر واحد فقط وغير محدد النوع حيث يقوم الاجراء بطباعة حجمه باستخدام Sizeof علما ان المتغير الذي سيتم ارساله للاجراء او الدالة ليس معلوم النوع , او يوجد لدينا عدة متغيرات مختلفة النوع وسيتم ارسال واحد تلو الاخر الى نفس الاجراء.

لم انجح في استخدام النوع Variant.


RE: هل يمكن كتابة اجراء يستقبل براميتر غير محدد النوع - ELARAPY - 03-04-2022

حاولت مجددا ولم يجدي نفعاً غير استخدام Oop polymorphism


RE: هل يمكن كتابة اجراء يستقبل براميتر غير محدد النوع - Lam.Abdeldjalil - 06-04-2022

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

إقتباس :https://stackoverflow.com/questions/32759140/how-to-get-the-memory-size-of-the-actual-type-of-a-given-variant



كود :
function GetVarTypeSize(AVarType : TVarType; isArray : boolean) : integer; begin   isArray := AVarType <> (AVarType and VarTypeMask);   case AVarType and VarTypeMask of     varSmallInt: result := SizeOf(SmallInt);     varInteger:  result := SizeOf(Integer);     varSingle:   result := SizeOf(Single);     varDouble:   result := SizeOf(Double);     varCurrency: result := SizeOf(Currency);     varDate:     result := SizeOf(TDateTime);     varOleStr:   result := SizeOf(PWideChar);     varDispatch: result := SizeOf(Pointer);     varError:    result := SizeOf(HRESULT);     varBoolean:  result := SizeOf(WordBool);     varUnknown:  result := SizeOf(Pointer);     varShortInt: result := SizeOf(ShortInt);     varByte:     result := SizeOf(Byte);     varWord:     result := SizeOf(Word);     varLongWord: result := SizeOf(LongWord);     varInt64:    result := SizeOf(Int64);     varUInt64:   result := SizeOf(UInt64);     varString:   result := SizeOf(Pointer);     varAny:      result := SizeOf(Pointer);     varArray:    result := SizeOf(PVarArray);     varByRef:    result := SizeOf(Pointer);     varUString:  result := SizeOf(Pointer);     varRecord:   result := SizeOf(TVarRecord);   else     result := -1;  //unknown   end; end; procedure pr_variant(my_var: variant); begin ShowMessage(inttostr(GetVarTypeSize(VarType(my_var),false))) ; end; procedure TForm1.Button1Click(Sender: TObject); begin pr_variant(10); pr_variant('test'); end;



RE: هل يمكن كتابة اجراء يستقبل براميتر غير محدد النوع - ELARAPY - 10-04-2022

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

شكرا اخي عبد الجليل الطريقة تعمل جيداً, بارك الله فيك


RE: هل يمكن كتابة اجراء يستقبل براميتر غير محدد النوع - Lam.Abdeldjalil - 10-04-2022

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

وفيك بارك الله ، بالتوفيق أخي