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

استفسار عن رسم خرائط

مغلق
بدأه Smart programmer في 20 أكتوبر 2005 · 20 رد · 1,795 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

أحب في البداية أن اشكركم على هذا المنتدى الأكثر من رائع...

لدي استفسار بسيط....

انا عندي مشروع (application) عبارة عن

عمل MAP بــــ #C

مثلا : رسم خريطة المملكة في الخريطة ثلاث مناطق الرياض و جدة و الدمام ( مع امكانية اضافة منطقة جديدة)

عندما الــ user يضغط على اي منطقة ينرسم احد معالم تلك المنطقة

ســــــــــؤالي هذا البرنامج سهل خصوصاً انا قليلة الخبرة بــ #C و لكن أخذت C++ & C :rolleyes:

تحيــــــــــــــــ * Smart programmer* ـــــــــــــــاتي

#2

أعتقد انك تقصد ال GIS أو Geographric Information System (نظم المعلومات الجغرافية) ؟؟؟

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#3

السلام عليكم ورحمة الله وبركاته

لا أعتقد والله أعلم ذلك ياباشا لأن الخرائط GIS يتم ربط رسم الخرائط بالداتا بيز بإستعلامات زكية لتحديد مناطق وإستفسار المستخدم

يعني أعتقد ممكن تدخل فيها شوية زكاء إصطناعي

والله أعلى وأعلم ، على حد علمي

وهل ياباشمهندس قسم الجرافيك وتصميم الألعاب أكثر ناس تعرف في الموضوع ده ، ولا ايه رأيك

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

#4

هلا اخوي Bashmohandes

و انت ايضاً اخوي ِAhmed

اولاً اشكركم على الرد :D

ثانياً اعيد صياغة سؤالي بطريقة آخرى

هل هذا الــ Application سهل لمبتدئ مثلي

انتطر الردود :rolleyes:

تحيــــــــــــــــ * Smart programmer* ـــــــــــــــاتي

#5

الصراحة أن أريدك أن تُعيد صياغة السؤال بطريقة تجعلنا نفهم ماذا تريد

فهل أن تقصد بالفعل الGIS Systems أم أنك تقصد اختراعاً اخر ؟؟؟؟ أرجو التوضيح

اذا كان ما تقصد مجرد الرسم فال#C مثلها مثل أي لغة أخرى يمكنك أن ترسم بها مايحلو لك بال+GDI أو غيره من المكتبات مثل ال DirectX

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#6

السلام عليكم ورحمة الله وبركاته،،

اخي العزيز bashmohandes

اشكرك على حضورك الكريم وتعقبك في موضوعي

اخوي فهمت البرنامج خطأ بسبب صياغة الســــؤال

راح اشرح المطلوب :--

الــــoutput للبرنامج عبارة عن خريطة المملكة مجرد حدود ( تنعرف انها السعردية)

فيها ثلاث مناطق ( الرياض - جدة - الدمام ) فقط اسمـــــاء

بعدين الــuser لما يختار مثلا الرياض ( يعني ضغط على الرياض في الخريطة) يظهر له الفيصلية( يعني شكل توضيحي فقط انها الرياض)

فقط هذا هو البرنامج اتمنى فكرة البرنامج وضحت

و أي استفسار انا جاهزة

وانا بأنتظار تفاعلكم

تحـــــــــــــــــ Smart programmer ـــــــــــــــــــاتي B) :lol:

#7

هذه ليست مشكلة مادمت تملك هذه الصور للخرائط لن تحتاج سوى لمجموعة من الPictureBoxes أو حتى PictureBox واحد و تحمل فيه الصورة المطلوبة مع كل ضغطة من المستخدم

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#8

مشكووووور اخوي bashmohandes

الله يعطيك الـــــــ عافية ـــــــف على تفاعلك معي

والله لايحرمنا من جهودك المبذوووووله

ولاخلا ولا عدم :rolleyes:

واخوي اذا كان عندي اي استفسار سوف ألجى اليكم لاني واثقه من مساعدتكم لي ===> اذا لم يكن فيها اي ازعاج :D

تــــ ح ــــيـــاتي

Smart programmer

#9

السلام عليكم و رحمه الله و بركاته

أولاً :- أبارك لكل اعضاء المنتدى بحلول عيد الفطر المبارك

الذي ارجو من الله أن يعوده عليكم بالخير و العافيه :lol:

عندي مشكله في البرنامج المشروح اعلاه لأن هذا أول برنامج اسويه بـــ #C

انا بشرح البرنامج و بشرح وش سويت و عندي كم سؤال

الــ form حقي x 500 x 500 يكون طالع عليها صورة خريطة المملكه بعد ما يضغط الـ user على منطقة الرياض تظهر صورة فيها معالم الرياض حيث تغطي كل مساحة الـــ form بعدين الـــ user يضغط على اي منطقه من الصورة ترجع لي خريطة المملكه وكذلك باقي المناطق الي على الخريطة.

الخطوات الي سويتها ( الي اعرفه سويتة <--- يعني بس هذي معلوماتي)

1/ ادرجت pictureBox من toolBox الى form

2/ من الـ properties اختار Image وحطيت صورة المملكة (طبعاً تكون محفوظة عندي في الجهاز)

3/ من الـ events اختار MouseDown لــpictureBox1

4/ ادرجت pictureBox ثانية من toolBox الى الـ form

5/ من الـ properties اختار backgroundlmage و حطيت صورة للرياض

6/ بعدين خليت color = transparent و visible = false

6/ من الـ events اختار MouseDown لــ pictureBox2

7/ سويت run للبرنامج بس ماتنفذ عدل :(

ســــــــــؤالي هل في احد راح يعلق على الموضوع ويكتب الي يعرفه و انا طامعة في خبرتكم انكم تساعدوني خصوصاً اني شرحت البرنامج زين 0 :)

تحـــــــــــــــــ Smart programmer ـــــــــــــــــــاتي

#10

مشكووووووووووورين مقدماً <------- طبعاُ بس الي يساعدني :D

تم تعديل هذه المشاركة بواسطة Smart programmer في 3 نوفمبر 2005 في 07:04

#11

ما هذه الخطوات .. حضرتك تبرمج ام تظن انك تستخدم فوتوشوب؟ :P

اقتباس
سويت run للبرنامج بس ماتنفذ عدل

يا ريت ارفاق المشروع بالكامل ..

بعدين بيني و بينك .. ما في داعي لكل هذا التملق و التوسل و الدلع .. نحن لا ننتظر من احد ان يقول مشكووور, بل أكثر ما يزعجنا هو "مشكووور".

#12

هلا اخويhasan _aljudy

صراحة رد افجعني

لأنك فهمت قصدي خطأ <---- وين ماطقها عوجة :(

عموماً مشكور على الرد

هذا هو البرنامج

اتمنى يكون التفاعل اكثر و الكل يشارك بمعلوماتة و خبرتة ( ما راح اقول شكراً علشان ما حد يفهمها خطأ) :D

تحياتي Smart programmer

#13

السلام عليكم ورحمة الله وبركاته.

اقتباس
هذا هو البرنامج
؟؟ :unsure:

عمل PictureBox لكل صوره سيهلك الذاكره ! وأيضا اختيارك للحدث Mouse Down هو اختيار ليس صحيحا فالأفضل في برنامجك أن تستخدم Click.

اعمل PictureBox واحده فقط تكون ظاهره للمستخدم ... وعندما تريد تغير الصوره التي بها , نتيجة مثلا استجابه لحدث معين ... قم بتغيير الخاصيه Image التابعه للـ PictureBox ::

yourPictureBox.Image = Image.FromFile("C:\\yourPic.ext");

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

سيلزمك ذلك الى أن تعرف احداثيات الـ Mouse ( الـ X والـ Y ) ( الـ Cordinates ) حتى تعرف أين تماما الجزء الذي ضغط عليه المستخدم.

ونحن داخل الـ Event Handler الخاص بـ Click لن نعرف احداثيات الـ Mouse لأن الـ EventArgs يكون من نوع System.EventArgs ولذلك فهو لا يحتوي على أى معلومات حول الـ Mouse بعكس MouseEventArgs مثلا !

عموما يمكنك معرف ذلك من خلال الكلاس Cursor ... فيوجد به خاصيه static ( أى لا تحتاج لعمل Object منه ) اسمها Position ترجع اليك Point ( نقطه ) وهذه النقطه تكون تحتوي على الـ X و الـ Y الخاص للماوس.

يوجد مشكله أخرى ! الـ X والـ Y التي ترجها هذه الداله تكون على أساس الشاشه كلها وليست على أساس الـ Form بتاعتك ! .. ولذلك لا ينبغي عليك الاعتماد عليها طبعا الا ان كان برنامجك يكون دائما دائما دائما بحجم الشاشه كلها ولا يستطيع المستخدم تصغيره ! ( ومش هتبأه مظبوطه أوي برضه علشان حجم الـ Borders والـ ControlBox والخ ) ولذلك ينبغي عليك استخدام الداله الرائعه PointToClient فمرر اليها الـ Point التي تريدها التي هى على أساس حجم الشاشه .. وهى سترجع لك نقطه جديده بالاحداثيات ولكن على أساس الـ Form بتاعتك.

// using System.Drawing.Drawing2D;
Point mousePoint = PointToClient(Cursor.Position);

يوجد طرق أخرى طبعا .. منها مثلا تسجيل الـ X والـ Y من أحداث الـ Mouse المختلفه مثل Mouse Move أو الخ وهى تعطيك MouseEventArgs يمكنك معرفة الـ Mouse Postion من خلاله وتكون الاحداثيات على أساس الـ Control ( الـ PictureBox مثلا ) في هذه الحاله.

بالتوفيق وأنصحك بأن تقرأ أكثر في برمجة الـ Windows Applications قبل البدء في المشروع.

تم تعديل هذه المشاركة بواسطة معتز شمس في 4 نوفمبر 2005 في 06:38

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#14

هلا أخوي معتز شمس

أسعدني تفاعلك و ردك الجميل الذي أتمنى ان يكون في ميزان حسناتك

أنا سويت الي قلت عليه

أخترت pictureBox وحدة

خليت event = click

كتبت الكود لتغيير خاصيه الــImage داخل pictureBox_Click

بعدين سويت run يطلع الــ form بعد ما أضغط علية يطلع لي messageمكتوب فية

An unhandled exception of type 'System.IO.FileNotFoundException' occurred in system.drawing.dll

Additional information: C:\Riyadh.jpg

تحياتي

اتمنى يكون الرد سريع :)

تم تعديل هذه المشاركة بواسطة Smart programmer في 4 نوفمبر 2005 في 23:33

#15

تأكد أن عنوان الصوره التي وضعتها صحيحا.

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#16

السلام عليكم و رحمة الله و بركاتة

ضبط معاي البرنامج بحيث أن الــ user إذا ضغط على الصورة الاساسية تجي الصورة الثانية ( الي هي صورة الرياض)

بعدين حددت الأحداثيات الي تحدد أن الــuser ضغط على الرياض وهذا هو الكود

private void pictureBox1_Click(object sender, System.EventArgs e)
{               
         if (((Cursor.Position.X >= 184) && (Cursor.Position.X <= 248)) &&
            ((Cursor.Position.Y >= 120) && (Cursor.Position.Y <= 216)))
        pictureBox1.Image = Image.FromFile("C:\\Riyadh.jpg ");	
}

بس اذا ضغطت على منطقة الرياض ماتطلع الصورة الثانية

تطلع إذا ضغطت على منطقة بعيدة مع اني ماخذة الاحداثيات صحيحة؟؟؟

و عندي ســـــؤال ثاني

كيف أخلي الصورة الاساسية ترجع مرة ثانية إذا ضغط على الصورة الثانية ؟؟؟

أخوي معتز شمس أنا حاولت ارفق البرنامج و لكن هذا الي طلع لي

فشلت عملية إرفاق الملف , غير مصرح لك بإرفاق هذا النوع من الملفات :rolleyes:

و مشكور مرة ثانية على التفاعل :D

#17
اقتباس
تطلع إذا ضغطت على منطقة بعيدة مع اني ماخذة الاحداثيات صحيحة؟؟؟

يا أخي ... الـ Cursor.Position بترجع احداثيات مؤشر الماوس على أساس الشاشه كلها بحجمها الكامل مثلا اذا كان برنامجك في أقصى أسفل يمين الشاشه والمستخدم ضغط على الاحداثي 1,1 من الصوره فالـ X والـ Y يكونان مثلا 800,600 أو على حسب دقة عرض الشاشه لديك وعلى حسب موقع الـ Form .. أنا حذرتك من ذلك في مشاركتي السابقه :

اقتباس
الـ X والـ Y التي ترجها هذه الداله( آسف أقصد الخاصيه )  تكون على أساس الشاشه كلها وليست على أساس الـ Form بتاعتك ! .. ولذلك لا ينبغي عليك الاعتماد عليها طبعا الا ان كان برنامجك يكون دائما دائما دائما بحجم الشاشه كلها ولا يستطيع المستخدم تصغيره ! ( ومش هتبأه مظبوطه أوي برضه علشان حجم الـ Borders والـ ControlBox والخ ) ولذلك ينبغي عليك استخدام الداله الرائعه PointToClient فمرر اليها الـ Point التي تريدها التي هى على أساس حجم الشاشه .. وهى سترجع لك نقطه جديده بالاحداثيات ولكن على أساس الـ Form بتاعتك.

اذا كنت لا تريد أن تشغل بالك بذلك الكلام فقم بتسجيل الـ X والـ Y بتوع الماوس من داخل الحدث MouseMove الخاص بالـ PictureBox في متغيرات ... الـ Delegate اللي اتعرف بيه الحدث MouseMove يصف داله من احدى Parameters بتوعها أن تأخذ MouseEventArgs ... الـ MouseEventArgs يحتوي على الـ X والـ Y بتوع الماوس فيمكنك مثلا تخزينهم في متغيرات لديك ثم تختبر قيمهم في حدث الـ CLiCK.

أيضا احذر وانت تقوم باختبار الاحداثيات ... فالـ Position بتاع الماوس الذي سجلناه يعتمد على احداثيات الـ PictureBox كله وليس على احداثيات الصوره ! ولتجنب المخاطر اجعل دائما الـ PictureBox بنفس حجم الصوره التي بداخله وقم بتغيير حجمه برمجيا في كل مره تغير الصوره التي بداخله , أو اجعل صورك كلها و الـ PictureBox بحجم واحد.

بالنسبه لموضوع تغيير الصوره مره أخرى ( اظهار الصوره الكبيره الأصليه ) فيوجد طرق كثيره لذلك ... أضف مثلا أولا بعض الكلمات في الخاصيه Tag الخاصه بالـ PictureBox ثم قم باختبار تلك الكلمات ( أو أى حاجه انت حاطتها ) لتظهر الصوره على أساسها.

مثلا في أول البرنامج أجعله يكتب في الخاصيه Tag ... أى كلام تحدده وليكن "TheBigMap" ( بالطبع أنت تجعله يظهر الخريطه الكبيره أولا ) ::

yourPictureBox.Tag = "TheBigMap";

وفي الحدث Click تكتب ::

if(yourPictureBox.Tag =="TheBigMap")
{
// show riyadh map and make
yourPictureBox.Tag="riyadh";
}
else
{
//show the big map and make 
yourPictureBox.Tag = "TheBigMap";
}

لرفع الملفات الى المنتدى اجعلها ZIP أو RAR.

تم تعديل هذه المشاركة بواسطة معتز شمس في 5 نوفمبر 2005 في 11:44

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#18

هلا أخوي معتز شمس

هذا هو برنامجي

WindowsApplication.zip

اقتباس
مثلا في أول البرنامج أجعله يكتب في الخاصيه Tag ... أى كلام تحدده وليكن "TheBigMap" ( بالطبع أنت تجعله يظهر الخريطه الكبيره أولا )

وين تقصد بالضبط؟؟؟

لأني حطيتها في الـ main طلع لي error

An object reference is required for the nonstatic field, method, or property 'WindowsApplication.Form1.pictureBox1'

و بعدين غيرت

حطيت Tag = "TheBigMap من الـproperties

";

و طبعاً condition مكتوب في الحدث click

وسويت run بس ما صار شي

و شيء ثاني لو سمحت بالنسبة لدالة PointToClient صراحة مو عارفة كيف اتعامل معها

ممكن تشرح مع امثلة لأني مرة ضايعة

و آسفة على الأزعاج

#19
اقتباس
هذا هو برنامجي
البرنامج لا يحتوي الا على ملف الـ Solution , فيوجد به ملف WindowsApplication.sln فقط وهذا الملف يكون خاص بالـ Visual Studio ولا يحتوي على الـ Source Code.
اقتباس
وين تقصد بالضبط؟؟؟

لأني حطيتها في الـ main طلع لي error

An object reference is required for the nonstatic field, method, or property 'WindowsApplication.Form1.pictureBox1'

الـ Main تكون دائما static ولذلك لا يمكن استدعاء أعضاء ليست static بداخلها وهذا سبب المشكله ... اكتب الكود في الـ Constructor.

أو من نافذة الـ Properties اكتب كلمة TheBigMap وليس ;"Tag="TheBigMap

اقتباس
و شيء ثاني لو سمحت بالنسبة لدالة PointToClient صراحة مو عارفة كيف اتعامل معها

ممكن تشرح مع امثلة لأني مرة ضايعة

اذا كنتي لا تريدين استخدامها فاستخدمي الطريقه الأخرى التي أخبرتك بها ( طريقة تسجيل الـ X والـ Y من حدث الـ MouseMove الخاص بالـ PictureBox ).

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#20

السلام عليكم

آخر محاولة لرفع البرنامج :D

WindowsApplication.zip

عرفت كيف أصغر الــform بحجم الصورة الثانية

ClientSize = new System.Drawing.Size(77, 74);

عندي طلب :--

ممكن تكتب الكود للMouse Move لأني حاولت فيها بس ……

private void pictureBox1_MouseMov
(objectsenderSystem.Windows.Forms.MouseEventArgs e), 
{
               ؟؟؟  
}

تحيـــــ Smart programming ــــــاتي B)

WindowsApplication.zip

WindowsApplication.zip

WindowsApplication.zip

#21

صراحة ما عرفت أرفق البرنـــامج :(

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

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

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

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

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

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