ورود

View Full Version : گفتگو: تکنیکها ، روشها و ایده های برنامه سازی



jalal morevaj
سه شنبه 20 اسفند 1387, 16:07 عصر
سلام خدمت اساتید و دوستان عزیزم
به عنوان کوچکترین و کم دانش ترین شما پیشنهادی دارم.
بیاید کمی در مورد ایده ها و تکنیکهای برنامه سازی صحبت و تبادل نظر کنیم. مثلا تاپیک ((ظاهر گرافیکی برنامه )) که کار استادم آقای مهران است یک نمونه از این تبادل نظر است. منظور من این است که علاوه بر اینکه هر کس سئوالات خود را مطرح میکند، و هرکس میدانست جواب میدهد، ایده های دیگران هم ممکن است (حتما) در بهتر شدن برنامه ها به ما کمک کند.
مثال : من مدتها برای نمایش اطلاعات در برنامه هایم فرمی درست میکردم و اطلاعات را در TextBox ها نمایش میدادم و از CommandBottn ها برای رفتن به رکوردهای قبل و بعد و رکورد جدید و ... استفاده میکردم که این ایده را از ویزارد های فاکس 3 گرفته بودم. روزی در یکجا برنامه یکی از دوستانم را دیدم که در فرم با استفاده از یک گرید اطلاعات مهم رکوردها را نشان میداد و روی هر رکورد (توی گرید) که بالاو پائین میشدی توی تکست باکس ها سایر اطلاعات رکورد ها را نمایش میداد و با Command Bottom ها برای اصلاح و حذف و رکورد جدیدو ... استفاده میشد. مزیت روش دوم این بود که میشد در یک لحظه بیش از یک رکورد را دید. از آن پس من برای نمایش اطلاعات در فرم برنامه هایم از روش دوم استفاده کردم ((وگاهی هم از روش اول- هرکدام که بهتر بود))
نتیجه ای که میخواهم از این حرفها بگیرم این است که اگر من آن برنامه را ندیده بودم شاید لازم بود سالها کار کنم تا این روش را اختراع !!!! :گیج::متفکر: کنم ولی فقط با یک نگاه شیوه ای جدید را یاد گرفتم

یک ضرب المثل میگه چرا آدم دوباره باید چرخ را اختراع کند ؟ در صورتیکه دیگران قبلا این کار را کرده اند

حال از اساتید و دوستانم میخواهم هم در مورد این تاپیک نظر بدن و هم در مورد ایده ها و روشهای برنامه نویسی شون راهنمائی کنند

عضو کوچک خانواده برنامه نویس
جلال

mehran_337
چهارشنبه 21 اسفند 1387, 10:40 صبح
دوست بزرگوار ما !
این اتفاق در خیلی از تاپیکها افتاده و بر اساس موضوع مورد نظر می باشد . مثلا در همان تایپک مورد اشاره شما ، بنده روش کار خودم را تشریح کردم حال آنکه دیگران نیز می توانند از روشهای مورد علاقه خودشان استفاده کنند اما فراموش نکنیم کاربر به علاقه ما کاری ندارد بلکه استاندارد را می خواهد.

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

jalal morevaj
چهارشنبه 21 اسفند 1387, 11:59 صبح
سلام
دقیقا همین طور است که میفرمائید. من خودم چند سالی کاربر یکی از برنامه های کاربردی تولید یکی شرکت های داخلی است بودم و در هر روز آن شرکت حد اقل دو سه هزار تا فحش رو از کاربران میخورد به این علت که برنامه اش استاندارد نبود . این باعث شد که من سعی کنم تمام برنامه هام رو مطابق با ویندوز استاندارد سازی کنم ولی برای چه اشکال دارد که برنامه های ما برای کاربر ((هلو هلو برو تو گلو )) یعنی راحت تر باشد.
مثلا برای همه کاربرانی برنامه های من میدانند که در هر فرم میتوانند برای ورود اطلاعات جدید در فرم باید Comman bot رکورد جدید را کلیک کند ولی اگر حال نداشت که دستش رو از روی کیبرد بر داره و موس را کلیک کنه میتونه دکمه Insert را هم فشار بده. Insert یعنی چیزی رو جائی وارد کردن و کاملا با مفهوم " ورود رکورد جدید " منطقی بنظر میرسد همچنین برای حذف رکورد میتواند از دکمه DEL و ... استفاده کرد. قرار دادن امکانات استفاده از کیبرد موجی از رضایت کاربران را در پی داشت که کاربر از جابجا کردن دست از کیبرد به موس بی نیاز میکرد
البته میدانم که اختصاص بعضی از این کلید ها به این گونه کاربردها خیلی ممکن است استانداد نباشد ولی برای کاربران خصوصا تازه وارد ها خیلی جذاب و آسان است
بنظر من باید از ایده های نو و متفاوت استفاده کرد که این امر جز با همفکری با استادانی چون شما امکان
پذیر نمیباشد.
منتظر نظرات دوستان هستم
جلال

mehran_337
چهارشنبه 21 اسفند 1387, 13:16 عصر
کلیدهای میانبر دقیقا جزو نیازهای کاربر است . برنامه ای که از ماوس بی نیاز باشد برنامه بسیار کاربر پسندی خواهد بود .
استفاده از insert , delete هم کاربر و به وجه میاره اما و اما و اما :
همچنانکه در نمونه کارهای بنده مشاهده کردید یک گرید دارم که مثلا لیست مشتریها دارم و تکست باکسی برای سرچ و دکمه های درج و حذف .
حال روی گرید هستیم و del می زنیم خب با این میانبر خیلی خوب و قشنگ دکمه حذف فعال می شه.
اما مثلا مکان نمای کاربر در تکست باکس قرار دارد و می خواهد اسمی را جستجو کند : "محممد "
پشت حرف "میم" قرار می گیرد و دکمه del را می زند که حرف "میم" راپاک کند اما دکمه حذف رکورد فعال می شود . از کجا می شود فهمید که هدف کاربر حذف حرفی بود یا فراخوانی دکه حذف ؟؟؟
بنده در این برنامه ها از کلید های ترکیبی میانبر موهای ویندوز کمک می گیرم . مثلا ctrl + N این همان کلیدیست که در تمام برنامه ها صفحه جدیدی باز می کند پس می شود تفسیر کرد که کاربر با این کلید آشناست و در اینجا رکورد جدیدی در فرم جدید باز می کند.(فقط نظر شخصیمه تحمیل نیست)
اگر ابعاد دکمه ، فضای کافی بده این میانبر رو همونجا می نویسم مثلا caption دکمه می شه :
" جدید ctrl+N "
و اگر فضای کافی نداشته باشه در toolTipText می نویسم :
"میانبر : ctrl + N "

البته بازهم می گم اینها سلیقه ایه.

Esikhoob
پنج شنبه 22 اسفند 1387, 09:31 صبح
با سلام
دیدن sample های برنامه های نوشته شده به زبان VFP هم مفید است ، لینک زیر خیلی از سایت های دانلود sample را دارد:
http://fox.wikis.com/wc.dll?Wiki~WhereToFindDownloadableVFPSamples

من از sample هایی که در سایت :
http://www.foxite.com/downloads/default.aspx
لذت بردم چون در این سایت افراد مختلف برنامه هاشون را میگذارند تا بقیه دانلود کنند، حتی یکی از بزرگان این fORUM هم آنجا نمونه برنامه دارد.

یک حمله اینترنتی کن و خیلی سایتها را ببین و چند تاش را که حال کردی دانلود کن .

jalal morevaj
دوشنبه 26 اسفند 1387, 10:33 صبح
متشکرم
ولی از نظر کاربر بهتر است که از یک کلید استفاه شود نه کلید های ترکیبی. اینطور سرعت کار بیشتر میشود.
یکی دیگر از کارهائی که بنظر من فرم رو قشنگ میکنه اینه که هنگامی که کاربر دکمه ذخیره سازی رو میزنه و زمانی که اطلاعات توی بانک ذخیره میشه یک پروگرس بار ، روند اجرای ذخیره سازی رو نشان بده که کاربر هاج و واج منتظر نباشه این کار مخصوصا تو محیط شبکه هائی با کاربر زیاد و ترافیک بالا که ممکنه ذخیره سازی چند ثانیه ای طول بکشه مفیدتره
من به این صورت عمل کردم که یک پروگرس بار مخفی روی فرم در روی کلیدهای ذخیره و حذف ایجاد کردم و هنگامی که کاربر کلید ذخیره (یا تائید برای ذخیره سازی) را فشار میده پروگرس بار آشکار میشه (VIsible=.t.) و طبق در هر مرحله از ذخیره سازی مقداری از آن پر میشه مثلا APPEND BLANK بیست درصد و الی آخر ... حالا اگر تعداد کاربران شما زیاد نبود میشود یک Wait با زمان یک دهم ثانیه هم لابلای اینها هم قرار داد تا بهتر نمایش داده بشه و پس از اتمام ذخیره سازی ، دوباره پروگرس بار مخفی بشه
البته ناگفته نماند این ایده را بعد از دیدن تاپیک آقای مهران روی فرم ها انجام دادم و کاربران هم خیلی ابراز رضایت کردند (من هم بشون گفتم باید از آقا مهران تشکر کنن)

لطفا منت گذاشته و نظرات اصلاحی رو بگین

راستی یه کدی بود که کاربر با اون میتونست رزولیشن را تغییر بده قبلا دیده بودمش ولی امروز هرچی گشتم پیداش نکردم اگه میشه لینکش رو برام بگذارین

باتشکر - جلال

mehran_337
سه شنبه 27 اسفند 1387, 08:26 صبح
آ قای جلال !
شما راه حلی برای کانفلیگ پیدا نکردن کلید حذف و اینزرت که توضیح دادم پیدا کردین؟
کاربر در تمام ویندوز با کلیدهای ترکیبی کار می کنه ، شما دیگه چرا این حرف و می زنید ؟
حذف کامل shift + del - کپی ctrl + c - کات ctrl + x - پیست ctrl + v - جدید ctrl + n - باز کردن فایل ctrl + o و خیلی از کارهای روز مره . حتی برای خروج از برنامه alt+ f4 و برای خاموش کردن سیستم alt+ctrl+del و ....
می بینید !
از وقتی وارد سیستم می شویم تا خروج همش کلید های ترکیبی است . مگر به کلیدهای تابعی فکر کنید.

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

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

jalal morevaj
سه شنبه 27 اسفند 1387, 11:22 صبح
سلام آقا مهران

بله ببینید وقتی کاربر در مود دیدن رکورد ها است کلیدهای INS و DEL همان کار هائی را که گفتم انجام میدهد و وقتی در مود ویرایش یا ایجاد اطلاعات هستیم (که در این حالت آبجکت ها Enable هستند) این دو کلید همان کارهائی را انجام میدهد که شما فرمودین
ضمنا من نگفتم که کلیدهای ترکیبی را فراموش کنیم ولی عرض کردم که استفاده از یک کلید راحت تر است. چون استفاده از یک انگشت راحت تر از دو انگشت است. میتوان به کلید های تابعی فکر کرد ولی ممکن است آن استاندادرهائی که ما مد نظرمان است محقق نشود البته در بعضی جا ها میتوان استفاده کرد مثلا در EXCEL کلید F2 برای ویرایش یک سلول است که شاید بتوان آن را در فرم هم برای ویرایش استفاده کرد.
در مورد پروگرس بار هم کاملا درست مفرمائید این ابزار نیز میتواند کمی زمان بر باشد که به نظر من ارزشش را دارد....

ای بابا آقامهران من باید جلوی شما و دیگر اساتید این سایت برم جلو بوق بزنم .....:خجالت::خجالت:
من فقط دارم درس جواب میدم تا شما بزرگواری کرده ، وقت گذاشته و اشکالات من را رفع کنید

mehran_337
چهارشنبه 28 اسفند 1387, 08:00 صبح
اختیار دارید هدف مباحثه هست و بس.
اینها را در هیچ کتابی ننوشته اندفقط جمع آوری تجربه دوستان است

jalal morevaj
سه شنبه 29 اردیبهشت 1388, 17:59 عصر
با سلام مجدد
ببخشید که این تاپیک قدیمی را بالا اوردم
اکتیو و دی اکتوی کردن آبجکتها وقتی تعداد آنها در فرم خیلی زیاد است مستلزم چندین سطر کدنویسی است یعنی در یک مرحله مثلا هنگامی که روی دکمه ویرایش کلیک گردید باید به تعداد آبجکتها آنها را فعال نمود و پس از انجام عمل ویرایش دوباره همانها را غیر فعال کرد. اگر فرم 4-5 تا آبجکت داشت زیاد مساله ای نیست ولی اگر مثلا 25 آبجک داشتیم چطور ؟
یک راه حل به ذهن من رسید که اگر راه بهتری سراغ دارید بفرمائید تا من یاد بگیرم. ضمنا به دلایلی از دستور SET ALL نمیخواهیم استفاده کنیم


aa="thisform.text"
aaa= ".enabled = .T."
FOR a = 1 TO 20
a=STR(a)
a=allt(a)
thisform.text&a&aaa
a=VAL(a)
ENDFOR


با این کار میتوان 20 آبجکت را فعال کرد
فکر کنم بهتر از این باشد که یکی یکی آنها را فعال کرد
نظر شما چیه ؟؟:متفکر:

Esikhoob
سه شنبه 29 اردیبهشت 1388, 20:30 عصر
اگر خواستی متنوع و با حال کار کنی:


FOR EACH loContainer IN Thisform.Controls
IF UPPER(loContainer.BaseClass) = "TEXTBOX"
loContainer.enabled = .F.
ENDIF
ENDFOR

jalal morevaj
چهارشنبه 30 اردیبهشت 1388, 09:04 صبح
اگر میشه لطف کنید و یه کم بیشتر دستورات رو برام توضیح بدین
با تشکر

Esikhoob
پنج شنبه 31 اردیبهشت 1388, 19:53 عصر
آنچه در Help ویژوال فاکس پرو راحت پیدا نمیشود را توضیح میدهم:
می دانید ، میشود یک Object را با یک متغییر نسبت داد ، مثلا:

lotextbox = ThisForm.PageFrame1.Page1.text1بعد به جای اینکه بنویسیم:


ThisForm.PageFrame1.Page1.text1.Enabled = .T.میشود نوشت:


lotextbox.Enabled=.T.و همچنین آیا میدانید میشود آرایه‌ای از جنس Object داشت و اینکه یک property میتواند آرایه باشد؟
درست مثل Property ی Controls .

موضوع بعد اینکه تمام Object ها در ویژوال فاکس پرو باید حتما از یک VisualFoxPro BaseClass منشعب شده باشند.
Property ی Baseclass تقریبا در تمام Object ها نشان دهنده آن است ، در برنامه بالااز آن تشخیص دادیم که object ، یک textbox است یا چیز دیگر استفاده کردیم.


ساده شده تکنیکی که در برنامه بالا استفاده کردیم:

loControl(1)=Thisform.text1
loControl(2)=Thisform.text2
for i = 1 to 2
loControl(i).Enabled = .T.
endfor

jalal morevaj
شنبه 02 خرداد 1388, 11:18 صبح
دوست عزیزم از راهنمائی های شما بسیار متشکرم

کسی دیگه نیست که بخواهد یه چیزی یاد من بده ؟ :کف: :متفکر:

Esikhoob
شنبه 02 خرداد 1388, 20:08 عصر
وقتی نمونه برنامه های آدمهای حرفه ای را نگاه کنید ، چیز یاد میگیرید.
مثلا این تکنیک را که در بالا گفتم، از یک برنامه که از یک سایت دانلود کرده بودم ، یاد گرفتم. این سایت یکی از سایتهایی بود که در post صفحه قبل لینکش را داده بودم.

zahra111
شنبه 09 خرداد 1388, 10:18 صبح
سلام به همه ی دوستان. به نظر شما انجام عملیات مربوط به پایگاه داده (مانند متصل کردن منبع یک کنترل به یه جدول و ...) با استفاده از ویزارد بهتره یا کدنویسی؟ چرا؟

mehran_337
شنبه 09 خرداد 1388, 10:23 صبح
بهتره بگیم کی با چه روشی راحت تره .
شخصا در همه موارد از کدنویسی استفاده می کنم تا بتونم سریعتر تغییر بدم و چنانچه ایرادی به برنامه وارد شد یا اتصال انجام نشد پیغامهای شخصی که خودم طراحی کردم نمایش داده بشه.

zahra111
یک شنبه 10 خرداد 1388, 13:27 عصر
بهتره بگیم کی با چه روشی راحت تره .
شخصا در همه موارد از کدنویسی استفاده می کنم تا بتونم سریعتر تغییر بدم و چنانچه ایرادی به برنامه وارد شد یا اتصال انجام نشد پیغامهای شخصی که خودم طراحی کردم نمایش داده بشه.

ايا در كل كدنويسي بر ويزارد برتري داره؟ عملي هست كه با كدنويسي بشه انجام داد ولي با ويزارد نشه؟

mehran_337
یک شنبه 10 خرداد 1388, 14:47 عصر
لباسی که بدیم خیاط بدوزه بهتر توی تن می شینه یا لباسی که آماده می خریم ؟
من حتی اداره ای رو دیدم که نرم افزاری دارن استفاده می کنن که کل نرم افزار با ویزارد طراحی شده حتی exe هم نشده بود.
من شخصا وقتی پروژه ای رو شروع می کنم فکر نمی کنم که کاربر من یه فرد عادی و بی اطلاع هست بلکه به این فکر می کنم که اگر اهل فنی برنامه رو ببینه چی می گه.
ویزارد باید ببینیم برای چه کاری می خواد استفاده بشه.
مثلا من وقتی گرید یا کامپوننتهای پیچیده را روی فرم قرار می دهم بجای اینکه خواص را دستی تنظیم کنم از بیلدر خودش کمک می گیریم (یه جور ویزارده)
یا مثلا وقتی کوئری می خوام درست کنم حتما از ویزارد کمک می گیرم چون راحت تره اما ممکنه کدشو کپی کنم و توی برنامه دستی تغییرش بدم و دیگه با خود ویزارد تولیدشده کاری نداشته باشم
اما کانکشن و خودم می نویسم چون در برنامه باید ازش استفاده کنم و نیاز دارم پیغامها رو کنترل کنم.
برای فرم و عملیات دیتااینتری هیچوقت به ویزارد کار نمی کنم چون بعضی وقتها کار پیچیده می شه.
در کل اگر کدنویس خوبی هستید ویزارد می تونه دستیار خوبی برای سریعتر انجام دادن کارها باشه اما اگه برای فرار از کدنویسی و تسلط نداشتن به کدها می خواین از ویزارد استفاده کنید کدنویسی تمرین کنید و ویزارد و فراموش کنید