PDA

View Full Version : سوال: نمايش يک پارامتر که به صورت عدد يا رشته به پروسيجر داده شده



mbshareat
سه شنبه 31 خرداد 1401, 06:41 صبح
سلام عليکم
احتمالا عنوان گويا نيست.من يک کد در سورسهای نمونه آموزشي ديدم:
function ValToString(Value: Variant): String;
begin
case TVarData(Value).VType of
varSmallInt,
varInteger : Result := IntToStr(Value);
varSingle,
varDouble,
varCurrency : Result := FloatToStr(Value);
varDate : Result := FormatDateTime('dd.mm.yyyy', Value);
varBoolean : if Value then Result := 'T' else Result := 'F';
varString : Result := Value;
else Result := '';
end;
end;
از اين تابع براي نمايش رشته و عدد اعشار استفاده کردم اما نتونست عدد صحيح مثلا يک رو نشون بده.
من گاهي در برنامه هام براي اشکال زدايي مقدار يک متغير رو براي خودم نمايش ميدم. دوست داشتم بشه گاهي ترکيبي از عدد و رشته رو به صورت آرايه به يک پروسيجر بدم که نمايش بده.
ممنون ميشم راهنمايي کنيد

یوسف زالی
چهارشنبه 01 تیر 1401, 18:36 عصر
سلام. VarToStr

به جای Variant در پارامتر ورودی می تونید از Const هم استفاده کنید.

mbshareat
پنج شنبه 02 تیر 1401, 00:50 صبح
ممنون.VarToStr خوب بود

متوجه منظورتون از این جمله نشدم:
"به جای Variant در پارامتر ورودی می تونید از Const هم استفاده کنید."

یوسف زالی
پنج شنبه 02 تیر 1401, 02:49 صبح
یه مدل پاس دادن پارامتره شبیه به پاس دادن اشاره گر.


procedure Proc(const x);

untyped parameter in delphi

mbshareat
پنج شنبه 02 تیر 1401, 11:09 صبح
تشکر فراوان
استفاده از Pointer رو بلد نیستم. فکر کنم سخت تر باشه. چون باید نوع داده رو هم بدونیم.
این کد کار نکرد:
procedure ShowX(Const X);
Begin
ShowMessage(VarToStr(X^));
End;


فعلا به این کد رسیدم:
procedure ShowXStr(X:Array of Variant);
Var
I:Byte;
S:String;
begin
For I:=0 to high(X) Do
S:=S+VarToStr(X[I])+#13;
ShowMessage(S);
end;

یوسف زالی
پنج شنبه 02 تیر 1401, 15:03 عصر
وقتی از high استفاده می کنی دیگه به جای 0 باید از low شروع کنی.
وقتی از 0 شروع می کنی باید از Length منهای یک استفاده کنی.
array of const هم می تونی استفاده کنی که شرایط خودش رو داره، برای کاری که انجام می دی معمولا همین روش خوبه.

mbshareat
چهارشنبه 08 تیر 1401, 16:17 عصر
ببخشید مدتی مریض بودم... من قبلا امتحان کرده بودم اگر یه ارایه رو مثلا از یک تا فلان تعریف کنیم و به عنوان پارامتر به پروسیجر بدیم، اندیس شماره یک در پروسیجر معادل صفر میشه!
در مورد کار نکردن:
procedure ShowX(Const X);
Begin
ShowMessage(VarToStr(X^));
End;

میتونید توضیح بدید؟ ممکنه امکانات دلفی نسخه بالاتر باشه؟
مگه Const در مقابل Var نیست ؟ میشه پارامتر بدون نوع برای پروسیجر تعریف کرد؟

یوسف زالی
پنج شنبه 09 تیر 1401, 16:44 عصر
سلام. امیدوارم بهتر شده باشید
پارامتر بدون نوع در دلفی های XE (اگر اشتباه نکنم) اضافه شدند. نوع اونها می شه TVarRec و Variant نمی شه

mbshareat
پنج شنبه 09 تیر 1401, 17:26 عصر
علیکم السلام و رحمة الله و برکاته .
بهترم.خدا شما رو حفظ کنه و بر توفیقات شما اضافه کنه و در دنیا و آخرت سعادتمند باشید. تشکر می کنم