بيشتر برامون بزار
بيشتر برامون بزار
این برنامه چگونگی برنامه نویسی برای رجیستری ویندوز را نشان را می دهد , شما با یک نگاه به سورس این برنامه متوجه می شوید که چگونه عمل می کند . در ضمن علت اینکه من دیگه مثل گذشته توضیحی برای سورس برنامه نمی دهم این است که اصلاً وقت نمی شه , اگه باز هم احساس می کنید که در فهم سورس این برنامه مشکلی دارید برام ایمیل بزنید تا در اولین موقعیت برایتان توضیح دهم .
همچنین یه Help هم برای دانلود گذاشتم که شما را برای رسیدن به آدرس مورد نظر برای تغییر در رجیستری ویندوز کمک می کنه . این Help طبقه بندی شده است و بسیار کامل و خوب هست حتماً دانلود کنید .
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
خوب حالا یه پروژه جدید بسازین و در ضمن یک تصویر Bitmap با اندازه Pixel 10*10 هم آماده کنید تا در این پروژه ازش استفاه کنید. خوب روی فرمتون دوبار کلیک کنید و کد زیر رو تو قسمت Declaration وارد کنید:
Option Explicit
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, _
ByVal nPos As Long) As Long
Private Declare Function SetMenuItemBitmaps Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, _
ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long
Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" _
(ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, _
ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
' Constant for SetMenuItemBitmaps
Private Const MF_BYPOSITION = &H400&
' Constants for LoadImage
Private Const IMAGE_BITMAP = &O0
Private Const LR_LOADFROMFILE = 16
Private Const LR_CREATEDIBSECTION = 8192
خوب تو این قسمت ما چهار تا تابع API تعریف کردیم که اینجا کارشونو به طور مختصر شرح میدم:
GetMenu: از این تابع برای بدست آوردن یک Handle (HWND) از کل منوی فرم استفاده میشه.
GetSubMenu: از این تابع برای بدست آوردن hwnd یکی از منوها (مثلا منوی File یا منوی Edit) استفاده میشه.
SerMenuItemBitmap: خوب این تابع نقش اصلی رو بازی میکنه و برای قرار دادن تصویر Bitmap در کنار نام زیر منو استفاده میشه.
LoadImage: از این تابع برای Load کردن تصویر Bitmap درون حافظه استفاده میکنیم.
خوب حالا یه Command Button به پروژتون اضافه کنید و کد زیر رو توش وارد کنید (رو دکمه دوبار کلیک کنید و کد رو Paste کنید):
Dim hMenu As Long
Dim hSubMenu As Long
Dim hMenuImg As Long
Dim sFileName As String
' Get the bitmap.
sFileName = App.Path & "\MenuImg.bmp"
hMenuImg = LoadImage(0, sFileName, IMAGE_BITMAP, 0, 0, _
LR_LOADFROMFILE Or LR_CREATEDIBSECTION)
' Get the menu item handle.
hMenu = GetMenu(Me.hwnd)
hSubMenu = GetSubMenu(hMenu, 1)
' Set the "mnuTwo" bitmap to the one that is loaded in memory.
Call SetMenuItemBitmaps(hSubMenu, 0, MF_BYPOSITION, hMenuImg, 0)
خوب تو این قسمت اول سک متغیر برای hwnd کلی منو، یکی برای منو، و یک اشاره گر به تصویری که فراره تو حافظه Load شه و یک رشته برای مسیر فایل Bitmap تعریف کردیم. بعد مسیر فایل رو تعیین کردیم که من Bitmap خودمو تو مسیر پروژم (App.path) با نام MenuImg.bmp ذخیره کردم ولی شما میتونین اونو به مسیر فایل خودتون تغییر بدین. بعد توسط تابع LoadImage اونو Load کردیم. بعد از اون hwnd کلی منو و hwnd منوی شماره یک (مثلا اگه شما دو تا منو به ترتیب از چپ به راست File و Edit دارین شماره منوی File میشه 0 و شماره منوی Edit میشه 1 و بقیه هم به همین صورت) رو بدست آوردیم. در مرحله آخر تصویر Bitmap رو برای زیر منوی اول این منو set کردیم. (این هم از 0 شروع میشه یعنی شماره 0 به زیرمنوی اول اشاره میکنه). شما میتونین واسه بقیه منوها هم این کار رو بکنین فقط باید مسیر فایل و شماره منو و شماره زیر منو رو تغییر بدین.
Last edited by عــــلی; 31-05-2007 at 21:21.
سلام.
اینم برای دوستای ویروسی :
به دست آوردن دایرکتوری ویندوز:
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
lpBuffer یک بافر و nSize اندازه بافر
Dim sBuf As String * 255
Dim lLen As Long
lLen = GetWindowsDirectory(sBuf, 255)
MsgBox Left(sBuf, lLen)
به دست آوردن دایرکتوری سیستم:
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
مثل قبلی
به دست آوردن دایرکتوری Temp:
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
nBufferLength طول بافر و lpBuffer هم یک بافر
Dim sBuf As String * 255
Dim lLen As Long
lLen = GetTempPath(255, sBuf)
MsgBox Left(sBuf, lLen)
البته این کارا رو با استفاده از FileSystemObject هم میشه انجام داد. برای این کار باید از متد GetSpecialFolder استفاده کنیم:
FileSystemObject.GetSpecialFolder(folderspec)
که folderspec دایرکتوری مورد نظر ما را مشخص می کند و مقادیر آن 0 برای دایرکتوری ویندوز، 1 برای دایرکتوری سیستم و 2 برای دایرکتوری موقت می باشد.
کد زیر دایرکتوری سیستم را به ما میدهد:
Dim oFSO As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
MsgBox oFSO.GetSpecialFolder(1)
ActiveX چیست؟چگونه ActiveX بسازیم؟
مایکروسافت از نگارش 4 به بعد ویژوال بیسیک تکنولوژی جدیدی به نام ActiveXیا OCX به جای VBX در آن گنجاند که با استقبال خوبی روبرو شد. ActiveX ابزاری است که شما میتوانید با آن به برنامه خود شیئی را اضافه کنید که از قبل تعریف شده است و دارای توانیی هایی باشد که زبان برنامه نویسی شما قادر به انجام آن نیست. مثلاً پخش فایل صوتی با پسوند خاص (مثل:OGG) که زیبان بیسیک نمیتواند این کار را انجام دهد.
توجه:
تمامی مثال ها این مجموعه مربوط به ActiveXWindows Media Player است با نام MP1.
ActiveX شامل چیست:
يك ActiveX خوب و كارامد باید دارای امکانات زیر باشد:
Fuction یا دستور قابل اجرا:
مشخص یا Property:MP1.Play
رویداد یا Event (مثلا هنگام کلیک برروی چیزی کدی اجرا شود که کاربر به آن می دهد):MP1.FileName
اینها تقریباً مهمترین اجرا هستند. اما می توان از اجزای دیگری مثل کلید عکس ویا حتی ActiveX دیگر در آن قرار داد.MP1_Click
شروع کار:
وارد محیط Visual Basic شوید و در کادر اولی که باز میشود گزینه ActiveX Control را از سربرگ New دابل کلیک کنید.
درصورتی که کادر بازنشد از کلیدهای Ctrl+N استفاده کنید.
یک ActiveX جدید ایجاد شده است.
مشخصات کنترلها (Properties):
مهمترین مشخصات یک ActiveX عبارتند از:
Name: نام کنترل در هنگام قرار دادن در برنامه. (معمولا به شکل Name1 میباشد).
Appearance: نوع نمایش آن که به دونوع سه بعدی و فلات قابل تنظیم است.
AutoRedraw: این قسمت مربوط به این است که اشکالی مثل مربع یا متن هایی که با فرمان Print نوشته یا ایجاد شده اند با خارج شدن آن قسمت از فرم ازبین برند یا نه. (True = از بین نروند)
BackColor: رنگ پس زمینه کنترل
BackStyle: نوع کنترل که به دونوع شفاف و کدر تقسیم میشود. در صورت شفاف بودن فقط آبجکتها نمایش داده میشوند و خودکنترل به صورت شفاف یا Transparentنمایش داده میشود.
CanGetFocus: قابلیت فکوس داشتن. یعنی یک آبجکت محسوب شود و بافشردن کلید Tab فوکوس بگیرد.
Font: فونت پیشفرض آبجکتها و کنترل
FontTransparent: شفافیت و زیبایی فونت
ForeColor: رنگ رو. مثل کاملاتی که با دستور Print نوشته میشوند.
Height: ارتفاع یا طول کنترل
InvisibleAtRuntime: این گزینه اگر True باشد در هنگام اجرا قابلیتهایی مثل Drag و Drop رو از دست میده.
KeyPreview : این گزینه به شما میگوید که وقتی کلیدی فشرده شد اول به فرم انتقال داده شود بعد به آبجکت.
MouseIcon: آیکن ماوس کنترل
MousePointer: نشانه گرد ماوس. مثل Hourglass که برابر است با 11
Picture: عکس پس زمینه کنترل
PropertyPage: فعال بودن با نبودن صفحاتی مثل Font و ...
Public: قابلیت قرار گرفتن روی فرم. (همیشه باید True باشد)
RightToLeft: طریقه نوشتن کنترل. مثلا در دستور Print متن از سمت راست کنترل نوشه میشود
ScaleMode: تعیین نوع واحد ها مثل تویپ پیکسل و ...
ToolboxPicture: عکسی که در هنگامی که در لیست کنترل ها قرار گیرد
Width: عرض و پهنای کنترل
اضافه کردن Function و Sub به ActiveX
فرق بین Function و Sub:
Sub و Function هر دو - بوسیله یک سری متغییر که از کاربر میگیرند – دستوراتی را انجام میدهند. با این تفاوت که Sub فقط انجام میدهد. اما Function علاوه بر آن که دستورات را انجام میدهد نقش متغیر را نیز دارد و به خود یک متغیر نسبت میدهد.
برای اضافه کردن Function به کنترل:
در قسمت General Declarationکد زیر را اضافه کنید:
Public Function FuncName(ByVal Var1 As String, ByVal Var2 As Integer) As String
End Function
به جاي FuncName نام Function را بنويسيد. به جاي Var1و Var2نام متغير دلخواه را تايپ کنید. برای اضافه کردن متغیر هایی دیگر مانند نمونه کد بالا عمل کنید.
در صورتی که متغیر اختیاری باشد و نسبت دادن به آن اجباری نباشد از نمونه زیر استفاده کنید.
Public Function FuncName(ByVal Optional Var1 As String = "Text", ByVal Var2 As Integer) _ As String
End Function
در نمونه بالا Var1 اختیاری است و در صورت وارد نکردن به Text تبدیل میشود.
در بین Public Function … و End Function میتوان دستورات را نوشت.
نمونه زیر از کاربر دو متغیر را میگیرد و سپس جمع آن دو را به خود نسبت میدهد.
Public Function Add(ByVal Number1 As String, ByVal Number2 As Integer) As Integer
Dim Addition As Integer
Addition = Number1 + Number2
Add = Addition
End Function
در اجرای این Function این چنین مینویسیم:
MsgBox UserControl1.Add(12, 11)
برای ایجاد یک Sub دقیقا مانند Function عمل میکنیم. با این تفاوت که دیگر بعد از بستن پرانتز آخر نمیتوان نوع متغیر را مشخص نمود. مانند:
Public Sub Add(ByVal Number1 As String, ByVal Number2 As Integer)
Dim Addition As Integer
Addition = Number1 + Number2
MsgBox Addition
End Sub
یک ترفند جالب
ممکن است شما بخواهید در قسمت Properties کنترل خود یک مورد با نام (About) نیز وجود داشته باشد. برای این کار:
1- از منوی Project گزینه Add Form را کلیک کرده و از کادر گزینه About Dialog را دابل کلیک کنید.
2- سپس به کنترل برگردید و یک Sub به آن اضافه کنید. مانند زیر
Public Sub ShowAboutBox ()frmAbout.Show 1End Subاز منوی Tools گزینه Procedure Attributes را انتخاب کنید.
از قسمت Name گزینه ShowAboutBox را انتخاب نمایید.
گزینه Advanced >> را کلیک کنید.
از قسمت Procedure ID گزینه AboutBox را انتخاب کنید.
کلید OK را کلیک کنید.
اضافه کردن Property به ActiveX
برای اضافه کردن Property به کنترل دو راه وجود دارد.
راه اول:
در قسمت General Declarationکد زیر را اضافه کنید:
Public Text As String
اما این روش خوبی نیست. دلیلش رو باروش دوم میشه فهمید.
راه دوم:
این راه خیلی سخت تر از روش اول هست. از دو قسمت Get و Let و گاهی اوقات نیز از Set نیز دراین
تشکیل میشود.
در این نمونه یک Label برروی فرم موجود است که با این Property میتوان متن آن را تغییر داد.
ابتدا یک Label به کنترل اضافه کنید.
Get
نخست باید یک متغیر در General Declarationتعریف کرد.
Dim varText As Stringبعد کد زیر را اضافه کنید.
Public Property Get Text() As StringProperty Get هنگامی اجرا میشود گه شما بخواهید مقدار مورد نظر (در اینجا Text) را بگیرید. مثلا:
Text = Label1.Caption
End Property
MsgBox UserControl1.TextLet
کد زیر را اضافه کنید.
Public Property Let Text(New_Text As String)Property Let هنگامي اجرا ميشوى كه شما بخواهيد مقدار مورد نظر (در اینجا Text) را تغییر دهید.
Label1.Caption = New_Text
PropertyChanged "Text"
End Property
Propery Set نیز مانند Property Set میماند ام معمولا برای فونت ها به جای Let استفاده میشود.
اضافه کردن Event به کنترل
Event مجموعه دستوراتی هستند که کاربر آن ها را در هنگام اجرای برنامه تعریف میکند. اما زمان اجرای آن دست برنامه نویس است.
نمونه: در این نمونه یک Shape وجود دارد. یک Property رنگ نیز موجود است که با تغییر آن رنگ Shape نیز تغییر میکند. با تغییر رنگ Shape دستوراتی که کابر در هنگام اجرا میشود.
ایتدا یک Shape به کنترل اضافقه کنید و حالت BackStyle آن را به Opaque تغییر دهید.
اول یک رویداد در General Declaration با نام Change ایجاد میکنیم.
Public Event Change(OldColor As Long, NewColor As Long)بعد یک متغیر برای رنگ تعریف می کنیم.
Dim varColor As Longاکنون یک Property جدید با نام BackColor ایجاد میکنیم.
Public Property Get BackColor() As OLE_COLORفرمان RaiseEvent برای اجرای دستورات یک Event است که این فرامین را کاربر در هنگام Runtime تعریف میکند.
BackColor = Shape1.BackColor
End Property
Public Property Let BackColor(New_BackColor As OLE_COLOR)
Dim S As Long
S = Shape1.BackColor
Shape1.BackColor = New_BackColor
RaiseEvent Change(S, New_BackColor)
PropertyChanged "BackColor"
End Property
مشخصات متغیرها
برای تغییر مشخصات متغیرها از منوی Tools گزینه Procedure Attributes را انتخاب کنید.
از قسمت Name نام متغیر را انتخاب کنید و در قسمت Description توضیحی در مورد آن بنویسید.
ایجاد Type جدید
Type یا نوع چیزهایی هستند که کاربر را در انتخاب مقدار متغییرها در هنگام اجرای یک Sub و یا ... راهنمایی میکنند.
برای ایجاد یک Type جدید ابتدا در قسمت General Declarationکد زیر را تایپ کنید.
Public Type Colorبه جای Color میتوان نام مورد نظر را جایگزین کرد. در بین Private Type و End Type میتوان متغیر و نوع آن را مشخص کرد. ىر حال حاضر يك Type جدید ایجاد شده است.
Red As Long
Green As Long
Yellow As Long
Black As Long
White As Long
End Type
اکنون باید متغیرها را مقداردهی کرد.
Const Red = 255
Const Green = 65280Const Yellow = 65535Const blcak = 0اضافه کردن Property PageConst White= 16777215
Property Page صفحاتي مانند فرم هستند که میتوان درون آن ها نیز آبجکت و ... قرار داد. برای اضافه کردن در پنجره Project در بالا سمت راست رو Project موردنظر کلیک راست کرده و از زیر مجموعه Add گزینه Property Page را انتخاب کنید.
از کادر بازشده Open را کلیک کنید.
پنجره Property خود را مانند زیر آرایش کنید:
سپس کد زیر را برای این صفحه وارد کنید:
Private Sub Combo1_Click()Label1.FontName = Combo1.TextEnd SubPrivate Sub PropertyPage_Initialize()For i = 0 To Combo1.ListCount - 1Combo1.RemoveItem 0Next iFor i = 0 To Screen.FontCount - 1Combo1.AddItem Screen.Fonts(i)Next iاز مشخصات کنترل گزینه PropertyPages را انتخاب كرده و گزینه PropertyPage1 را فعال نمایید و کلید OK را کلیک کنید.End Sub
اکنون هنگام اجرا در مشخصات کنترل برنامه خود گزینه ای بانام (Custom) وجود دارد که باکلیک کزدن برروی آن پنجره مورد نظر نمایش داده میشود.
Long, ByVal nIndex As Long) As Long
Private Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const CS_DROPSHADOW = &H20000
Private Const GCL_STYLE = (-26)
Sub DropShadow(hwnd As Long)
SetClassLong hwnd, GCL_STYLE, GetClassLong(hwnd, GCL_STYLE) Or CS_DROPSHADOW
End Sub
Private Sub Form_Load()
DropShadow Form1.hwnd
End Sub
حالا اجرا کنید که شاید برای بعضی ها سایه نیفتاد که باید روی دسکتاپ راست کلیک کنید و گزینه Propetice رو انتخاب و در تب Apperance روی دکمه Effect کلیک کنید و گزینه show shadow under menu رو فعال کنید.
اقا واقعا دست مريزاد
اما
ايكاش همه اينها در vb.net بود
از همه کنتلرهات توی یه برمانه استفاده کردم !!!!!!!!!!!!!!!
نمیدونی چه شهر نویی شد !!!!!!!!!!!
علی آقا دمت گرم، خیلی علی بود
بازم زار....
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)