خیلی ممنون.
فقط اگه میشه راجع به اینکه چجوری هستند این توابع و طرزکار چطوریه و ... یه توضیح بدید( به عبارتی چه اتفاقی می افتذ در این برنامه به صورت قدم به قدم!)
مثلا StdPicture چیه؟
Set Pic = LoadPicture(Path) چط.ریه؟
اول یک متغیر Pos رو تعریف می کنیم تا بعدا با استفاده از متغیر Pos موقعیت کاراکتر نقطه (Dot) رو توی رشته
پیدا کنیم :
برای اینکه مسیر هر کدوم از فایل های تصویر رو بررسی کنیم یک متغیر به اسم Path هم تعریف می کنیم :
خود یک تصویر یک شیء از نوع StdPicture است، مثل یک تیکه از حافظه RAM که تصویر در اون قرار می گیره.
StdPicture خودش به تنهایی نمایشی نداره، یعنی مثل کنترل Image یا PictureBox نیست که مستقیما روی فرم
قرار بگیره، همه اطلاعات تصویر رو در حافظه RAM قرار میده. بعدا می توانیم این تصویر رو با یک کنترل مثل Image
یا PictureBox نمایش بدهیم.
ما یک متغیر از نوع 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) آنوقت نباید بین دو رشته کاراکتر دیگری قرار بگیره :
تابع 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 شماره اون کاراکتر رو مشخص می کنه.
اگر رشته پسوند داشت...
کاراکتر شماره 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 ما را می بندیم :
شرطی که بررسی می کرد که آیا فایل پسوند دارد یا خیر را نیز می بندیم :