در مورد نمایش عکس در pictureBox

A_123

Member
سلام
من یه برنامه نوشتم.

بعد یه FileListBox گزاشتم. حالا میخوام وقتی کاربر روی فایل-لیست باکس کلیک کرد؛ اگر پسوند آن فایل مثلا JPG باشه , اونوقت همون عکسه در PictureBox لود بشه. به صورت استرچ.
راهنمایی بفرمایید:rose:

امیدوارم منظورمو رسونده باشم!
 

the_king

مدیرکل انجمن
سلام
من یه برنامه نوشتم.

بعد یه FileListBox گزاشتم. حالا میخوام وقتی کاربر روی فایل-لیست باکس کلیک کرد؛ اگر پسوند آن فایل مثلا JPG باشه , اونوقت همون عکسه در PictureBox لود بشه. به صورت استرچ.
راهنمایی بفرمایید:rose:

امیدوارم منظورمو رسونده باشم!

اگه اسم FileListBox تون File1 و اسم PictureBox تون Picture1 باشه :

کد:
Private Sub File1_Click()
    Dim Pos As Long
    Dim Path As String
    Dim Pic As StdPicture
    Path = File1.Path & IIf(Right(File1.Path, 1) = "\", "", "\") & File1.FileName
    Pos = InStrRev(Path, ".")
    If Pos > 1 Then
        Select Case LCase(Mid(Path, Pos + 1))
        Case "jpg", "jpeg", "jpe", "jfif", "jfi"
            Set Pic = LoadPicture(Path)
            Picture1.AutoRedraw = True
            Picture1.PaintPicture Pic, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight
        End Select
    End If
End Sub
 

A_123

Member
خیلی ممنون.
فقط اگه میشه راجع به اینکه چجوری هستند این توابع و طرزکار چطوریه و ... یه توضیح بدید( به عبارتی چه اتفاقی می افتذ در این برنامه به صورت قدم به قدم!)
مثلا StdPicture چیه؟
Set Pic = LoadPicture(Path) چط.ریه؟
 
آخرین ویرایش:

the_king

مدیرکل انجمن
خیلی ممنون.
فقط اگه میشه راجع به اینکه چجوری هستند این توابع و طرزکار چطوریه و ... یه توضیح بدید( به عبارتی چه اتفاقی می افتذ در این برنامه به صورت قدم به قدم!)
مثلا StdPicture چیه؟
Set Pic = LoadPicture(Path) چط.ریه؟

اول یک متغیر Pos رو تعریف می کنیم تا بعدا با استفاده از متغیر Pos موقعیت کاراکتر نقطه (Dot) رو توی رشته
پیدا کنیم :
کد:
    Dim Pos As Long

برای اینکه مسیر هر کدوم از فایل های تصویر رو بررسی کنیم یک متغیر به اسم Path هم تعریف می کنیم :
کد:
    Dim Path As String

خود یک تصویر یک شیء از نوع StdPicture است، مثل یک تیکه از حافظه RAM که تصویر در اون قرار می گیره.
StdPicture خودش به تنهایی نمایشی نداره، یعنی مثل کنترل Image یا PictureBox نیست که مستقیما روی فرم
قرار بگیره، همه اطلاعات تصویر رو در حافظه RAM قرار میده. بعدا می توانیم این تصویر رو با یک کنترل مثل Image
یا PictureBox نمایش بدهیم.

ما یک متغیر از نوع StdPicture تعریف می کنیم تا بعدا تصویری که از فایل می خوانیم را داخلش قرار بدهیم :
کد:
    Dim Pic As StdPicture

File1.Path مسیر پوشه ای است که فایل های داخل اون رو لیست می کنه، مثلا C:\New Folder یا \:C
File1.FileName هم اسم فایلی است که قراره تصویر از داخلش خونده بشه، مثلا sample.jpg
ما باید مسیر دقیق فایل تصویر رو با ترکیب کردن File1.Path و File1.FileName بسازیم، اما یک نکته ای وجود داره.
اگر رشته File1.Path به کاراکتر \ ختم نشه (مثلا C:\New Folder) اونوقت باید بین دو رشته یک کاراکتر \ اضافه کنیم :
کد:
"C:\New Folder" + "\" + "sample.jpg"

اما اگه رشته File1.Path به کاراکتر \ ختم بشه (مثلا \:C) آنوقت نباید بین دو رشته کاراکتر دیگری قرار بگیره :
کد:
"C:\" + "sample.jpg"

تابع IIf رو به همین منظور بکار می بریم، اگه آخرین کاراکتر سمت راست رشته File1.Path برابر \ باشه...
کد:
IIf(Right(File1.Path, 1) = "\"

آنوقت نیازی به کاراکتر اضافه ای نیست، اما در غیر اینصورت رشته "\" بین دو رشت اضافه میشه :
کد:
    Path = File1.Path & IIf(Right(File1.Path, 1) = "\", "", "\") & File1.FileName

حالا ما مسیر کامل فایل رو در متغیر Path داریم. اما باید بررسی کنیم که آیا پسوند فایل jpeg است یا خیر.
برای پیدا کردن مقدار پسوند فایل، باید موقعیت آخرین کاراکتر نقطه رو در رشته Path پیدا کنیم. تابع InstrRev
موقعیت آخرین مورد یک رشته در رشته دیگه رو اعلام می کنه :
کد:
    Pos = InStrRev(Path, ".")

حالا می دونیم که مقدار Pos موقعیت آخرین کاراکتر . در رشته Path است. اگر 0 باشه یعنی رشته اصلا پسوند نداره
و اگر بزرگتر از 0 باشه، Pos شماره اون کاراکتر رو مشخص می کنه.

اگر رشته پسوند داشت...
کد:
    If Pos > 1 Then

کاراکتر شماره Pos که نقطه است، از کاراکتر شماره Pos + 1 به بعد هم پسوند فایل است، که باید بررسی اش کنیم.
با تابع Mid قسمت پسوند رو از رشته Path جدا می کنیم تا بررسی بشه. اما اول پسوند را با تابع LCase به حروف
کوچک تبدیل می کنیم تا در بررسی بین حروف بزرگ و کوچک مثل رشته JpG و jPg فرقی نباشه.
کد:
        Select Case LCase(Mid(Path, Pos + 1))

اگر رشته پسوند یکی از این چند پسوند مجاز برای فایل های JPEG بود...
کد:
        Case "jpg", "jpeg", "jpe", "jfif", "jfi"

تصویر موجود در آن فایل رو با تابع LoadPicture می خوانیم و در متغیر Pic قرار می دهیم. دقت کنید که الان تصویر
در حافظه RAM قرار گرفته و هنوز صورت نمایشی نشون داده نشده.
برای مقدار دهی به اشیاء (مثلا StdPicture یا StdFont یا Control یا Object) باید از Set استفاده کرد، یعنی
قبل از اسم متغیر بایستی عبارت Set درج شود :
کد:
            Set Pic = LoadPicture(Path)

برای آنکه تصویری که نمایش می دهیم ثابت و پایدار باشد و از صفحه PictureBox پاک نشود، بایستی مشخصه
AutoRedraw را در Picture1 به مقدار True تغییر دهیم، وگرنه اگر به هر دلیلی روی PictureBox فرم دیگری
قرار بگیرد و بعدا کنار برود، تصویر موجود در PictureBox پاک می شود و اثری از آن نمی ماند :
کد:
            Picture1.AutoRedraw = True

حالا باید تصویر را در PictureBox ترسیم کنیم، در پارامتر اول تصویر رو مشخص می کنیم، یعنی Pic
در پارامتر دوم و سوم موقعیت x و y جایی رو در PictureBox مشخص می کنیم که نمایش از آن موقعیت
آغاز شود، مختصات 0,0 موقعیت گوشه چپ-بالای PictureBox است که ترسیم از آنجا آغاز خواهد شد.
پارامتر چهارم و پنجم طول و عرض تصویری خواهد بود که در PictureBox ترسیم می شود، این ابعاد
ربطی به طول و عرض خود تصویر ما ندارند، بلکه ابعاد نمایشی داخل PictureBox هستند. برای همین است
که ما از مقدار طول و عرض خود PictureBox (یعنی Picture1.ScaleWidth و Picture1.ScaleHeight ) استفاده می کنیم
تا تمامی قسمت های PictureBox را با تصویر بپوشاند، حتی اگر تصویر واقعی خیلی بزرگتر یا کوچکتر از این
ابعاد باشد. این دقیقا همان ویژگی Stretch را بوجود می آورد :
کد:
            Picture1.PaintPicture Pic, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight

ما با پسوند های دیگر برای فایل ها کاری نداریم، پس در ادامه صرفا Select ما را می بندیم :
کد:
        End Select

شرطی که بررسی می کرد که آیا فایل پسوند دارد یا خیر را نیز می بندیم :
کد:
    End If
 

جدیدترین ارسال ها

بالا