ايران ويج

نسخه‌ی کامل: کمک در ساختن جعبه پيغام به اضافه چند تا سؤال تو وی بی
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام
يه جعبه پيغام درست کردم که دو تا چيز کمک داره:
1ـ آيکن هاي خوشگل براي Information, Exclamation, Question, Critical
2ـ اون تابع API که دکمه X (همون ضربدر که پنجره رو میبنده) رو غيرفعال نشون ميده (ظاهر X رو غيرفعال ميکنه ولی در باطن عمل ميکنه)
نمونه برنامه رو هم گذاشتم براتون دانلود کنید.
خيلي ممنون ميشم اگه کمک کنيد.


چندتا سؤال:
چون اول فرم ظاهر میشه بعد Left, Top مقدار میگیرن، به همین خاطر فرم یه لحظه پر پر میزنه. چیکار کنم که درست بشه؟
Upgrade Activx Conrols که توی اولین سربرگ Project Properties قرار داره کارش چیه؟
آیکن 512×512 چجوری بسازیم؟ مثل لغتنامه رویال
سؤالاتی در باب UserControl
در ساخت UserControl از کجا بفهمیم که خاصیت Default یا Cancel چه مقداری داره؟ بعنوان مثال یک دکمه ساختم که میخوام اگه Default شد یه خط بکشم دورش.
EditAtDesignTim چیکار میکنه؟
ToolBoxBoitmap رو چجور بسازیم که خوب از آب دربیاد؟
mojtabamalaekeh نوشته است:1ـ آيکن هاي خوشگل براي Information, Exclamation, Question, Critical
منظورت اینه که ایکن لازم داری یا اینکه کد برای قرار دادن ایکن.
ولی به هر صورت به نظر من وقتی خود این آیکن ها روی سیستم هستند کار درستی نیست که اون ها همراه با برنامه هم قرار بدیم.
اما اگر ایکن می خوای که به قول دوستان از این بپرس
اگر می خوای بدونی که چطور می شه خود ایکن های سیستم رو به دست آورد و در برنامه استفاده کرد در زمان RunTime از تاپیک زیر جو یا شو:
گرفتن آیکن ها از Shell32.dll
اگر می خوای بدونی چطور از ایکن های با کیفیت بالا و اندازه بالا در برنامه استفاده کنی و یا حتی چطور استفاده کنی و فلسفه ایکن ها چی هست از تاپیک زیر جویا شو:
گذاشتن آیکن برای حالات مختلف فایل


نقل قول: 2ـ اون تابع API که دکمه X (همون ضربدر که پنجره رو میبنده) رو غيرفعال نشون ميده (ظاهر X رو غيرفعال ميکنه ولی در باطن عمل ميکنه)
این کدش هست به نقل از سایت AllAPI

کد:
'General
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Const MF_BYPOSITION As Long = &H400&
Private Const MF_REMOVE     As Long = &H1000&


Private Sub RemoveXMenu(Optional ByVal FormIn As Object)
Dim hSysMenu As Long, nCnt As Long
    
   'Get handle to our form's system menu
   '(Restore, Maximize, Move, close etc.)
    hSysMenu = GetSystemMenu(FormIn.hwnd, False)

    If hSysMenu Then
       'Get System menu's menu count
        nCnt = GetMenuItemCount(hSysMenu)
        If nCnt Then
           'Menu count is based on 0 (0, 1, 2, 3...)
            Call RemoveMenu(hSysMenu, nCnt - 1, MF_BYPOSITION Or MF_REMOVE)
            Call RemoveMenu(hSysMenu, nCnt - 2, MF_BYPOSITION Or MF_REMOVE)  ' Remove the seperator
            Call DrawMenuBar(FormIn.hwnd)
        End If
    End If
End Sub
کدی که در بالا می بینی صحیح ترین نمونه موجود هست, چون باید منوی بستن مربوطه هم حذف بشه که کد بالا اون کار رو هم انجام میده.

نقل قول: چون اول فرم ظاهر میشه بعد Left, Top مقدار میگیرن، به همین خاطر فرم یه لحظه پر پر میزنه. چیکار کنم که درست بشه؟
یک نکته ای نظر من رو جلب کرد.
این مشکل از اونجایی ناشی می شه که تغیرات شما روی فرم پیغام بعد از به نمایش در اومدنش عمال میشه.
یعنی تغییرات در رویداد Active بعد از فراخوانی Show modal صورت می گیره.
شما باید کد های بخش Active رو به ماژول منتقل کنید در همون زیر برنامه MMZMessageBox و قبل از Show قرار بدید.
این کار یک خاصیت خیلی خوب و مهم دیگه ای هم داره که اگر این کار رو انجام دادی و علاقه مند بودی بگو تا برات اون خاصیت مهم که در برنامه استفاده نکردی رو شرح بدم (set =new...Load...set nothing)

نقل قول: در ساخت UserControl از کجا بفهمیم که خاصیت Default یا Cancel چه مقداری داره؟ بعنوان مثال یک دکمه ساختم که میخوام اگه Default شد یه خط بکشم دورش.
برای کنسل که منطقا احتیاجی نیست, اما برای Default باید از خصوصیت UserControl.Ambient.DisplayAsDefault استفاده کنی که در صورت Defalt بودن کنترل روی فرم True بر می گردونه.

نقل قول: EditAtDesignTim چیکار میکنه؟
از اسمش پیداست "آیا کنترل در زمان طراحی بتواند فعال (در وضعیت انتخاب) باشد؟"

نقل قول: ToolBoxBoitmap رو چجور بسازیم که خوب از آب دربیاد؟
توخود توضیحات خصوصیت اومده یک تصویر 16X15 و حتما Bitmap
شما می تونید برای بالا بردن جزئیات و کیفیت کارتون از همون روش طراحی آیکن ها هم استفاده کنید.
یعنی یک طرحی x10 یا مثلا x20 بزنید (منظورم مثلا 160x150 یا بزرگتر بر اساس ضریب ابعاد) بعد ازون طرح رو به شکل Bitmap کوچیک کنید در 16x15 و استفاده کنید...
خیلی ممنون
مخصوصا بخاطر کد غیرفعال کردن X که منوی سیستم رو هم از قلم ننداخته.
همینطور بخاطر خاصیت Default
اما منظورم از Icon خوشگل یه چیزی قشنگتر از Icon های XP بود مثلا آیکن های ویستا. مثل ظاهر ویندوز که با نصب Theme عوض میشه حالا من هم میخوام Icon هام قشنگ تر از آیکن های پیشفرض ویندوز باشند و الا با ResourceHacker و هزار تا برنامه دیگه میشه Explorer.exe رو کالبدشکافی کرد.
باور کن 16 در 15 هم درست کردم اما وی بی دستکاریش می کنه!!! یه بار قرمز رو حذف می کنه یه بار سیاه رو ...
تازه بطور مثال آیکن شیء Data معلومه که اندازش بیش از 16 در 15 هستش.
در مورد DisplayAsDefault هم باید بگم که فقط در زمان اجرا درست کار می کنه. من تنها کدی که برای یوزرکنترل نوشتم این بود که DisplayAsDefault رو چاپ کنه (محض آزمایش) وقتی فرم رو می بستم و باز میکردم False رو چاپ می کرد در حالی که Default=True بود بالاخره متوجه شدم که باید تو رویداد Show می نوشتم.
من فکر میکنم مایکروسافت پارتی بازی می کنه. مثلا خاصیت Caption رو همینجور که تایپ می کنه عوض میشه یا مثل آیکن شیء Data و ...
راستی به فکرم رسید که برای آیکن ها صدا هم پخش کنم (از تو فایل Resource برنامه). کامل که شد میذارمش.
1- آیکون زیاد دارم واست پک می کنم می ذارم
2- اینو متوجه نشدم کجاشو می گی

برای پرپر زدن بهتره فرم رو به طور پیش فرض مخفی کنی و وقتی که فرم کامل لود شد و موقعیتش تثبیت شد، ظاهر کنی
Upgrade Activx Conrols رو هم دقیق نمی دونم چیه ولی فکر کنم ورژن کنترل ها رو چک کنه :d
برای آیکون های به اون بزرگی هم والا تا جایی که ما خبر داریم خود ویستا هم تا 256 بیشتر ساپورت نمی کنه (یعنی آخرش) حالا اگه تا 256 خواستی با IconCOOL Studio می تونی طراحی کنی. من که تا حالا نه برنامه ای واسه این اندازه دیدم نه برنامه ای برای اون..

عکس ToolBoxBoitmap هم باید 16*16 باشه تا خوب از آب در بیاد (رزولیشین نسبتا ً پایین)

من ثواتم همین قدر بود دیگه ببخشید :d
مشکل رو با تابع SetWindowPos حل کردم یعنی MsgBox هم CenterOwner ظاهر میشه هم میتونه CenterScreen ظاهر بشه بدون اینکه پرپر بزنه. Happy
اما در صورتی که فرم Owner به صورت Modal باشه درست کار می کنه. در غیر اینصورت فوکوس روی دکمه OK نیست که بتونیم با زدن یک Space بلافاصله MsgBox رو ببندیم. Sad
بگذریم.
در مورد آیکن خیلی گشتم توی گوگل ولی نتوستم هر چهارتا آیکن مورد نظر رو با یک Style پیدا کنم.
خلاصه اینکه کلی وقت تلف کردم برا جستجو. Angry
یه VistaTheme هم نصب کردم که رید تو ویندوزم ولی از شانس بد چهار تا آیکنی که می خواستم همون شکل قدیمی ویندوز XP بودند. Angry
پخش صدای متناسب با آیکن رو هم اضافه کردم Clap
ایندفه چون برنامه هنگام بستن خطا میداد دیگه آپلود نکردم ولی تو پروژه ای که ازش استفاده کردم درست کار می کنه. Amaze
حالا کسی میتونه چهارتا آیکن خوشگل پیدا کنه که با هم ست باشند.Tongue
منظورم از Set بودن یا یک Style بودن اینه که مثلا طرف کت شلوار نپوشه با کفش ورزشی یا به عبارتی دو تا آیکن فانتزی نباشند و دوتای دیگه کلاسیک یا مثلا گه یکیشون سایه داره بقیه هم به همون سبک سایه داشته باشند. Confused
با تشکر از EleRam عزیز اگه آیکن داری فقط اون چندتایی که گفتم پک بکن.
نقل قول: آيکن هاي خوشگل براي Information, Exclamation, Question, Critical
نقل قول: مشکل رو با تابع SetWindowPos حل کردم یعنی MsgBox هم CenterOwner ظاهر میشه هم میتونه CenterScreen ظاهر بشه بدون اینکه پرپر بزنه.
اما در صورتی که فرم Owner به صورت Modal باشه درست کار می کنه. در غیر اینصورت فوکوس روی دکمه OK نیست که بتونیم با زدن یک Space بلافاصله MsgBox رو ببندیم.
بگذریم
من یک بار دیگه هم به شما گفتم, اصلا محل کدی که نوشتید اشتباه هست.
رویداد Active کاربرد دیگه ای داره که در اینجا شما دارید برای کار دیگه ای ازش استفاده می کنید... اگر اون سوالی که گفتم رو می پرسیدی بهت می گفتم...

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

این چیزی که شما می خوای "خاصیت Caption رو همینجور که تایپ می کنه عوض میشه" از جمله اون مواردی که تقریبا 90 در صد کنترل نویس ها چگونگیش رو نمی دونند و تا حالا سراغش نرفتند چون همه فکر می کنند مایکروسافت Amaze...
بگذریم ...

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

برای اینکه خصوصیت Caption کنترل شما در زمان طراحی با تایپ عوض بشه باید به ترتیب کارهای زیر رو انجام بدی:
اول باید خصوصیت مورد نظرت رو به کد یوزر کنترل اضافه کنی (که در اینجا Caption هست)
یوزر کنترلت رو توی صفحه طراحیش باز کن (فرق نمی کنه در پنجره کد یا خود یوزر کنترل)
از منوی Tools گزینه Procedure Attributes رو انتخاب کن
در فرم Procedure Attributes در قسمت Name نام خصوصیت مورد نظرت رو انتخاب کن (که در اینجا Caption هست)
دکمه Advanced رو فشار بده تا فرم بست پبدا کنه
از داخل بخش Procedure ID گزینه Caption رو انتخاب کن
دکمه ok رو بزن
تموم شد حالا تست کن ببین درست کار می کنه!
«آیکن در فروم و ما گرد گوگل می گردیم.» بابت آیکن ها ممنونم. احتمالا از پوشه سومی استفاده کنم ولی انتخاب یکم سخته.
اما راجع به یوزرکنترل:
خیلی ممنون. البته که درسته ولی بلافاصله دو سؤال دیگه برام پیش اومد:
1ـ چطور یکی از خواص رو بعنوان خاصیت Default تعریف کنیم؟ مثل Caption برای Label یا Enabled برای Timer
2ـ یه پروگرس بار هم نوشتم ولی نشد خاصیت Value رو مثل Caption کنم که هنگام تایپ عوض بشه.
لطفا MMZ_X_Pro رو ببین.
اگر می خوای فلان خصوصیت در یوزر کنترلت به حالت پیش فرض باشه به این معنی که در کد نویسی مثلا به جای:
MyProgress.Value=x
عبارت MyProgress=x رو استفاده کنی باید این کار رو انجام بدی:

در همون فرم Procedure Attributes در قسمت Name نام خصوصیت مورد نظرت رو انتخاب کن و دکمه Advanced رو فشار بده و از داخل بخش Procedure ID گزینه (Default) رو انتخاب کن . همین و تایید کن

اما اگر می خوای این خوصیت در باکس خصوصیات به عنوان خصوصیت پیش فرض انتخاب باشه باید:
در همون فرم Procedure Attributes در قسمت Name نام خصوصیت مورد نظرت رو انتخاب کن و دکمه Advanced رو فشار بده و تیک گزینه User Interface Default رو بزار, فراموش نکن فقط یک خصوصیت می تونه این مقدار رو داشته باشه


در مورد این سوال "یه پروگرس بار هم نوشتم ولی نشد خاصیت Value رو مثل Caption کنم که هنگام تایپ عوض بشه"
هر کدون از اون عبارات موجود در لیست Procedure ID کاربرد خاص خودشون رو دارند.
مسلما Caption برای زمانی هست که بخوای یک متن غیر قابل ویرایش نمایش داده بشه.
اما خاصیت Value مورد نظر شما خودش داره می گه که جزء کدوم دسته قرار می گیره,
خوب اون کدون دسته هست که با ویرایش مستقیم عدد مثل متن سرو کار داره؟
راهنمایی اینکه مثلا خصوصیت Text در تکست باکس هم خیلی شبیه Value در پروگرس بار هست!
جواب همون Text, یعنی برای اینکه با تغییر Value به طور مستقیم تغییر رو ببینی باید در Procedure ID عبارت Text رو انتخاب کنی.
صفحه‌ها: 1 2