الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أفتح الصورة التي تلي الصورة المفتوحة

مغلق
بدأه eias في 29 سبتمبر 2005 · 12 رد · 1,212 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم..

لنقل أني استخدمت الكود لفتح صورة ثم حفظت موقع هذه الصورة في TextBoxمثلا أريد الكود أو الطريقة التي أستطيع فيها ان أفتح الصورة التي تلي هذه الصورة في المجلد نفسه في حال كان المجلد يحوي أكثر من صورة.. وشكرا.

#2

أولاً، أحب أن أسألك أخي eias سؤالاً خارجاً عن الموضوع، لماذا أراك في كل قسم في المنتدى؟ أحياناً أجدك في ال C++ تسأل عن الدايركت أكس وأحياناً أجدك هنا في الفيبي نت... ركّز على لغة واحدة حتى تستطيع أن تطور نفسك، مع أن الإطلاع على اللغات الأخرى له فوائد عظيمة (بل وواجبه أحياناً) ولكن من الصعب على الإنسان الإحاطة في هذا العصر بكل شيء مثل دافنشي في زمانه (كان طبيب وطيار ورسام ..الخ).

بالنسبة لسؤالك، لن أكتب لك الكود ولكنني سأعطيك الفكرة، والجواب له شقين (أو جوابين)، إن كنت تعمل برنامجاً لإستعراض صور في مجلد معروف لديك وفيه صور فالبتأكيد أنت تعرف الصور وتعرف أسمائها لذلك فقط غير الإسم لتفتح الصورة التي تليها، فمثلاً لو كان الصورة الحالية هي h.jpg فقم بتغييرها إلى i.jpg (على فرض بأن أسماء صورك هي أبجد هوز!!).

الجواب الثاني، أنت تريد عمل برنامج يقوم المستخدم بفتح صورة من مجلد معين، بمعنى أنت كمبرمج لا تعرف إسم الصورة التي تلي الصورة الأولى الذي فتحها المستخدم، وفي هذه الحالة يجب عليك الإستعانة بكلاسات File و Folder، قم بإستعراض جميع الصور الموجودة في ذلك المجلد (بإستخدام الكلاس folder) وقم بحفظ أسْمائها داخل مصفوفة من نوع سترنج ولنسميها arrPic، وهنا عندما يفتح المستخدم صورة ما قم بالبحث عن الإسم في المصفوفة وبالتالي يسهل عليك معرفة إسم الصورة التي تليها (من خلال التنقل خطوة واحدة إلى الأمام في المصفوفة.

أرجو بأن الفكرة قد وصلتك.

Learn Japanese :>>> http://www.nouben.com/

#4

السلام عليكم...عفوا

شكرا لك أخي الكريم HMS الحقيقية أنا أحب هاتين اللغتين و أتعلمهما معا ^.^بس كل فترة لغة يعني بنوع..

بالنسبة للجواب فأنا قصدي الشق الثاني لأني لن أعرف ما فتحه المستخدم..انا فهمتك ..ولكن عندي مشكلة

أنا لا أعرف كيف أتعامل مع كلاسات Folder هل و أداة؟

أنا لا أعرف كيف أتعامل مع المصفوفات في vb.net فقط أعرف بلغة ++C؟

ممكن مساعدة...لاتعطيني الكود فقط هذين الأمرين..

وشكرا

#5

اخي الكريم ..طيب شوف في عندي فكرة أسهل..

شو رأيك نستخدم الأداة File ثم نحدد اللواحق مثل JPG.BMP... ثم نقوم بالنتقل بين عناصر الFile ولكن المشكلة بالتطبيق.

#6

يا إيّاس، أتريد عمل مستعرض صور وأنت لم تجد بعد المصفوفات، سامحك الله.

على كل حال، كتبت لك برنامج مستعرض ولكنني لم أفحصه جيداً، الرجاء أن تحاول أن تحل أية أخطاء فيه عن طريق Try..Catch وهي تماماً تشابه نظيرتها في السي بلس بلس. فمثلاً يوجد زرين واحد للذهاب للصورة التي تلي الصورة التي فتحها المستخدم وأخر لفتح الصور التي قبلها، إن قام المستخدم بضغط أحد الزرين قبل أن يفتح صورة فالبتأكيد سيقع crash للبرنامج، حاول ان تعالج ذلك الخطأ عن طريق جميلة try catch أو عن طريق تعطيل الأزرار ما لم يوجد عندنا صور مفتوحة (والحل الأخير أفضل).... وحاول أن تفحص البرنامج جيداً فالبتأكيد ستجد أخطاء أخرى (قد يحدث خطأ إن حاول المستخدم فتح ملف يكون فيه الإيكستينشن بالحروف الصغيرة أو العكس، قم بإصلاح ذلك عن طريق عمل tolower لكل الملفات المفتوحة).

إستخدمت كما أسلفت زرين للتنقل في صور الفولدر الذي فتح المستخدم الصورة منه، وكذلك وضعت لك listbox لوضع جميع أسماء صور ذلك الفولدر له، وتستطيع أيضاً إستعراض الصور عن طريق الضغط على إسم الفايل في ال listbox أيضاً.

تستطيع تطوير البرنامج وهذه بعض الإقتراحات:

1) وضع timer حتى يقوم البرنامج إستعراض الصور تلقائياً بعد فترة زمنية يحددها المستخدم.

2) وضع خيارات لتكبير الصورة او عمل shrink لها (وهذا سهل فقط قم بعمل ذلك من خصائص ال picturebox التي تحتوي على الصورة (وكذلك إضافة أشرطة تمرير).

3) وضع زر خاص لجعل الصورة تظهر في كامل الشاشة مثل مستعرض الصور في الويندوز (وهذا أيضاً سهل جداً ويوجد أمثلة لها في المنتدى).

4) تستطيع أن تطور البرنامج ليبدو أفضل بكثير من مستعرض صور الويندوز عن طريق عمل مصغرات للصور إن أراد المستخدم أن يفتح أكثر من صورة في نفس الوقت.

5) تستطيع أن تضع contextmenu ومن تستطيع أن تعمل تصغير للصورة حسب النسبة التي يريدها المستخدم (يوجد أيضاً مثال أذكر بأنني كتبته منذ فترة في المنتدى عن كيفية القيام بذلك).

وأرجو المعذرة عن عدم قدرتي على المتابعة معك فيه هذه المشاركة لأن إجازتي إنتهت، ولكنني أنصح أخي على القيام بدراسة الفيجوال بيسك نيت بشكل جدّي إن أردت فعلاً أن تكون مبرمجاً، هناك الكثير من الكتب في هذا المنتدى لذا حاول ان تقرأ على الأقل كتاب في الأساسيات وقم بإنهاءه تماماً مع التدريب على أمثلته، وأنا أنصحك إن كنت تحبذ اللغة العربية بكتاب الأستاذا محمد غانم (يوجد له رابط أيضاً في المنتدى).

بالتوفيق اخي العزيز

eias.zip

تم تعديل هذه المشاركة بواسطة HMS في 30 سبتمبر 2005 في 15:41

Learn Japanese :>>> http://www.nouben.com/

#7

السلام عليكم

ما شاء الله عليك أخي HMS خطير مرة ..

طيب من باب تفعيل المشاركة , أردت أن أشرح المنطق المتبع لمثل هذه المشاريع

فبما أن النوع و الكم غير محدد (الصور) فإن أي عنصر من صنف المجموعات (مصفوفات , مجموعات , ... إلخ)

يكون أفضل الحلول بحيث نوظف هذا العنصر ليقوم بجلب و تفحيص و تشخيص الصور ,,

هنالك دالة أو وظيفة باسم GetFiles وهي نابعة من المسار System.IO.Directory.GetFiles

هذه الدالة لها ممررين الاول مسار المجلد كقيمة نصية و الثاني الصيغة المرد البحث عنها pattern كقيمة نصية

وهذه الدالة تعود بقيمة مصفوفية نصية النوع ()String , فمن خلالها نستطيع أن نجلب كل الصور بكل سهولة عِوضاً عن كتابة

دالتنا الخاصة, لذلك فهي تكفلت عنا عناء ذلك. تستخدم على هذا النحو .

'Add All Existing Images Into Array List
arrLstImages.AddRange(Directory.GetFiles( _
.SelectedPath, SearchPatterns(i)))

شاهد المثال المرفق للإضاح .

ملاحظة : المثال منشئ على بيئة التطوير 2005

بالتوفيق إن شاء الله.

FindPictures.zip

في المثال يتضح المقال

#8

شكراً أخي الغملاس، ولكم كنت أتمنى بأن يكون عندي ال VS.2005 لأرى ماذا تقصد، أو على الأقل تمنيت بأن يكون عندي الفريمورك 2 لأجرب المثال (إن كان الملف التنفيذي به)....

GetFiles هي تماماً ما قمت بإستخدامه في المثال الذي وضعته لإيّاس، ولكن عندما قمت بعمل البرنامج (إن صحّ أن أسميه برنامج!) خطر على بالي نقطة قد يقع المبرمج بخطأ قاتل فيها وهي تمرير ال SerachPatterns إليها على شكل string، فأنت لا تضمن مثلاً بأن ذلك السترينج لا يكون في إسم الفايل وليس فقط في إمتداده، فمثلاً لربما (مع أنه إحتمال ضعيف) كنا نريد البحث عن الفايلات التي إمتدادها .mpg ونجد نفس الإمتداد في جسم الفايل في ملف نصي (تماماً مثلما يتم خداع برامج الفيروسات في فترة بعمل الإمتداد بشكل مزدوج)... للأسف لا يوجد الفيجوال ستديو عندي الآن لأبين هذه القضية بالتفصيل بمثال مشروح.... ولا أعلم إن تم التغلب على هذه المشكلة في الفيجوال ستديو 2005.... خلاصة القول، أحياناً الإعتماد على ما يقدمه لك بيئة التطوير ليس هو ما تريده، لذلك يجب أن تتغلب على هذه المشكلة بطريقة من بنات أفكارك.

وأمر آخر، بالنسبة لما تقدمه لك بيئة التطوير (ونظن بأنه جديدة)، هي في الحقيقة عبارة أمور موجودة ولكن قاموا بتغليفها لنا بشكل سهل، فمثلاً لو كان عندنا مصفوفة من عشرة أرقام في مصفوفة str فإننا نقوم بالتالي لإضافتها إلى listbox

for x as integer = 0 to str(getupperboun(0))

listbox.items.add(str(x)

next

وهذا الكود هو تماماً ما قاموا بإختصاره لك ب addrange، الكود هو نفسه ويقوم ال complier تماماً بعمل نفس الخطوات في الطريقة الأولى، ولكن بعيداً عن أعينك، لذلك يجب أن لا نظن بأننا نجانب الصواب إن قمنا بتنفيذ المطلوب عن طريق إتباع الطريقة الأولى، وهذا الأمر أيضاً ينطبق مثلاً على ترتيب المصفوفة التي سهلوها جداً عن طريق array.sort وغيرها الكثير.

Learn Japanese :>>> http://www.nouben.com/

#9

السلام عليكم

حياك الله أخي العزيز أنا أتفق معك فيما قلت تماماً

لكن هنالك إستثناءات مثلاً الـ ArrayList على سبيل المثال لا الحصر

لانها تقبل قيم فارغة (لذلك لو لم تتوفر الصور من نوع JPG لن تكون هنالك مشكلة )

كذلك من ميزات هذه المصفوفة أنها تقبل قيم مكررة duplicate values

وهذه الاخيرة لا اعرف هل نصنفها كمنقبة لها أو مثلبه عليها .

وفي تفسير المصفوفة في الـ MSDN كالتالي

ArrayList accepts a null reference (Nothing in Visual Basic) as a valid value and allows duplicate elements.

بالتوفيق اُستاذي العزيز. ,, السلام عليكم

في المثال يتضح المقال

#10

اخي الكريم HMSالحقيقة لا أعرف كيف سأشكرك ...(هو أنا اسمي إيـاس بلا شدة ّ لا أعرف ليش علقت عليها :lol: )

شكرا لك هذه الفكرة نفسها أقصد التي طبقتها في vb6 باستخدام الأداة File الله يرحمها..

الحقيقة أنا فهمت جزء من الكودبس في جزء مرهق و عليه يتوقف البرنامج على ما أعتقد:

  Dim myFolder As New DirectoryInfo(fileName.DirectoryName)
        Dim counter As Integer
        For Each myfile As FileInfo In myFolder.GetFiles
            If myfile.Extension = ".gif" Or myfile.Extension = ".bmp" Or myfile.Extension = ".jpg" Or myfile.Extension = ".png" Then
                ListBox1.Items.Add(myfile.Name)
                ReDim Preserve Pic(counter)
                Pic(counter) = myfile.FullName
                counter += 1
            End If
        Next
        For x As Integer = 0 To Pic.GetUpperBound(0)
            If f.FileName = Pic(x) Then
                currentPic = x
                ListBox1.SelectedIndex = x
                Exit For
            End If
        Next

        Text = "Current Folder: " & myFolder.ToString

باقي الكودات رح تتوضح بعد أن يتوضح هذا الكود..

و بالنسبة لبقية الأفكار التي قلت لي عليها فقمت بتطيق معظمها حتى الآن ...

الحقيقة أن ارتكبت أخطاء في تعلم لغة Vb كنت أترك أشياء و أنتقل لأشياء لذلك تراني خبير في مناطق و مبتدء في مناطق :lol: بس الكتب صارت مملة من كثر الكلام لا أحد يوثل لك الفكرة التي تريدها ..أتمنى تلحق توضحلي الكود قبل أن تنتهي إجازتك و إلا فسوف أتركه للإجازة القادمة.

أخي الكريم الغملاسي فكرتك لم تصلنا بوضوح لأننا لا نملك vs2005 ممكن تعطينا كود الصفحو كاملا أعتقد هذا هو الحل..

وشكرا لكم

إيـاس (بلا شدة ّ :lol: )

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…