PDA

View Full Version : حرفه ای: نحوه اطلاع رسانی به کاربر



M.T.P
پنج شنبه 30 اردیبهشت 1389, 13:43 عصر
دوستان میخواستم بدونم بهترین نحوه اطلاع رسانی به کاربر از طرف برنامه چطوریه؟
ببینید مثلا من یه برنامه تحت شبکه نوشتم که وقتی مشتریان کافی نت یا گیم نت بیشتر از 3 تا الی 4 بار یک کدشناسه و کلمه عبور رو اشتباه وارد کردند این موضوع به سرور که بنده پشتش نشستم اطلاع داده میشه. خب حالا میخوام برنامه سرور این پیغام رو به شکلی به من اطلاع بده که مزاحم برنامه من نشه! فرض کنید من در حال شارژ اعتبار برای یک مشتری هستم و یک همچین اتفاقی میفته و اگه برنامه سرور بخواد این موضوع رو بصورت یک MSGBOX به من اطلاع بده در واقع مانع از ادامه کار من میشه تا وقتی که این Message رو ok کتم. آخه تنها این مورد نیست مثلا اطلاع از ورود و خروج کاربران و یا اینکه یک مشتری پیغامی رو به سرور بفرسته ، اگه همه اینها بخواد MSGBOX باشه قیافه بنده قطعا میشه یه چیزی شبیه به این :عصبانی++:
خودم یه فرم داخل یک dll نوشتم که بالای سمت راست صفحه نمایش داده میشد و بسته به زمانی که براش تعریف کرده بودم مخفی میشد که باز هم حالت Modal پیش میومد و اجازه ادامه کار با برنامه سرور رو از من میگرفت.:ناراحت:
بهترین راهی که پیدا کردم استفاده از BaloonTip در SystemTray بود که مشکل بزرگی که داره متن فارسی رو بخوبی نمایش نمیده یعنی در واقع بلد نیستم Right to leftش کنم.
برنامه های Multi App چه طوریه؟ مثل آنتی ویروس ها که فرضا داری تو برنامه اسکن میکنی بعد یه پیغام شکیل بالای ساعت ویندوز میاد که مثلا فلان فایل ویروسی بود و پاک شد. البته میشه یه فرمی شبیه به اون طراحی کرد منتها در حین کار قطعا با مشکل Modal و NonModal برخورد خواهیم کرد.
اگه چیزی به ذهنتون رسید ، ممنون میشم.:قلب:

Dr.Bronx
پنج شنبه 30 اردیبهشت 1389, 15:25 عصر
از صدا هم می تونی استفاده کنی
توی نرم افزار ها دیدم
وقتی 3 بار رمز عبور رو اشتباه وارد می کنی روی سرور یک صدایی میاد و اعلام میکنه که همچین اتفاقی رخ داده
پیاده سازیش هم خیلی راحت هست
شما یک بار صدا رو ذخیره میکنی و هر بار که نیاز داری اونو اجرا می کنی

حمید محمودی
پنج شنبه 30 اردیبهشت 1389, 15:43 عصر
در مورد قسمت اول : (یعنی با خبر شدن شما از پیغام کلاینت) balloon خوبه اما همیشه جالب نیست. چون دیده شده بعضی افراد ازش خسته شدن و به علاوه ممکنه روی بعضی سیستم ها قابلیت نمایشش در ویندوز بسته شده باشه و در این صورت پیغام بی پیغام... و اکه تعداد کلاینت ها و تعداد پیغام های دریافتی زیاد باشه مشکل ساز میشه...

به نظر من اینجا رو اینکارو بکنی بهتره : یه منو داشته باش مثلا با نام پیغام های دریافتی و بعدش زمانی که پیغام فرستاده شده از برنامه کلاینت رو دریافت کردی یه زیرمنو براش بساز (منظورم با کد نویسیه) و متن اصلی پیغام رو در عنوانش درج کن مثلا "اخطار در کاربر 13 به دلیل پسورد اشتباه" و در رویداد کلیکش یه فرم در زمان اجرا بساز و درش یه lable هم بساز و متن اصلی رو اونجا بده و یه سری کارایی برای کنترل کامپیوتر کاربر رو هم همونجا بزار.... البته به محض دریافت پیغام بهتره که یه صدایی هم (ترجیحا صدا + beep کیس) پخش بشه تا اگه یه وقت اسپیکر خاموش بود و حواس کاربر ادمین به پیغام دریافتی نبود مشکلی پیش نیاد..

همچنین هر جا که خاستی مثلا در statusbar یه متنی رو بشکل تصویر زیر درج بکن تا هشدار های پاسخ داده شده و دریافت شده از کلاینت رو نمایش بده...

در مورد اون آنتی ویروس هم باید بگم که لازم نیست که بصورت modal نمایش بدی. OnTop باشه کافیه. اما روش بالا به نظر من بهترین روشه. من یه بار اجراش کردم خیلیم راضی بودم

شکل فکر کنم کاملا گویای مطلب باشه

http://barnamenevis.org/forum/attachment.php?attachmentid=49319&stc=1&d=1274355540


موفق باشید....

M.T.P
پنج شنبه 30 اردیبهشت 1389, 18:07 عصر
با تشکر از توجه شما دوست گرامی...
یعنی فرمی که در حین اجرا توسط کابر ساخته و اجرا میشه دیگه کاری به برنامه اصلی نداره؟
آخه مثلا من فرم مشتری جدید رو بصورت vbmodal باز کردم و دارم اطلاعات یک مشتری جدید رو وارد میکنم ، اگه در این حین برنامه بخواد به من پیغام بده و یک فرم جدید بسازه و فرضا اون رو در بالای صفحه نمایش سمت راست نشون بده دیگه مزاحم من نمیشه؟ چون من فقط میخوام یک نگاه بهش بندازم و مطلع شم همین.
دستور ساخت فرم جدید در حین اجرا چطوریه؟

حمید محمودی
پنج شنبه 30 اردیبهشت 1389, 20:20 عصر
یعنی فرمی که در حین اجرا توسط کابر ساخته و اجرا میشه دیگه کاری به برنامه اصلی نداره؟
فرم درز حین اجرا توسط کاربر ساخته نمیشه. بلکه وقتی برنامه ای که روی سیستم کلاینت هست یه پیغامی (حالا هر چی که میخاد باشه...) به سرور فرستاد. شما باید در سرور بعد از دریافت اون پیغام، با توجه به IDش یه مسجی رو بهش نسبت بدین

همه این کارا خودکار انجام میشه و شما هیچ کاری نمیکنید... (مراحل رو یه بار دیگه مرور میکنم).



برنامه کلاینت یه پیغامی رو به سرور ارسالب میکنه
سرور IDش رو چک میکنه تا ببینه معنی پیغام چیه
خلاصه پیغام در منو قرار میگیره (همچنین یه سری شمارنده برای اطلاع از پیغام های کلاینت باید در statusbar باشه)
تا اینجا پیغام های اومده از سمت کلاینت هیچ مزاحمتی برای کاربر ادمین ایجاد نمیکنه (و همش در background انجام میشه)
کاربر ادمین میتونه با نگاه کردن به statusbar از میزان پیام ها و هشدار ها با خبر بشه...
در صورت تمایل کاربر ادمین از منوی "پیام های دریافتی" بر روی پیام مورد نظر کلیک میکنه و اینجاس که باید یه فرم ساخته بشه و ....




دستور ساخت فرم جدید در حین اجرا چطوریه؟
من تا حالا 2 تا راه دیدم که راه دومی بسیار راحتره...

یه فرمی طراحی میکنید (مثل همون یکی که من در عکس گزاشتم) .
در این کد فرم2 همون فرمیه که طراحی کردین . حالا با توجه به توضیحات بالا توی lable که در فرم ساخته شده هست .یه متن رو با توجه به ID پیام میزارین و ....




'dcamera TEST
Dim frmNew as new Form2
frmNew.Label1.Caption =msg.id.descriotion
frmNew.Show

M.T.P
پنج شنبه 30 اردیبهشت 1389, 20:58 عصر
باز هم از شما دوست عزیز کمال تشکر رو دارم.
درود بر شما:تشویق:
چیزی که شما بهش اشاره کردین دقیقا میشه یه چیزی شبیه موبایل که در حین کار با گوشی هر پیامک یا رویدادی رو ذخیره میکنه و وقتی به صفحه اصلیش رجوع میکنیم همه روادید رو نمایش میده و ما تک به تک اونها رو بررسی میکنیم.
اما خیلی اوقات هست که میبایست نسبت به یک پیام سریعا واکنش انجام داد مثلا یکی از مشتریان با اکانت دوستش یا اینکه بطور غیر مجاز log in میشه (سرقت پسورد) یا اینکه کلاینت پیغام میده که مبلغی رو برام شارژ کن و این در حالیه که زمان باقیمانده ایشون کمه و در حال log off شدنه ، و یا موارد دیگه که الان حضورذهن ندارم.
دوست عزیز اگه در مورد نمایش پیام بصورت فوری هم چیزی به خاطرت اومد عنوان کنید ، پیشاپیش از شما سپاسگزارم.

حمید محمودی
پنج شنبه 30 اردیبهشت 1389, 21:10 عصر
دوست عزیز اگه در مورد نمایش پیام بصورت فوری هم چیزی به خاطرت اومد عنوان کنید

این مورد خیلی ساده هست . در برنامه سرور میگین که اگه ID پیغام مثلا 1 یا 15 یا 30 (با select case) بود علاوه بر اینکه عنوانش در منو قرار بگیره همون لحظه خودش فرم رو بسازه و به کاربر نشون بوده ....

این ایده ی خود بنده بود(که البته از جاییم الگو نگرفته بودم) و در نرم افزار هایی که نیاز بود پیاده سازیشون کردم و خیلی هم ازش راضیم.....

FinalMOB
جمعه 31 اردیبهشت 1389, 15:11 عصر
با سلام خدمت جناب پارسی لورد
البته میدونم ایشون دل خوشی از بنده ندارن :لبخند:
ولی اینجور که متوجه شدم، هیچ تشکری از دوستانی که به این سوال جواب دادن نشده :متفکر: یعنی هنوز در مورد این سوال ابهامی وجود داره؟
اگه نیازی می بینید، بنده یه سورس در این زمینه ارائه بدم؟ :چشمک:

حمید محمودی
جمعه 31 اردیبهشت 1389, 18:12 عصر
البته میدونم ایشون دل خوشی از بنده ندارن

منظورتون بنده که نیست؟؟



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

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



اگه نیازی می بینید، بنده یه سورس در این زمینه ارائه بدم؟


خوشحال میشم اگه ایده ی بهتری (از اون یکی که من گفتم) دارین ارائه بدید!

FinalMOB
جمعه 31 اردیبهشت 1389, 22:13 عصر
منظورتون بنده که نیست؟؟
نه دوست عزیز، منظورم جناب پارسی لورد بود که این تاپیک رو ایجاد کردن


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

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


خوشحال میشم اگه ایده ی بهتری (از اون یکی که من گفتم) دارین ارائه بدید!

امشب که نه، ولی انشالا فردا ایده ای که شما ارائه دادین رو تبدیل به یه سورس می کنم و خدمت دوستان ارائه می دم.

موفق باشید.

M.T.P
شنبه 01 خرداد 1389, 11:57 صبح
ضمن تشکر از توجه همه دوستان.
FinalMOB :متعجب: ====> :قلب:
ایده شما جناب dcamera خیلی عالیه و من میتونم ازون به عنوان پیام های نسبتا غیر ضروری استفاده کنم بعنوان مثال زمانیکه یک مشتری کلمه عبورش رو تغییر میده و ... اما در مورد پیام های فوری که باید سریعا ازشون مطلع شد و شما ترفند اضافه کردن منو و اجرای فرم پیام رو توصیه کردین باید خدمتتون عرض کنم که اصلا موضوع این تاپیک و مشکل اصلی من همین اجرای فرم پیام هست. چون تمامی فرم های برنامه من باید حتما بصورت modal اجرا شن لذا با اجرای فرم پیامی که بهش اشاره کردین میبایست حتما اون فرم رو هم بصورت modal اجرا کرد چون همونطور که میدونید فرم unmodal روی فرم modal اجرا نمیشه و برنامه دچار مشکل میشه. من حتی اون فرم پیام رو هم داخل یک dll قرار دادم و توسط تابعی که در class module اون dll بود اون فرم رو نمایش میدادم و باز هم با اجرای فرم داخل exe هیچ تفاوتی نداشت.
باز هم تکرار میکنم این فرم پیام باید خارج از محیط برنامه اجرا بشه و مزاحم برنامه نشه.
خلاصه :متفکر: ===> :گیج: ====> :عصبانی++:

vbhamed
شنبه 01 خرداد 1389, 17:32 عصر
سلام

يك برنامه ديگه بنويسيد كه فرم پيامتون رو اون برنامه نشون بده
بعد براي ارتباط با هم مي تونيد از مثلا يك جدول بانك اطلاعاتي يا يك فايل استفاده كنيد و برنامه پيام دهنده دائما چك كنه كه هر موقع برنامه اصلي در جدول پيامها چيزي نوشته بود، اون پيامها رو نمايش بده

براي نمايش پنجره پيام هم از دستورات زير استفاده كنيد تا فرمش بالاي بقيه فرمها ظاهر بشه


Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const SWP_SHOWWINDOW = &H40
Private Const Hwnd_TopMost = -1

Private Sub Form_Load()

With Me
SetWindowPos .hwnd, Hwnd_TopMost, _
(Screen.Width - .Width) \ 15, 0, .Width \ 15, .Height \ 15, SWP_SHOWWINDOW
End With

End Sub

حمید محمودی
شنبه 01 خرداد 1389, 20:20 عصر
به برنامه زیر دقت کنید. احتمالا مشکل تون حل میشه. اول روی دکمه کلیک کرده بعد از 5 ثانیه فرم پیغام باز میشه. که تا بهش پاسخ ندادی کاری نمیشه کرد.

البته صحبت های جناب vbhamed هم کمک میکنه.

FinalMOB
یک شنبه 02 خرداد 1389, 10:00 صبح
با تشکر از جناب dcamera و vbhamed عزیز و جناب پارسی لورد که با این پیامشون

FinalMOB :متعجب: ====> :قلب: بهم فهموندن که دیگه آشتی کنیم:لبخند:

جناب پارسی لورد عزیز، ببینید، لازم می بینم یه نکته ای رو عرض کنم
فرض کنید یه فرم روی صفحه داره نمایش داده میشه (که میشه فرم اصلی)، و حالا می خوایید که یه فرم دیگه هم بیاد و نمایش داده بشه (که میشه فرم جدید)
خوب، چند حالت واسه نمایش فرم جدید وجود داره:

1. فرم جدید همیشه روی فرم اصلی نمایش داده بشه ولی فرم اصلی هم فعال باشه و همزمان بشه رو جفتش کار انجام داد؛ برای این کار از این کد استفاده می کنیم:


frmSUB.Show , frmMain
2. فرم جدید همیشه روی فرم اصلی نمایش داده بشه، ولی فرم اصلی غیر فعال بشه:


frmSUB.Show vbModal, frmMain
3. فرم جدید و اصلی کاملا مجزا از همدیگه باشن:


frmSUB.Show



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

البته برنامه جناب dcamera هم کامل بود ولی یه قسمت کوچیک به اون برنامه اضافه می کنم و دوباره توی سایت قرارش می دم.

توضیحات درباره برنامه:
برنامه یه کلاینت داره یه سرور که جفتش حتما باید روی یک سیستم اجرا بشه، چون برنامه رو جوری نوشتم که دیگه آی پی نگیره و خودکار وصل بشه، فرقی هم نداره کدوم رو اول اجرا کنید، به هر حال برنامه وصل میشه

قبل از وصل شدن، کلاینت نمی تونه چیزی بفرسته ولی به محض وصل شدن، توی کلاینت یه دکمه فعال میشه که می تونه به سرور پیام بفرسته

البته توی این برنامه هدف فقط آموزش اینه که چجوری کد ها نوشته بشه ولی در برنامه اصلی شما، کلاینت به طور خودکار این پیام رو به سرور می فرسته

تغییری که این برنامه کرده اینه که شما می تونید توسط کلاینت مشخص کنید که چه نوع پیامی به سرور فرستاده بشه، یعنی به صورت مودال نمایش داده بشه یا نه؟

دوستان اگه اشکال یا ایرادی بود حتما بگن که توضیحات لازم ارائه بشه
اسکرین شات رو هم میذارم واسه دوستان

موفق باشید

FinalMOB
یک شنبه 02 خرداد 1389, 12:38 عصر
ضمن تشکر از توجه همه دوستان.
FinalMOB :متعجب: ====> :قلب:
باید خدمتتون عرض کنم که اصلا موضوع این تاپیک و مشکل اصلی من همین اجرای فرم پیام هست. چون تمامی فرم های برنامه من باید حتما بصورت modal اجرا شن لذا با اجرای فرم پیامی که بهش اشاره کردین میبایست حتما اون فرم رو هم بصورت modal اجرا کرد چون همونطور که میدونید فرم unmodal روی فرم modal اجرا نمیشه و برنامه دچار مشکل میشه. من حتی اون فرم پیام رو هم داخل یک dll قرار دادم و توسط تابعی که در class module اون dll بود اون فرم رو نمایش میدادم و باز هم با اجرای فرم داخل exe هیچ تفاوتی نداشت.
باز هم تکرار میکنم این فرم پیام باید خارج از محیط برنامه اجرا بشه و مزاحم برنامه نشه.
خلاصه :متفکر: ===> :گیج: ====> :عصبانی++:
البته فراموش کردم این نکته رو رعایت کنم :لبخند: ببخشید
ولی شما اصلا نیازی به مودال کردن ندارید، شما می تونید وقتی مثلا فرم تنظیمات رو باز می کنید، به جای اینکه مودال بازش کنید، اول Enabled فرم اصلی رو False کنید و بعد فرم تنظیمات رو باز کنید و در قسمت Form_Unload فرم تنظیمات هم بنویسید که Enabled فرم اصلی رو True کنه و فقط و فقط فرم های پیغام خیلی مهم رو مدال باز کنید

موفق باشید

M.T.P
یک شنبه 02 خرداد 1389, 15:31 عصر
با تشکر از توجه کلیه دوستان و عزیزان
با تشکر از همه دوستان و عزیزان جناب dcamera و FinalMOb ارجمند. :تشویق:
دوست عزیزمون آقای vbhamed هم به نکته جالبی اشاره کردن ، برنامه دوم هرچند لحظه یک بار یک فایل مشترک حاوی پیام های دریافتی رو بررسی میکنه و چنانچه حجم اون فایل تغییر پیدا کرد حاکی از وجود پیام جدید هست و پیامش رو نمایش میده و با برنامه اصلی هم کاری نداره. :تشویق:
دوستان من جوابم رو میتونم از بین پاسخ های ارزنده شما عزیزان انتخاب کنم و در برنامم استفاده کنم.

:قلب: :قلب: :قلب:

FinalMOB
یک شنبه 02 خرداد 1389, 19:53 عصر
دوست عزیزمون آقای vbhamed هم به نکته جالبی اشاره کردن ، برنامه دوم هرچند لحظه یک بار یک فایل مشترک حاوی پیام های دریافتی رو بررسی میکنه و چنانچه حجم اون فایل تغییر پیدا کرد حاکی از وجود پیام جدید هست و پیامش رو نمایش میده و با برنامه اصلی هم کاری نداره.
با تشکر از جناب vbhamed ولی این کار واقعا کارایی برنامه رو پایین میاره که هر چند ثانیه بخواد این کار رو بکنه
2تا راهکار بهتون پیشنهاد می کنم
1. شما به صورت مجزا و با یه پورت دیگه یه ارتباط بین کلاینت و برنامه ای که قراره پیامتون رو نشون بده هم برقرار کنید در این صورت، کلاینت وقتی می خواد یه هشداری چیزی بده، به برنامه دوم پیام ارسال می کنه
2. شما توی ویندوز می تونید بین برنامه های در حال اجرا یه ارتباط بر قرار کنید که بهش می گن DDE

Dynamic Data Exchange (DDE) is a technology for communication between multiple
applications under Microsoft Windows

خوش بختانه در vb این نوع ارتباط پشتیبانی میشه، حالا شما می تونید برنامه اصلی رو به برنامه ای که می خوایید پیامتون رو نمایش بده با این روش متصل کنید

اگه نیازی به سورس داشتین، در خدمتیم

موفق باشید.

sama66
پنج شنبه 28 مرداد 1389, 19:47 عصر
سلام دوستان
من نمی دونستم سوالم و کجا باید مطرح کنم!
خواستم ببینم شما مقاله ای چیزی در مورد data communication دارید یا اگه در موردش چیزی می دونید بهم بگید.
ممنون میشم