PDA

مشاهده نسخه کامل : روی عکس دوبار کلیک کنید و عکس با برنامه شما به نمایش در میاد



2600
19-09-07, 05:41
شما ها همتون خوب میدونید که وقتی روی یک تصویر(Jpeg ، Bitmap و یا غیره) دوبار کلیک می کنید ابتدا نرم افزار Preview که مخصوص ویندوزه اجرا میشه و تصویر رو نشون میده.

- سوال این اتفاق چطور می افته ؟ اگه ما بخوایم یک نرم افزار مثل Preview ویندوز بسازیم باید چه خاکی تو سرمون بریزیم؟

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



مواد لازم : یک فرم آماده کنید و توش یک عدد شی Image توش قرار بدید و کد زیر رو تو قسمت کد برنامتون وارد کنید:





Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

Private Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long

Private Declare Sub SHChangeNotify Lib "shell32.dll" (ByVal wEventId As Long, ByVal uFlags As Long, dwItem1 As Any, dwItem2 As Any)



Private Sub Form_Load()

Image1.Stretch = True

Image1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight

'

RegisterFile ".BMP"

RegisterFile ".JPG"

RegisterFile ".GIF"

RegisterFile ".WMF"

RegisterFile ".EMF"



On Error Resume Next

If Len(Command()) > 0 Then Image1.Picture = LoadPicture(FixPath(Command()))

End Sub



Private Sub RegisterFile(strPasvand As String)

Dim sKeyName As String ' Holds Key Name in registry.

Dim sKeyValue As String ' Holds Key Value in registry.

Dim ret& ' Holds error status if any from API calls.

Dim lphKey& ' Holds key handle from RegCreateKey.

Dim path As String



path = App.path

If Right(path, 1) <> "\" Then

path = path & "\"

End If



' This creates a Root entry called "PicturePreview".

sKeyName = "PicturePreview" ' Project Name

sKeyValue = "Picture"

ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)

ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)



' This creates a Root entry called .BMP;.JPG;.GIF;.WMF associated with "PicturePreview".



sKeyName = strPasvand

sKeyValue = "PicturePreview" ' Project Name

ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)

ret& = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&)



' This sets the command line for "PicturePreview".

sKeyName = "PicturePreview" ' Project Name

sKeyValue = path & App.EXEName & ".exe %1"

ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)

ret& = RegSetValue&(lphKey&, "shell\open\command", REG_SZ, sKeyValue, MAX_PATH)



' This sets the icon for the file extension

sKeyName = "PicturePreview" ' Project Name

sKeyValue = path & "MyIcon.ico"

ret& = RegCreateKey&(HKEY_CLASSES_ROOT, sKeyName, lphKey&)

ret& = RegSetValue&(lphKey&, "DefaultIcon", REG_SZ, sKeyValue, MAX_PATH)



' This notifies the shell that the icon has changed

SHChangeNotify SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0



End Sub



Public Function FixPath(strPath As String) As String

Dim strTemp As String

strTemp = strPath

strChar = """"

If Len(strTemp) > 0 Then

If Mid(strTemp, 1, 1) = strChar Then strTemp = Right(strTemp, Len(strTemp) - 1)

If Mid(strTemp, Len(strTemp), 1) = strChar Then strTemp = Left(strTemp, Len(strTemp) - 1)

End If

FixPath = strTemp

End Function





خوب حالا از برنامتون یک فایل .exe بسازید و همچنین یک آیکون با نام MyIcon.ico کنار فایل اجرایی که ساختید قرار بدید.

توجه : همیشه یک آیکون باید با نام MyIcon.ico در کنار فایل اجرایی وجود داشته باشد در غیر اینصورت شکل فایل های تصویری (Jpeg ، Bitmap و غیره) به شکل ناشناخته در میان.



نکته: برنامه حداقل باید یک بار اجرا شود تا تاثیرات خود را روی ویندوز و فایل های تصویری بگذارد.



حالا برنامه اجرایی رو اجرا کنید و دوباره ببندید و روی یک عکس دوبار کلیک کنید و از منوی Open With… برنامه تون رو اجرا کنید و نتیجه رو در برنامه تون ببینید.

شما میتونید اینکار و برای هر برنامه ای و هر فایلی انجام بدید مثلا برنامه Notepad .

امیدوارم که به دردتون بخوره و شما هم نظر بدید.