View Full Version : تعريف متغير عمومي
Delphi XE2
جمعه 20 اردیبهشت 1392, 17:37 عصر
من در مورد متغير عمومي (http://mehruz.blogfa.com/) خيلي سرچ كردم اما چيزي كه ميخوام رو پيدا نكردم:گریه:
من از يه متغير تو همه برنامه استفاده كردم :قلب:
ميدونم كه ميشه تو قسمت public مثلا بنويسيم s:string
اما بقيه (http://mehruz.blogfa.com/)اون رو چطور بنويسم مثلا s:='.\text.txt
كه ديگه نياز به تعريف نداشته باشه:تشویق:
BORHAN TEC
جمعه 20 اردیبهشت 1392, 22:53 عصر
سلام
میتونی از روش زیر استفاده کنی:
{$J+}
const
S:String='.\text.txt';
{$J-}
یوسف زالی
جمعه 20 اردیبهشت 1392, 23:14 عصر
سلام.
میتونی از روش زیر استفاده کنی
دلیل این کار رو نمی فهمم. دارید یک Writable Constant می سازید اما برای چی؟
خب خود Const رو می تونید در حالت عادی هم دارای نوع در نظر بگیرید.
از طرفی بعد از Off کردن اون Option که نمی تونید اون رو Write کنید.
اصلا در نظر گرفتن نوع رو هم متوجه نمی شم.
وقتی لازمه از یک متغیر در تمام برنامه استفاده بشه بهتره یک یونیت جدا براش در نظر گرفته بشه و در یوزز ها اضافه بشه.
Ananas
جمعه 20 اردیبهشت 1392, 23:20 عصر
چون بعدا می تونه تغییرش بده.
یوسف زالی
جمعه 20 اردیبهشت 1392, 23:48 عصر
پس {-J$} چیه؟
این کار نمی ذاره عوضش کنه.
در ضمن برای عوض کردنش دیگه چرا ثابت می گیرید؟
از همون اول متغیر بگیرید.
کامروا
شنبه 21 اردیبهشت 1392, 00:09 صبح
پس {-J$} چیه؟
این کار نمی ذاره عوضش کنه.
با اینکار فقط معرفی میکنه که این متغیر جزو این نوع Compiler Directive هست نه کل متغیر ها که قراره بعد از این تعریف بشه.
اگر {J$} ... رو برداره که نمیذاره عوضش کنه.
در ضمن برای عوض کردنش دیگه چرا ثابت می گیرید؟
از همون اول متغیر بگیرید.
درسته ،
ولی چون مستقیماً میخواد موقع تعریف مقدار دهی کنه از این روش استفاده کرده که نخواد اول یکبار متغیر رو تعریف کنه و بعد در یک قسمت دیگه دوباره مقدار اولیه بهش بده. وگرنه کلاً Const که با {$J} باشه، اصلاً Const نیست.
MohsenB
شنبه 21 اردیبهشت 1392, 00:59 صبح
سلام
از یکی از روش های زیر استفاده کنید و یونیت مربوطه رو توی تمام جاهایی که نیاز دارید تعریف کنید :
1.
unit UnitPublic;
interface
var
My_Public :string = '.\text.txt';
implementation
end.
2.
unit UnitPublic;
interface
var
My_Public :string;
implementation
initialization
My_Public:= '.\text.txt';
end.
3.
unit UnitPublic;
interface
var
My_Public1 :string;
My_Public2 :string;
implementation
procedure InitPublics;
begin
My_Public1:= '.\text1.txt';
My_Public2:= '.\text2.txt';
end;
initialization
InitPublics;
end.
موفق باشید
یوسف زالی
شنبه 21 اردیبهشت 1392, 02:21 صبح
ببینید می شه متغیر رو هم از همون اول مقدار دهی کرد چون سراسریه.
برای تغییر ثابت هم لازمه که اون + باشه نه -.
برای همین سر در نمیارم.
Felony
شنبه 21 اردیبهشت 1392, 05:22 صبح
سلام
میتونی از روش زیر استفاده کنی:
{$J+}
const
S:String='.\text.txt';
{$J-}
اصلا کار اصولی و فنی نیست .
BORHAN TEC
شنبه 21 اردیبهشت 1392, 10:08 صبح
اصلا کار اصولی و فنی نیست .
بله همینطوره، این مورد فقط برای سازگاری با نسخه های فسیل شده دلفی(دلفی 4 و ...) در نسخه های جدید هم گنجانده شده است.
موضوع اینجاست که من از مورد اول که MohsenB بهش اشاره کرد اطلاعی نداشتم. :گیج:
خطاب به YOU-SEE :
برای تغییر ثابت هم لازمه که اون + باشه نه -.
برای همین سر در نمیارم.
کامپایلر دلفی این مورد را به گونه ای تفسیر می کند که فقط ثابت(ها)ی که بین {$J+} و {$J-} تعریف شده اند از نوع Writeable Consts خواهند بود. برای بالا بردن خوانایی بهتره که از Directive دیگری استفاده کنید:
procedure TForm4.FormCreate(Sender: TObject);
{$WRITEABLECONST ON}
const
s: string = 'Hello';
{$WRITEABLECONST OFF}
begin
s := 'Hi';
ShowMessage(S);
end;
در هر صورت روش اولی که MohsenB بهش اشاره کرد از این روش هایی که من گفتم بهتره. این موردی که بنده بهش اشاره کردم در تعریف متغیر استاتیک کاربرد بیشتری دارد تا تعریف یک متغیر عمومی! هر چند در برنامه نویسی شی گرا هم می توان با تعریف یک متغیر در کلاس کار متغیر استاتیک را هم انجام داد. با این تفاسیر فکر نمی کنم جایی باشد که این روشی که به آن اشاره کردم کاربرد خاصی داشته باشد. :متفکر: کاربردش اینه که هر جا دیدید که از این روش استفاده شده هنگ نکنید! همین! :لبخند:
یوسف زالی
شنبه 21 اردیبهشت 1392, 11:01 صبح
کاربردش اینه که هر جا دیدید که از این روش استفاده شده هنگ نکنید! همین!
اینم خودش یه کاربرده دیگه!
Ananas
شنبه 21 اردیبهشت 1392, 14:32 عصر
اینم کاربرد دیگش:
http://barnamenevis.org/showthread.php?330522-%D8%AD%D8%B1%DA%A9%D8%AA-%D9%84%D8%BA%D8%B2%D8%B4%DB%8C-%D8%A8%D9%87-%D8%B1%D9%88%DB%8C-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1&p=1454968&viewfull=1#post1454968
یوسف زالی
شنبه 21 اردیبهشت 1392, 14:47 عصر
در اونجا هم می تونید از متغیر استفاده کنید.
استفاده از ثابت اون هم به این نحو منطقی نیست.
MohsenB
یک شنبه 22 اردیبهشت 1392, 08:13 صبح
سلام و خسته نباشید
مشکل این کد چیه
خطا میده
...
با سلام
به قوانین زیر احترام بگذارید :
متغییر محلی قابل انتصاب مقدار اولیه نیست .
نوع مقدار اولیه میبایست ثابت باشد . یعنی یا بصورت یک مقدار ثابت قبل از تعریف متغییر تعریف شده باشد یا مستقیما خود مقدار نوشته شود .
موفق باشید
یوسف زالی
یک شنبه 22 اردیبهشت 1392, 10:42 صبح
نخیر نمی شه.
برای مقدار دهی این شکلی بهترین راه استفاده از رویداد OnCreate فرم هست.
Ananas
یک شنبه 22 اردیبهشت 1392, 15:33 عصر
در اونجا هم می تونید از متغیر استفاده کنید.
استفاده از ثابت اون هم به این نحو منطقی نیست.
متغیر مقدارش رو برای بار بعد که تابع اجرا میشه حفظ نمیکنه از طرفی لزومی نداره قسمتهای دیگه برنامه به این متغیر دسترسی داشته باشن و بهتر هم هست که دسترسی نداشت باشن. همچنین باید مقدار اولیه ی لازم رو داشته باشه. پس بهترین گزینه متغیر استاتیک هست که تو دلفی به این روش تعریف میشه.
یوسف زالی
یک شنبه 22 اردیبهشت 1392, 18:15 عصر
اگر من بودم در Private فرم می گرفتم.
ولی گاهی این روش شما بهتره.
باید ببینم کجاها به درد می خوره..
فکر می کنم اون جور کارها دیگه از سر ناچاری باشه.
Ananas
یک شنبه 22 اردیبهشت 1392, 21:46 عصر
خوب نه دیگه ببین مثلا همین تعریف تو قسمت private باعث میشه که بخای بیرون از تابع هم این متغیر رو مقداردهی اولیه کنی، بعد تعریف و مقداردهی اولیه و استفاده پراکنده هر کدوم یک جایی رفتن، این پراکندگی لازم نیست از طرفی اصلا فرم احتیاجی به دسترسی به این متغیر رو نداره. چون فقط داره داخل تابع استفاده میشه.
بعد همیشه شما فرم نداری که بخای تو قسمت private تعریف کنی یا مقداردهی اولیه کنی میره تو initialize یونیت که با uses قسمتهای دیگم بهش دسترسی پیدا میکنن.
یوسف زالی
سه شنبه 24 اردیبهشت 1392, 10:53 صبح
نه عزیزم عجیب نیست.
شما داری در تاپیک غیر مربوط سوال می پرسی.
برای سوالت یک تاپیک جدبد ایجاد کن.
کاری که می خواهی کنی رو همراه با نمونه کد بگذار و توضیح کافی بده.
یوسف زالی
سه شنبه 24 اردیبهشت 1392, 13:23 عصر
دوست من خودم جواب دادم چطور ندیدم؟!!
عنوان تاپیک با سوالتون مغایره.
اگر جواب دادم خواستم سریع به جواب برسید که گویا نرسیدید.
در بخش بانک اطلاعاتی دلفی ایجاد کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.