PDA

View Full Version : به دست آوردن Location اجرای برنامه



AHTahan
شنبه 11 مهر 1388, 00:25 صبح
سلام

میخواستم ببینم چی جوری میشه Location ی که برنامه در آن اجرا میشود را درون یک متغیر ریخت؟

Felony
شنبه 11 مهر 1388, 05:31 صبح
var
Dir:String;
begin
Dir:=Application.ExeName;
Dir:=ExtractFileDir(Dir);
end;

ghasemshami
شنبه 11 مهر 1388, 07:42 صبح
می تونستید دستور رو کوتاه تر کنید


var
2. Dir:String;
3.begin
4. Dir:=ExtractFileDir(Application.ExeName);
5.end;

tdkhakpur
شنبه 11 مهر 1388, 10:05 صبح
و اینگونه شد که علم پیشرفت کرد.........:لبخندساده:


Dir:String;

Dir := GetCurrentDir;

babakmomeni
شنبه 11 مهر 1388, 10:25 صبح
و اینگونه شد که علم پیشرفت کرد.........:لبخندساده:


Dir:String;

Dir := GetCurrentDir;


سلام. با عذرخواهی فراوان از دخالت در امور اساتید، جسارتا باید عرض کنم که این کد الزاما مسیر مربوط به اجرای برنامه را بازنمی گرداند. اگر برنامه شامل هر گونه عملیات با فایلها باشد current dir از مسیر اجرای برنامه به مسیر آخرین عملیات فایلی تغییر کرده و طبعا جواب کد حضرتعالی جواب مطلوب نخواهد بود.

AHTahan
شنبه 11 مهر 1388, 12:02 عصر
از همه دوستان برای راهنمایی ممنونم
کارم خیلی راه افتاد چون میخواستم یه پشتیبان گیری انجام بدم کارم لنگ این بود

AHTahan
شنبه 11 مهر 1388, 13:55 عصر
یه سوال دیگه
میخواستم بدونم چی جوری می تونم CurrentDir را به Location اجرای برنامه تغییر بدم
چون از OpenDialog استفاده میکنم میخوام بعد از استفاده CurrentDir به سرجاش برگرده

babakmomeni
شنبه 11 مهر 1388, 14:16 عصر
یه سوال دیگه
میخواستم بدونم چی جوری می تونم CurrentDir را به Location اجرای برنامه تغییر بدم
چون از OpenDialog استفاده میکنم میخوام بعد از استفاده CurrentDir به سرجاش برگرده

سلام.

SetCurrentDir(extractfiledir(application.exename)) موفق باشید...

tdkhakpur
شنبه 11 مهر 1388, 16:56 عصر
سلام. با عذرخواهی فراوان از دخالت در امور اساتید، جسارتا باید عرض کنم که این کد الزاما مسیر مربوط به اجرای برنامه را بازنمی گرداند. اگر برنامه شامل هر گونه عملیات با فایلها باشد current dir از مسیر اجرای برنامه به مسیر آخرین عملیات فایلی تغییر کرده و طبعا جواب کد حضرتعالی جواب مطلوب نخواهد بود.
نه اختیار دارید این چه حرفیه جسارت کدومه..
ببینید این پایین ترین و بهترین سطح از تقاضا برای اینگونه کار است خوب بهترین راه هیچکدام از روشهای بالا نیست دوستمان بهتره برای اینکه واقعا کارش محکم باشد از پارامترهای خط فرمان استفاده کند تا کارش منوط به سایر تغییرات سیستم نباشد.


Dir : String;
Dir := ParamStr(0);

داخل رشته فوق میتواند همان مسیر را استخراج کند همانگونه که متدهای به غیر از تابع ارسالی اینجانب انجام میدهد.

Felony
شنبه 11 مهر 1388, 17:43 عصر
دوستمان بهتره برای اینکه واقعا کارش محکم باشد از پارامترهای خط فرمان استفاده کند تا کارش منوط به سایر تغییرات سیستم نباشد.
:گیج:مگه دستور زیر وابسطه به تغیرات سیستم هست ؟
var
Dir:String;
begin
Dir:=Application.ExeName;
Dir:=ExtractFileDir(Dir);
end;

این یکی از بهترین راهکارها هستش ...

tdkhakpur
شنبه 11 مهر 1388, 18:46 عصر
:گیج:مگه دستور زیر وابسطه به تغیرات سیستم هست ؟
var
Dir:String;
begin
Dir:=Application.ExeName;
Dir:=ExtractFileDir(Dir);
end;

این یکی از بهترین راهکارها هستش ...
شاید بعدا گندش درآمد شما که کلاسش را طراحی نکردید؟؟؟؟؟
ببینید اصولا وقتی شما از یک کلاس برای انجام عملیات استفاده میکنید هر اتفاقی میتواند نتیجه کار را تغییر بدهد درصورتی که استفاده از توابع خشک تضمین میکند که همیشه نتیجه شما همانی هست که میخواهید بهش برسید.
البته کلاس برنامه را خوانا و بسیار راحت میکند.

Felony
شنبه 11 مهر 1388, 21:08 عصر
شاید بعدا گندش درآمد شما که کلاسش را طراحی نکردید؟؟؟؟؟
ببینید اصولا وقتی شما از یک کلاس برای انجام عملیات استفاده میکنید هر اتفاقی میتواند نتیجه کار را تغییر بدهد درصورتی که استفاده از توابع خشک تضمین میکند که همیشه نتیجه شما همانی هست که میخواهید بهش برسید.
البته کلاس برنامه را خوانا و بسیار راحت میکند.

:قهقهه:بابا بیخیال این فرضیات چیه ؟ اگر اینجوری باشه شما نباید از هیچ کلاس و تابعی استفاده کنید چون ممکنه نتیجش تغییر کنه ، پس بهتره برید با اسمبلی برنامه بنویسید ...

tdkhakpur
شنبه 11 مهر 1388, 21:40 عصر
:قهقهه:بابا بیخیال این فرضیات چیه ؟ اگر اینجوری باشه شما نباید از هیچ کلاس و تابعی استفاده کنید چون ممکنه نتیجش تغییر کنه ، پس بهتره برید با اسمبلی برنامه بنویسید ...
چرا ناراحت میشوی..
شما هم مثل اینکه خیلی دوست دارید این سایت رو تبدیل به چت روم کنید...
من نسبت به آینده این سایت احساس خطر میکنم..:لبخندساده:

vcldeveloper
شنبه 11 مهر 1388, 22:07 عصر
شاید بعدا گندش درآمد شما که کلاسش را طراحی نکردید؟
مگه تابع ParamStr را شما نوشتید؟ استفاده از کلاس باعث میشه که کد شما از تغییرات احتمالی که ممکن هست بعدا در پیاده سازی یک تکنیک رخ بده، محفوظ بمانه. هر چقدر که شما از منبع تغییرات دورتر باشید، از آن کمتر اثر می گیرید. زبان های برنامه نویسی مثل C و سایر زبان های سطح بالا هم برای این بوجود آمدند که نرم افزارهای نوشته شده اینقدر وابسته به تغییرات سخت افزار نباشند.
توجیه شما جنبه علمی نداره، و مخالف شی گرایی و Code reusablity هست. در شرایط خاصی که به کارایی بسیار بالا نیاز هست، و کارایی از سایر فاکتورها اهمیت بسیار بالاتری داره، از کدهای سطح پایین به شکل محدود استفاده میشه، ولی در موضوع این تاپیک، تاثیر کد به کار رفته از نظر کارایی نزدیک به صفر هست.

tdkhakpur
شنبه 11 مهر 1388, 22:22 عصر
مطالب ارسالی چه معنی میده؟

مگه تابع ParamStr را شما نوشتید؟
شما به مطالب بنده اشاره کردید و این همه مطالبی که شما دارید بیان میکنید چه ارتباطی با پاسخ اینجانب دارد؟

توجیه شما جنبه علمی نداره،
من چیزی را توجیه نکردم عزیز..مگه ما وکیل قانونی سایر کمپانیها هستیم..

ولی در موضوع این تاپیک، تاثیر کد به کار رفته از نظر کارایی نزدیک به صفر هستخوب از یک طرف میگید کد رو مگه شما ساختید بعد این حرف را میزنید.
کسی نگفته که شما شی گرا نباشد.

vcldeveloper
یک شنبه 12 مهر 1388, 00:53 صبح
شما به مطالب بنده اشاره کردید و این همه مطالبی که شما دارید بیان میکنید چه ارتباطی با پاسخ اینجانب دارد؟جمله اول دقیقا در جواب مطلبی بود که نوشتید:

شاید بعدا گندش درآمد شما که کلاسش را طراحی نکردید؟؟؟؟؟مابقی پست در جواب مطلب دیگه شما بود:

ببینید اصولا وقتی شما از یک کلاس برای انجام عملیات استفاده میکنید هر اتفاقی میتواند نتیجه کار را تغییر بدهد درصورتی که استفاده از توابع خشک تضمین میکند که همیشه نتیجه شما همانی هست که میخواهید بهش برسید.

من چیزی را توجیه نکردم عزیز..این توجیه ایی بود که برای بهتر بودن روش مطرح شده عنوان کردید:

ببینید این پایین ترین و بهترین سطح از تقاضا برای اینگونه کار است خوب بهترین راه هیچکدام از روشهای بالا نیست دوستمان بهتره برای اینکه واقعا کارش محکم باشد از پارامترهای خط فرمان استفاده کند تا کارش منوط به سایر تغییرات سیستم نباشد.و البته دلایل درست نبودن آن را در پست قبلی مطرح کردم.


مگه ما وکیل قانونی سایر کمپانیها هستیم..چه ربطی به سایر کمپانی ها داره؟!!




نقل قول:
نوشته شده توسط علی کشاورز
ولی در موضوع این تاپیک، تاثیر کد به کار رفته از نظر کارایی نزدیک به صفر هست

خوب از یک طرف میگید کد رو مگه شما ساختید بعد این حرف را میزنید.جمله ایی که نوشتم واضح بود. مفهومش این هست که علی رغم توضیحاتی که در پست قبل دادم، گاهی در یک برنامه لازم هست برای افزایش کارایی، کدهای سطح پایین تر را بطور محدود استفاده کرد، ولی در موضوع مورد بحث در این تاپیک، این مورد صادق نیست، یعنی افزایش کارایی که ممکن هست از طریق اجرای مستقیم ParamStr بجای Application.ExeName بدست بیاد، در حد صفر هست. پس حتی اگر قرار بود از این جنبه هم مطلب شما بررسی بشه، مطلب صحیحی نبود.

tdkhakpur
یک شنبه 12 مهر 1388, 12:53 عصر
کاری به مطالب ارسالی شما ندارم ولی من چیزی برای تشکر کردن و شاید تشکر نکردن راجع به عقیده شما ندارم فقط نظر شخصی شما در مخالفت با نظر بنده است...
خودتان هم میدانید که نفوذ داخل یک کلاس خیلی راحتر از نفوذ در یک تابع خشک و خالی است.
منظورم از دفاع از کمپانیها هم تاکید روی متدها و توابعی هست که سایرین در اختیار من و شما قرار داده اند که داریم ازشان استفاده میکنیم.......

vcldeveloper
یک شنبه 12 مهر 1388, 14:58 عصر
نظر شخصی شما در مخالفت با نظر بنده است...
اینجا سلیقه مطرح نیست، بلکه بحث علمی مطرح هست. ایده ایی که شما مطرح کردید؛ یعنی استفاده از سطوح پایین برنامه نویسی بهتر از استفاده از کلاس یا سطوح بالا هست، ایده ایی مردود از نظر توسعه نرم افزار هست، و همانطور که قبلا هم گفتم، اگر قرار بود دنیای نرم افزار با این ایده پیش برود، هیچ وقت زبان های سطح بالایی مثل C، پاسکال، جاوا، و غیره ایجاد نمی شدند، و برنامه نویسی در حد کدهای ماشین باقی می ماند.
البته اگر هم فرضا میخواستیم ایده شما مبنی بر...

بهترین راه هیچکدام از روشهای بالا نیست دوستمان بهتره برای اینکه واقعا کارش محکم باشد از پارامترهای خط فرمان استفاده کند تا کارش منوط به سایر تغییرات سیستم نباشد.
...را قبول کنیم، کد نوشته شده توسط شما با نظر خودتان منافات دارد، چون اگر قرار بود کاربر به قول شما، "پایین ترین و بهترین سطح از تقاضا برای اینگونه کار" را استفاده کند، باید از تابع GetCommandLine در Kernel32 ویندوز استفاده می کرد، که پایین تر سطح کد در User Mode ویندوز برای این کار هست، و ParamStr هم در ویندوز از آن استفاده می کند.


منظورم از دفاع از کمپانیها هم تاکید روی متدها و توابعی هست که سایرین در اختیار من و شما قرار داده اند که داریم ازشان استفاده میکنیم.......
اینجا بحث یک تابع یا متد خاص مطرح نیست، بلکه بحث ایده ایی هست که شما دارید در این تاپیک به عنوان بهترین راه مطرح می کنید. بحث هایی که صورت گرفت در جهت این مطلب بود که ایده مطرح شده توسط شما اشتباه هست، حالا میخواد مصداقش ParamStr نوشته شده توسط بورلند باشه، یا فلان تابع نوشته شده توسط یک شرکت دیگه.



خودتان هم میدانید که نفوذ داخل یک کلاس خیلی راحتر از نفوذ در یک تابع خشک و خالی است.
مطلبی که مطرح کردید، اولا ربطی به بحث این تاپیک نداره، ثانیا از نظر فنی درست نیست. اگر منظور از نفوذ، نفوذ امنیتی هست - که ربطی هم به این بحث نداره - کدی که به زبان ماشین کامپایل میشه، فهمی از کلاس و متد و شی نداره. این مفاهیم فقط در سطح زبان سطح بالای استفاده شده مفهوم دارند، و وقتی کامپایل شدند، کد ماشین تولید شده از یک نرم افزار شی گرا با کد تولید شده از یک نرم افزار Procedural تفاوتی از این نظر با هم ندارند.
اگر منظور این هست که میشه محتوای یک کلاس را تغییر داد، و نمیشه محتوای یک تابع را تغییر داد؛ این تصور هم اشتباه هست، و هر کدی که در دسترس باشه را میشه تغییر داد.

tdkhakpur
یک شنبه 12 مهر 1388, 18:11 عصر
ممنون مطالب را دریافتم...
حالا من هر چی بگویم شما هم جوابش را میدهید پس با یک بیت حصن ختام را اعلام بکنیم..
قصه ما به سر رسید کلاغه به خونه اش نرسید.