![]() |
|
هل يمكن كتابة اجراء يستقبل براميتر غير محدد النوع - نسخة قابلة للطباعة +- 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 و عليكم السلام ورحمة الله وبركاته وفيك بارك الله ، بالتوفيق أخي |