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

تحليل لمشروع برنامج الرسم البسيط

مغلقرائج
بدأه Developer .NET في 29 يناير 2003 · 78 رد · 16,152 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

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

الجميع مرحب به في المشاركة، سواء عملية تطوير (كتابة كود و تصميم) او رسم ايقونات او كتابة مستندات مساعده او حتى اختبار له عند الانتهاء منه.

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

أولا: التحليل

التحليل هو المرحلة التي يتم فيه تحديد متطلبات و وظائف البرنامج، و تكون نتيجته تقرير نقرير نستد عليه في مرحلة التصميم. هذا التقرير لا يحتوي على اية تفاصيل فنية (برمجية) بل يكون نص ستطيع قرأئته و فهمه اي شخص، بمعني اخر يجب ان يستطيع اي مستخدم للكمبيوتر End User قرائته و فهمه.

الوظائف:

البرنامج بالتأكيد سيحتوي على وظائف رئيسية، مثل:

1- فتح ملف.

2- حفظ ملف.

3- مطالعة الصورة قبل الطباعة و طباعتها.

4- نسخ .

5- لصق.

6- قص .

إي وظائف اخرى تود إظافتها ..... فهي محل الترحيب.

التعامل مع الملفات:

سيكون امتداد الملفات التي يكتبها البرنامج atd من كلمة "Arab team drawing Program" من لديه اقتراح افضل فليتفضل، هذه الملف سيحتوي على البيانات التي تسمح للمستخدم إرجاع منطقة العمل للمشروع الذي كان يعمل معه، بالتأكيد هذا الملف سيكون ضخم بحيث انه يسحفظ جميع البيانات الخاصة بمشروعه. بالطبع في نهاية المطاف سيحتاج المستخدم تحويل عمله إلى أحد تركيبات الصور المعروفة كال gif, jpeg, png، و يوجب توفير الوظيفة التي تمكنة من القيام بهذا التحويل. على اية حال دعم جميع هذه التركيبات يتطلب الكثير من الجهد، على الرغم من توفر الكثير من المكتبات المجانية المفتوحة المصدر التي تمكنك من إجراء تحويل تركيب الصورة من تركيبة إلى أخرى، اقتراحي الشخصي ان نقوم بدعم صيغة ال png فقط في البرنامج. و ندع التركيبات الأخرى في نسخ مستقبلية لتسهيل المشروع، و الأخيار لكم في النهاية.

لوحة الأدوات :

لوحة الأدوات هي اللوحة التي سيستخدمها المستخدم لأختيار الأداة التي سيرسم بها على لوحة الرسم، القائمة التالية تعرض الأدوات التي ممكن أن نوفرها و خواص كل اداة:

1- أداة اختيار Selection Tool: هذه الأداة تستخدم لتحديد جزء معين من لوحة الرسم لكي تنفيذ جميع العمليات عليه مثل النسخ و القص و تعبئة اللون و المسح .... الخ، و عزل اي جزء خارجة.

هذه الأداة ممكن ان توفر الكثير المرونة للمستخدم، بحيث تعطيه الأمكانية برسم جزء على شكل مستطيل أو دائرة أو حتى تركيبة منهم.

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

2- بخاخ لون AirBrush: عمل هذه الأداة هي بخ لون على شكل فرشة.

3- فرشاة Brush.

4- قلم Pencil.

5- مستطيل Rectangle.

6- شكل بيضاوي و دائري Ellipse & Circle.

7- مساحة Eraser

8- منحنى Curve .

9- خط مستقيم Line.

10- متعدد الأضلاع Polygon .

11- Rounded Rectangle .

12- Pick Color.

13- أداة التعبئة Filler Tool.

14- كتابة نص Text.

15- Zoom Tool: يتوفر هذه الأداة الإمكانية للمستخدم تكبير نقطة الرؤية للوحة الرسم Canvs بحيث يستطيع ان يتعامل مع لوحة الرسم بأكثر دقة.

لوحة عرض الأوان:

في هذه اللوحة سيتم عرض الأوان التي يستطيع المستخدم اختيارها للتحديد اللون التي سيتم الرسم به، في هذه اللوحة سيتم تحديد لون جزئين:

1- لون القلم (لون الحدود) التي سيتم رسم الشكل به.

2- لون التعبئة: اللون الذي سيتم تعبئة الجزئ الداخلي للشكل الهندسي.

طريقة عرض لوحة الرسمCanvs:

1- توفير شبكة Grid.

2- توفير مسطرة Ruler.

نظرية الطباقات Layers:

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

في النهاية أود ان اقول ان كل من الوظائف و الامكانيات التي ذكرتها هي فقط لنتناقش حولها، و دعمها أو عدم دعمها في البرنامج تعتمد على اراء الفريق الذي سيشارك في التطوير، حيث سيتم البت فيها عند إنتهائنا من النقاش و كتابة التحليل النهائي.

تحياتي .....

#2

بسم الله الرحمن الرحيم

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

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

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

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

2_ من المعروف انه يمكنك في برامج الرسم ادراج صور صممت من قبل ولكن لدي وجهة نظر اخرى وهي انه في برامج الرسم يتم ادراج الصور بدون حساب حيث انك تدرج الصورة في منطقة العمل ثم تدرج اخرى واخرى وهكذا حتى تمتلئ منطقة العمل بالصور ثم إذا اردت إدراج صورة قد ادرجتها من قبل فإنك تضطر لإدراجها عن طريق القوائم مرة اخرى والأقتراح هنا أن نقوم بعمل مربع حواري مثلاً نسمية Image Library على سبيل المثال ويحتوي على ListBoxوظيفته هي حفظ الصور .

فعند إدراج صورة معينة يتم تلقائياً إضافة إسمها إلى ListBox وفي حالة اراد المستخدم ان يدرج صورة ادرجها من قبل فلن يضطر للذهاب إلى القوائم وانما من مكتبة الصور يختار الصورة التي يريدها حيث يتم وضع اداة Picture تحت ListBox وظيفتها عرض الصورة المختارة من ListBox ويتم ادراج الصورة المختارة عن طريق الضغط على مفتاح Enter أو عن طريق DBClickأو عن طريق Drag and Drop إلى مساحة العمل.

3_ وضع جزء في البرنامج ينشئ ملفات فيديو بإمتداد avi حيث يتم إدخال مجموعة من الصور بترتيب معين وعن طريق مصفوفة يتم ترتيبها وعرضها بالسرعة المطلوبة لتصبح وكأنها فليم حقيقي للناظر ويمكن تحويلها إلى امتداد gif ايضاً ليتم استخدامها في الإنترنت ووضعها بالتحديد في موقع الفريق العربي للبرمجة .

4_ امكانية تحويل بيئة العمل إلى صفحة إنترنت فتصبح في الصفحة صورة فقط وعن طريق FrontPage مثلاً يتم وضع الإرتباطات التشعبية.

5_ الإهتمام بـ Interface تبع البرنامج فمثلاً إنظر إلى واجهة برامج WindowsXP

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

6_ إنشاء مكتبة قوالب من الصور الجاهزة .

7_ إنشاء قوالب معينة من الخطوط والأشكال فعلى سبيل المثال يقوم المستخدم بإختيار قالب معين ويدخل نص معين فيتحول النص الذي ادخله المستخدم الى نفس شكل القالب الذي اختاره

8_ عرض الصور على شكل FullScreen

9_ عمل Invert للصور وتغيير لونها إلى اللون الأسود والأبيض

10_ وضع خيار في البرنامج كالموجود في برنامج الرسام وهو أن يجعل الصورة الموجودة في منطقة العمل كخلفية للشاشة

سأتابع لك الباقي قريباً والأن إلى اللقاء..

وهذا بريدي : eid200@saudint.comوصدقني انا متحمسسسسس للموضوع:mad::mad::mad::D:p:p:p

وشكراً

أخوك عبدالله عيد المحمادي

#3

بسم الله الرحمن الرحيم

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

ها أنا قد عدت مرة اخرى واليك الإقتراحات :

1_ عمل منتدى خاص في الفريق العربي للبرمجة ليمثل مايلي :

1_ يمثل الدعم الفني للبرنامج

2_ يوضح بعض امور اللبس الحاصلة في البرنامج

3_ يتم طرح اراء جديدة عن البرنامج واصدار نسخ جديدة

4_ يتم شرح عمل ملفات def التي افترضتها في الأعلى وكيفية برمجتها

ليستطيع المبرمجين تطوير البرنامج تلقائياً

2_ وضع اسم خاص للبرنامج بإتفاق الفريق عليه

3_ وضع شعار معين للبرنامج يتم الإتفاق عليه وذلك بعرض عدة تصاميم ودمجها

وغيره إلى أن يتم الوصول إلى الشعار المطلوب

4_ أما من الناحية العملية للبرنامج فلا يكاد برنامج يخلو من عملية قلب الصورة افقياً وعمودياً وهذا اقتراح ولكم الرأي

5_ صنع برنامج مؤقت لجدولة المهام أو استخدام برنامج Project من Microsoft

6_ استخدام برنامج Visio من Microsoft ليساعد في عملية التصميم.

7_ عرض المدة الزمنية التي سيتم فيها الإنتهاء من البرنامج وذلك طبعاً بعد تحديد المهام لكل عضو في الفريق ليتم إنجازه بالسرعة المطلوبة.

8_ عرض اسطوانة Orginal للبرنامج في الموقع مع عرض شكلها ومميزاتها وذلك للبيع(ليس لأعضاء الفريق العربي للبرمجة) ويتم الإستفادة من الدخل المادي في تطوير موقع الفريق العربي للبرمجة.

9_ تكلفة اشخاص معينين ليقوموا بنشر دعاية عن البرنامج في المواقع ومحركات البحث

10_ امكانية العرض السريع لمجموعة من الصور داخل البرنامج وذلك عن طريق Thumbnails اي عرضها كمصغرات ويمكنها اختيار اي صورة ومن ثم يتم تكبير الصورة التي اختارها مع وضع ToolBar مثلاً يتحوي على زر واحد فقط وعمله هو العودة من نمط التكبير إلى نمط المصغرات Thumbnails

سأتيكم قريباً إن شاء الله تعالى ترى لدي المزيد ها .. ترى لاأجي وما ألقى احد ترى بعدين ازعل ......... سلام

ولكم تحياتي وخالص شكري

اخوكم عبدالله المحمادي

#4

بسم الله الرحمن الرحيم

لحظة قبل ان ذهب

لقد تذكرت أن لدي برنامج معمول بالفيجوال سي++ مع Source Code تبعه

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

وترى لسى ماغلقت ... أنا جاي .... سلام

تحياتي وتقدير

اخوك عبدالله المحمادي

#5

السلام عليكم

فكرة رهيبه ......... اتمنى اني اكون مشاركه في كتابة الكود

#6

الف مبروك على الابتداء... لطالما انتظرت هذه البداية...

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

بإختصار أقترح ان تكون العمليّة تدريجية, لكي لا يضيع العمل أدراج الريح...

#7

بسم الله الرحمن الرحيم

أنا مع أستاذي العزيز إسماعيل إبراهيم فيما يقوله عن سهولة البرنامج وعن هدفه وهو هدف رائع (التعلم) ولكن طرحت هذه الأراء لأني قرأت أنها ستكون كمسودة سيتم حفظها والرجوع إليها في مراحل تصميم معينة من البرنامج وقبل أن تضيع الأفكار وددت أن أطرح ماعندي منها لكي يتم الإحتفاظ بها في تطوير إصدارات متقدمة من البرنامج كما تفضل إستاذي العزيز إسماعيل إبراهيم .. وهذا هو هدفي .. وأريد أن أطرح المزيد من الأفكار وإليكم منها :

1_ إعطاء المستخدم مربع حوار عند اختياره (جديد) ويمثل هذا المربع مثلاً ما يلي :

1_ لون خلفية مساحة العمل

2_ العرض والإرتفاع بمقاسات معينة مثل (Cm,Pixel,Inches... ) وغيرها

3_ تحديد نمط الرسم مثل (ملون , أسود وأبيض فقط)

4_ يتم وضع مربع صغير يعرض فيه اللون المختار وبالنقر عليه يظهر الـ Palette

2_ عمل مربع حواري خاص بالخطوط وليس CFontDialog مثلاً بل يتم تطويره بشكل جميل جداً.

3_ وضع خاصية تغير من إضاءة الصورة من جوانب معينة.

4_ وضع مجموعة من الصور كـ (Group ) واحد أي دمج ثلاث صور مثلاً لتصبح تركيبة واحدة يتم التعامل معها وكأنها صورة واحدة.

5_ وضع أمتداد معين في البرنامج وليكن مثلاُ (fsn) اختصار لـ (Full Screen)

ويتم حفظ الصور بهذا النمط الذي سيقوم بتشغيل الصورة عند النقر عليه بشكل كامل الشاشة دون الدخول للبرنامج. كـ (Power Point) مثلاً.

6_يتم معالجة كل اداة في صندوق الأدوات بمربع خاص بها كما هو موجود ومشهور في برامج الرسم الحالية فمثلاً عند النقر على اداة الكتابة لكتابة نص في منطقة العمل يظهر مربع حواري صغير يحتوي على خصائص الخط مثلاً ولون النص الذي سيظهر وعرضه وارتفاعه وميلانه وغيرها..

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

7_ وضع طريقة في البرنامج لعرض مجموعة صور موجودة في ملف بشكل متتالي عن طريق زر Next و previous مثلاً كالموجودة في برنامج ACDSee

8_ يتميز برنامج CorleDraw بأنه يحول بعض الصور إلى امتدادات pdf فما رأيكم في هذه الخطوة الرائئئئئئئئئئئئئئئئئئعة (والله ياشباب تراني متحمس للبرنامج)

وتكفون لا أحد يتراجع عن هذه الفكرة لأني سوف انفجر لو تراجعتم. :mad::mad::mad::mad::mad:

9_ وضع صفات في البرنامج تتعامل مع برنامج التصميم الشهير Flash واعتماد بعض امتدادته.

10_ لقد رأيت في أحد البرامج وهو عبارة عن برنامج بسيط يتكون من مربع حوار واحد فقط وصغير وظيفة هذا البرنامج هي مايلي :

1_ يقوم البرنامج بإعطائك زر Brows..

2_ عند الضغط عليه يقوم بالإستعرض عن الصور ذات الإمتداد bmp

3_ بعد جلب الصورة يتاح زر اسمه Convert وعند الضغط عليه يقوم بتحويل الصورة إلى امتداد exe وعند تشغيله يتم عرض الصورة بشكل مكبر مع عرض دعاية للبرنامج في اسفل الصورة فما رأيكم.

هذا مالدي الأن ...... وادري اني صرت ثقيل دم:mad: ولدي الكثير من الأفكار ولكن من قال لكم تخبروني عن الفكرة فتحملوا اقتراحاتي عاد(اهي:D .. اهي:D) .... وترى جااااااااااااااااي.. لسى في الخير بإذن الله تعالى .... وسلام

اخوكم عبدالله المحمادي

#8

فكره جميله وأنا مع أخي إسماعيل ... لكن أنا اتوقع سيشترك في الكود العدد القليل من المنتدى !:confused:

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

نعم نعم لا تتراجعون

==============

على فكره أنا لم اقرى الموضوع كاملاً

وشكراً

If you think yourself that you are nobody, you should go somewhere to find yourself

#9

راي من رأي اسماعيل .... المشروع هذا من أجل التعلم، لذلك نريد ان نجعله بسيط قدر المستطاع، أعتقد التحليل الذي وضعته يحتوي على الخواص الأساسية للبرنامج ( من لديه ملاحظة على التحليل فليتفضل) ....

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

بالنسبه لي سأحاول ان امسك نظرية الطبقات، سأتكلم في موضوعي القادم عن جميع النقاط و الخصائص و المميزات المتعلقة بها، اتمنى من كل شخص يريد المشاركة في البرنامج ان يختار احد النقاط ليتحدث عنها ,,

اتمنى ان اجد منكم التفاعل في المشروع كما هو و اضح منكم الان ...

#10

بسم الله الرحمن الرحيم

هذا اللي كنا خايفين منه

سلام

اخوكم عبدالله المحمادي

#12

ايش هو اللي انت خايف منه EIDX00 ؟

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

نبي نكتب تقرير كامل عن المشروع، علشان تتضح الرؤية لدى جميع الأعضاء اللي يريدون المشاركة حول البرنامج و إمكانياته ....

#13

بسم الله الرحمن الرحيم

استاذي العزيز Developer.Net تحية طيبة

استاذي العزيز لدي وجهة نظر وارجوا ان تتقبلها مني وانا اتقبل النقد بكل صدر رحب وهي:

استاذي العزيز ان الهدف من وراء هذا البرنامج هو التعلم أليس كذلك ؟؟؟

وكلنا متفقين نحو هذا المبدأ إذا هذا شئ جميل للغاية .

ولكن ما ألاحظه في البرامج العربية هي انها تقتصر على الأشياء السهلة للغاية فأنا بنفسي وضعت بعض المقترحات التي لا أعرف إلى الأن كيف تبرمج

ولكن وضعتها كتحدي مع نفسي فمثلاً لو وكل إلي عمل لا أعرفه أنا فستجد أني أحاول وأحاول حتى اصل الى الحل المطلوب ولا أظن أحد يعارضني في هذه النقطة .

وخلاصة كلامي هناك حكمة تقول ( الحاجة أم الإختراع )

فإذا وكلت جزء من البرنامج وليكن جزء متقدم إلى مبرمج مبتدئ (مثلي) فمذا عساه أن يفعل ؟

ببساطة سيجد أنه قد تورط ولابد أن ينجز العمل الذي وكل إليه في الوقت المطلوب فستجده يبحث في الإنترنت والكتب والمراجع ويسأل هنا وهناك ويطرح الأراء والأفكار حتى يصل الى الحل وهذا هو التعلم ؟

ولكن مافائدة التكرار ؟

حيث أنكم انتم وبالتأكيد قرأتم الكثير من الكتب العربية وتركتموها من غير ان يجبركم احد عليها فلماذا ؟

السبب واضع لكثرة التكرار والتطرق إلى مواضيع بدائية مثل MessageBox

وغيرها والتي تملأ الكتب العربية حالياً وانت استاذي العزيز Developer.Net أظن أنك أعلم مني بذلك .

وما أود التنويه إليه أني قرأت التحليل ولاأجمالك في كان تحليلاً رائعاً ومفيداً ولكن أنا أقصد من كل هذا الكلام أن نأتي بشئ جديد ويفيد في التعلم في نفس الوقت (وأقصد بالتعلم أي تعلم اشياء جديدة )

ولك خالص شكري استاذي Developer.Net

وما طرحته هنا الا مجرد رأي وأنا كما قلت لكم اتحمل النقد بكل صراحة فأنا أتيت هنا لكي أتعلم وأفيد وأستفيد فإن وجدتم خطأ في كلامي فصححوه لي وأعطوني الأسباب لأني أحب ان اتعلم من أخطأي لكي لاأقع فيها مرة اخرى

اخوكم عبدالله المحمادي

#14

بسم الله الرحمن الرحيم

رسم الخطوط

1 – معالجة حدث نقر الزر الأيسر للفأرة على نافذة الرسم .

2 – معالجة حدث تحرك الفأرة على نافذة الرسم .

3 – معالجة حدث إزالة النقر للزر الأيسر .

4 – تخزين الخطوط .

التفاصيل :

1 – معالجة حدث نقر الزر الأيسر للفأرة على نافذة الرسم .

• نخزن النقطة التي تم الضغط عندها لأول مرة في متحول .

• إعلام البرنامج أنه تمّ ضغط الزر الأيسر على نافذة الرسم , وذلك بإعطاء متحول بولياني القيمة TRUE .

• المحافظة على مؤشر الفأرة ضمن نافذة الرسم( أي كي لا يخرج المؤشر إلى خارج حدود نافذة الرسم ونحن نرسم الخط ) .

2 – معالجة حدث تحرك الفأرة على نافذة الرسم .

• التأكد أن الزر الأيسر ضُغِط ومازال مضغوطاً على نافذة الرسم .

• رسم خط من نقطة الضغط الأولى إلى النقطة التي تسبق النقطة التي نحن فيها حالياً .

• رسم خط من نقطة الضغط الأولى إلى النقطة الحالية .

• تخزين النقطة الحالية لتصبح نقطة سابقة .

3 – معالجة حدث إزالة النقر للزر الأيسر .

• التأكد أن الزر الأيسر كان مضغوطاً ضمن نافذة الرسم .

• تحرير مؤشر الفأرة .

• رسم خط من نقطة الضغط الأولى إلى النقطة السابقة .

• رسم خط من نقطة الضغط الأولى إلى النقطة العالية .

• تخزين الخط .

4 – تخزين الخطوط .

• أقترح استعمال struct يحوي ثلاثة متحولات (CPoint m_point1,CPoint m_point2, int m_totlLine) , من أجل تخزين إحداثيات الخط والعدد الكلي للخطوط , وذلك بأن نعرف مصفوفة ديناميكية من نوع الـ struct بحيث يمثل كل عنصر من عناصر المصفوفة خط .

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

#15

بسم الله الرحمن الرحيم

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

اخواني الأعزاء تحية طيبة

أنا سأخذ كتابة النص وكيفية وضعه على منطقة العمل وسأتكفل بالمربع الحواري الذي يحتوي خصائص الخط من

1_ خط النص

2_حجم النص

3_لون النص

4_عرضه

5_ميلانه

6_وضع خط أسفله ام لا

وغيرها من خصائص الخط

والفكرة :

هي الإستعانة برسم مربع وهمي على منطقة العمل بالفأرة وبعد رفع الضغط عن الزر يظهر المربع الحواري حيث يحتوي على :

1_ مربع نص للكتابة فيه

2_ خصائص النص (منها ما ذكر في الأعلى)

3_ويحتوي على زر موافق لتثبيت الإعدادات التي اختارها

4_زر إلغاء الأمر لإلغاء العملية.

وهناك الكثير يدور في ذهني حول مربع حوار النص وسأضعها في وقتها بإذن الله تعالى .

وشكراً

اخوكم عبدالله عيد المحمادي

#16

لو مشينا في المشروع ... و انتهينا منه ....

صدقني يا EIDX اننا سنحاول ان نطوره .... و نضع مميزات متقدمة ...

لكن فلنحاول فقط أن ننتهي من هذا البرنامج البسيط، و إذا نجحنا فيه، ممكن ان ننشى قسم خاص لتطويره،

أكبر تحدي في هذا المشروع هو ان يكون العمل جماعي، و لهذا السبب رغبت ان نقوم بإنشاء تحليل كامل عن المشروع نقوم به سويا لكي تتكون لنا صورة و واضحة عن إمكانيات البرنامج .... لنبدأ بتصميمه .

بمعنى اخر، اللميزات الذي ذكرتها في ردودك السابقة ممكن ان نرجع عليها عن الإنتهاء من اساسيات البرنامج.

أخ اسماعيل ... ما وضعته كان خوارزمية و ليس تحليل لخواص المستقيمات، خواص رسم المستقيمات ممكن ان تكون عرض المستقيم، لون المستقيم، كذلك تحديد style للمستقيم، و المميزات التي ممكن ان نضيفها هي انه يمكن للمستخدم الضغط على زر ال shift مثلا .... لكي يكون مقدار تغير زاوية المستقيم ثابت، انظر لكيفية رسم المستقيم في photoshop عن ضغطت على زر shift ..... ما أعرف إذا كان شرحي واضح و إلا لا، لكن اتمنى ان تكون المعلومة وصلت .

بالنسبه لتحليل رسم النصوص (EDIX): ممكن نضيف مقدار تباعد الحروف عن بعضها البعض (بالمناسبة، هذه من مميزات خطوط البروتوتايب).

اما بالنسبه لظهور مربع لكتابة النص، فالفكرة جيدة، و لكن ما رايك بان تكون الكتابة تفاعلية interactive، اي ان يكتب المستخدم على لوحة الرسم Canvs مباشرة .... الميزة سوف تصعب implementation، ولكنها ميزة جيدة تستحق العناء ... إلا توافقوني الرأي ؟

عمل جميل منكم يا شباب .... well done !!!

احس ان اكثركم متحمس بكتابة الخوازميات، ولكن هذه راح تكون الخطوة الثانية ...

اسماعيل إبراهيم اي نقطة راح تحللها ;)

#17

بسم الله الرحمن الرحيم

استاذي العزيز ان الكتابة على WorkArea مباشرة لها سلبيات منها

* التأخر في عمل التنسيق فلو كتب النص على منطقة العمل فإنه يحتاج لتحديده ثم الذهاب إلى اللوحة الخاصة بتنسيق النصوص وتنسيقه وهذا يضيع من الوقت ولكن إذا كان العمل كله يجري في منقة معينة من كتابة وتنسيق وتكبير وغيرها فهذا افضل واوفر للوقت

واستاذي العزيز ان اغلب البرامج الكبيرة مثل photoshop و micormedi firework

تتبع هذه الطريقة وهي اوفر للوقت والجهد كما قلت

وإليك صورة تحتوي على مثال لمربع النص الذي يدور في بالي وهي عبارة عن صور مأخوذة من برنامج micormedia firework 3 وفي الصورة يوجد المربع الوهمي باللون الأزرق الذي تم وضعه بإستخدام اداة النص على ورقة العمل فظهر مربع خيارات وتنسيق وكتابة النص بعد رفع الماوس وانا احترم رأيك

تحياتي اخوك عبدالله المحمادي

وإليك الملف المرفق :

firework.zip

#18

اعذروني... فقد أنشغلت قليلا.. وربما انشغل هذه الايام... لكن من الان , وقبل أن يختار أحد غيري أنا أختار آداة المربّع, والدائرة (وهي تعمل على نفس المبدأ)..

1) يرسَم الشكل باللون المختار كلون الفرونت, أما التعبئة فتكون بلون المُختار كخلفيّة.. أي أننا سنبني CPen و CBrush بناء على اللون الذي اختاره المستخدم في لوحة الالوان...

2) أثناء الجر يتم رسم مربّع وهمي, وعند تحرير الماوس,يُرسم الشكل النهائي..

3) يتم حفظ النقطتين (النقطة العليا اليسرى, والسفلى اليمنى), في مصفوفة نقاط, لإعادة الرسم في حالة WM_PAINT أو عند حفظ أو فتح الملف.

4) اذا كان shift مضغوظا, فإننا سنعتمد على احدى الاحداثيات (x) للرسم, وبالتالي سينتج مربّع , وليس مستطيل...

.(Rectangle(first.x,first.y,last.x,last.x
#19

اسماعيل .... نحن نتكلم عن تحليل و ليس خوارزميات

حاول انت تصف طريقة عمل إداة الدائرة و المربع من حيث نظرة المستخدم لها، و ليس من الناحية البرمجية .

كلامك جميل اخ عبدالله، ولكن ممكن ان نجعل خواص تغيير الخطوط في Toolbar يظهر عند اختيار أداة النص، بهذه الطريقة لن يحتاج المستخدم إلى الذهاب إلى نافذة اخرى و تغيير الخواص ثم العودة مرة اخرى للنص،

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

على اية حال اتمنى ان أراى الشباب في الفكرتين، لكي نتفق على وحدة ..

#20

بسم الله الرحمن الرحيم

استاذي العزيز Developer.Net السلام عليكم ورحمة الله وبركاته

هناك حكمة تقول (إختلاف في الرأي لا يفسد للود قضية )

فأنا معك في كل الكلام الذي قلته ولكن أنا لاأحب التقليد فمثلاً الصورة التي ارفقتها لك هي عبارة عن مثال لما يدور في ذهني ولكن لن أقلد هذا العمل بنفس الشكل في الصورة بل سأحاول أن أقوم بتطويره بشكل أفضل كأن يحتوي في الجزء السفلي من الـDialog على Palette نظام (لوحة الألوان) بدلاً من استخدام CColorDialog والتي مللنا منها وهذا فكرة واحدة من الأفكار التي سأظيفها على نفس مربع الحوار وبذلك تكثر الأفكار ويكون شئ جميل إذا حصرنا هذه الأفكار في مربع حوار واحد وانتظر مني الأفكار القادمة بإذن الله أما وجهة نظرك بأن نضع الأدوات على ToolBar فأنا أحترم رأيك وهو رأي جميل ولكن المشكلة لاتزال كما هي وهي الوقت والجهد وسأوضح لك :

على سبيل لو وضعنا الأدوات على ToolBar فإنظر مالذي يحدث

أولاً : يجب عليك بعد رفع الماوس مثلاً أن تتحول المنطقة التي حددتها بالمربع الوهمي إلى EditBox افتراضية الشكل (وهذه تحتاج لشيفرة)

ثانياً يظهر مربع الأدوات ToolBar والذي يحتوي على ادوات التنسيق المطلوبة

(وهذه تحتاج لشيفرة)

ثالثاً بعد انتهاء الكتابة وضغط المستخدم على مفتاح Esc مثلاً ليخبر البرنامج أنه أنهى الكتابة ووضع النص الذي يريده فيجب أن يختفي الـEditBox الإفتراضي

ويعاد رسم المنطقة (وهذه تحتاج لشيفرة)

رابعاً بعد خروج التحديد من منطقة كتابة الخط (المربع الوهمي أو EditBox الوهمي) فيجب مثلاً ان تخفي الـToolBar تبع التنسيق أو تعطل ازراره واذا حددت النص مرة اخرى فإنه يضطر لتمكين ازرارToolBar وجعلها تعمل (وهذه تحتاج إلى شيفرة) وانظر استاذي العزيز كما من الشيفرة ستكتب ولن تكون الشيفرة في ملف واحد بل ستضطر لتجزئتها على عدة Class فمثلاً ToolBar في كلاس مفرد ويجب ان توجد متغيرات مثلاً في الفئة الموجود بها ToolBar وربطها مع فئة العرض View والكثير الكثير من تباعد للشيفرة

وأنا من ناحيتي سأتبع الطريقة التي تأمرني بها وليس لدي مشاكل بإذن الله بل سأتعلم وأستفيد ايضاً ولكن وضعت هذه السلبيات لأنكم قلتم يجب أن يكون البرنامج سهل للمتعلم فمن وجهة نظري فإن مربع الحوار والمنطقة الوهمية تكون أفضل للمتعلم لأن الشيفرة أولاً ستكون محصورة في ملف خاص بـDialog

ثم عن طريقها تنقل البيانات المثيلة إلى فئة العرض وهذه اسهل طريقة بالنسبة للمتعلم

وأنا اثق فيك استاذي Developer.Net في أنك ستختار الطريقة الأمثل فأنا لست الا مبرمجاً عادياً ومبتدئاً وتلميذ لك وأنا في خدمتك فأنظر الطريقة التي تفضلها وأنا معك فيها وسنتعلم منكم بإذن الله تعالىأخوك عبدالله عيد المحماي

#21
اقتباس
Eidx

وأنا من ناحيتي سأتبع الطريقة التي تأمرني بها وليس لدي مشاكل بإذن الله بل سأتعلم وأستفيد ايضاً  

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

اما بالنسبه لموضوع الألية التي تعمل بها، ففكرة ال Toolbar ففكرة جميلة جدا، و لا يهم درجة صعوبة كتابتها بقدر ما هو مهم تسهيل العملية على المستخدم النهائي للبرنامج، و اعتقد انك توافقني الرأي ....

الفكرة اللي تدور برأسي هي ان يتم توفير Toolbar لجميع الأدوات، بحيث عند اختيار اي من الأدوات سوف يتم بشكل اتوماتيكي إخفاء ال Toolbar للأداة المختارة سابقا و وضع ال Toolbar الخاص بالأداة المختارة، هذا ال Toolbar سيحوي جميع الخصائص الخاصة بالأداة، مما يسهل عملية الوصول إلى الخيارات الخاصة بالأداة بشكل سريع و مريح للمستخدم.

الفكرة هذه بالمناسبة هي الطريقة التي يستخدمها photoshop 7، و استخدمنا لها ليس تقليد، الفكرة جيده فقط و مريحة للمستخدم، و على اية حال الفكرة قامت بها مايكروسفت في البداية و لحقت بها الشركات الأخرى.

بالنسبة لموضوع ال Editbox فنحن لن نستخدمه، أو بالاحرى نحن لا نعرف ما إذا كنا سنستخدمه أو لا ، الافضل ان نبتعد عن قضايا ال implementation قدر المستطاع، ممكن نقوم بإستخدامه و ممكن لا، أو ممكن ان نصمم اداة خاصة بنا تمكن المستخدم من الكتابه فيها، بمعنى اخر المهم هو توفير الإمكانيات التي يتوقعها المستخدم من برنامج رسم بسيط في بيئة سهلة الإستخدام و مريحة و جميلة ( و متميزة بالتأكيد ;) ) و قضية كتابة الكود و معالجة صعوبة تصميم الطريقة التي سنختارها سوف نفصل فيه عندما نبدا في مرحلة التصميم، و صدقني لا يوجد شيء صعب حتى الان :) .

انت ما تدري مدى سعادتي بمناقشتك حول الموضوع .... بالفعل هكذا يكون العمل الجماعي ...

النقاش هذا هو ما ابحث عنه في المنتديات العربية

#22

جميل .. جدا .. :D ماشفت الموضوع إلا وهو مدروس ... شو نسيتوني :mad::mad: بسيطة ;)

أخ Eidx00 ... رائع جدا .. وكل ماذكرته سوف يتم تطبيقه .. :D ... لكن بالنسبة لنقطة ال Plugin .. فيفضل استخدام تقنية ال COM ... حيث يتم بنائ ملفات DLL وليس كماذكرت ... وكل ماعليك هو برمجة Interface معين ليقوم بالوظيفة .. وبرمجة ال Dialog إذا أردت .. وهكذا أسهل ، ونتيح باب للشباب من أجل تعلم تقنية ال COM ...

لدي اقتراح هو تخزين ملف الرسم بملف نصي على هيئة XML .. وأيضا تصميم classes في كل شئ واستخدام ال iostream و ال stl بالتخزين ..

أراكم ياشباب دخلتو بكود البرمجة :D .. وهذا أخطر شي في هيك مشاريع .. يجب أولا تصميم جميع ال Components وال Classes التي في المشروع ..

ببساطة مثلا .. يوجد لدينا كلاس نقطة ، تحتوي على كود خاص من أجل ال serialization تكون في العادة >> و << overloading .. وكلاس مستقيم يحتوي على نقطتين .. وأيضا كود خاص من أجل ال serialize .. ببساطة يقوم بعملية ال serialize للنقطتنين ..

بالنسبة للتخزين مثلا يتم تخيزن النقطة ك :

3
5

والمستقيم يخزن ك:

3
5


30
50

توجد Component خاصة بوندوز من أجل التحكم بملفات ال XML ويمكن أيضا الاستغناء عنها لأن ملفاتنا الXML تكون بسيطة جدا ..

على أمل أن الكل هنا عندهم Visio .. لذلك يجب أولا فتح Visio .. واختيار مشروع Software ومن ثم UML .. وبدأ التصميم برسم مجموعة من الpackages وداخلها ال classes المتعلقة بها ..

يجب تصميم البرنامج بشكل دقيق من قبل البدأ بكتابة أي كود ..

=============================

على الأغلب سوف أفتح منتدى خاص باسم المشروع من أجل نقل النقاشات إلى هناك ...

Coding on the Cloud and for the Cloud!

My Blog

#23

بسم الله الرحمن الرحيم

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

أهلاً استاذ هاني واشكرك على حسن إطرائك :o:o:o

وأنا بالفعل أنوي تعلم COM و ATL كما نصحني بها الأستاذ Developer.Net والأستاذ إسماعيل إبراهيم .

إستاذي العزيز Developer.Net إذا كنت سعيد بمناقشتي لك فهذا أولاً فخر لي وثانياً أنا أسعد بذلك وهذا بالفعل كما قلت يا أستاذي مانبحث عنه :cool::cool::cool:

ياليت إستاذي العزيز توضح لي ال(implementation) أقصد مامعناها وما فائدتها

وارجوا أن تتحملني.:o:o:o

أما بالنسبة للموضوع:

اليوم وانا افكر في اشياء جديدة جاءتني فكرة إن شاء الله تعالى تكون جيدة ل

لاتتعلق فيما اذا كان مربع حوار أو شريط أدوات وهي :

مارأيك في وضع قوالب جاهزة للنصوص أي بمعنى Library يحتوي على مايقارب مثلاً 100 قالب من الأشكال الزخرفية وتكون قابلة للتطوير اي بمعنى أن من لديه فكرة لقالب معين يقوم برسمه على ورق ثم يدرجه لنراه ثم يتم عمل كود معين داخل دالة معينة تقوم برسم الشكل حسب النص الذي يدخله المستخدم ونجعل هذه المكتبة منعزلة عن خصائص الخط

حيث ستكون هذه القوالب موجودة على ملف معين يتم وضعه مع تنصيب البرنامج ولنفرض أن إسم الملف كان (TextLibrary) حيث سيحتوي على ملفات القوالب ولنفرض أن لها الإمتداد (ttz) بذلك يستطيع اي مبرمج وخصوصاً من الفريق العربي للبرمجة برمجة قوالب واشكال معينةوبذلك نحصل على فائدة كبيرة وهي عبارة عن شعار اتخذته منذ زمن وارجوا ان تعطيني رأيك في شعاري وهو :(تطوير البرنامج على يد المستخدم)

حيث سيقوم اي مستخدم مثلاً بتطوير قوالب كثيرة وبذلك هو يطور البرنامج من غير أن يعلم ويزيد من امكانيته

ولتوضيح الفكرة إليك مايلي :

نقوم بعمل مربع حواري يحتوي على مايلي:

1_أداة Picture

2_أداة ListBox

3_Palette

4_أداة لوضع shadow

5_وضع زر Browse مع أداة EditBox

وإليك التحليل :

أداة Picture :يتم وضعها لغرض واحد فقط وهو عرض القالب المختار

مع امكانية النقر على اداة الصورة لعرضها بشكل مكبر على Dialog اخر

وليكن اسمه PicView

أداة ListBoxحيث ستحتوي على اسماء القوالب الموجودة والتي منها سيختار المستخدم

أو ستقوم بعرض اسم القالب المجلوب من ملف معين

Paletteوالغرض منها تلوين القالب بألوان مختلفة وجميلة

أداة لوضع Shadowوهي عبارة عن زر معين إذا قام المستخدم بالضغط عليه سيتم وضع ظل لشكل النص الموجود بالقالب ويتم تحويل أحداث لوحة Palette لتتعامل مع الظل بدلاً من لون النص وهكذا.

5_وضع Browse و EditBox

وهذه أظنها واضحة وهي للإستعراض لجلب قوالب اخرى واضافتها إلى البرنامج

استاذي العزيز عندما أخترت أداة النص فإني اخترت النص وكيفية التعامل معه داخل البرنامج وليس فقط كتابته على لوحة العمل أي أخترت جميع الأفكار التي تتعلق بجمالية النصوص وكتابتها سأحاول أن يكون مجال بحثي في هذه النقطة

وأرجوا أن تكون الفكرة قد أعجبتكم

وشكراً

أخوكم عبدالله عيد المحمادي

#24

رائع يا شباب (yess) ،الله يعطيكم ألف عافية وأنا سأكون سعيد لو شاركت معكم في المشروع لأنها ستكون التجربة الأولى بالنسبة لي ولكن متى نبدأ بكتابة الكود ،أعتقد أنه أصبح لدينا تحليل شامل للمشروع

كلاس CLine : لايوجد في مكتبات MFC كلاس سطر ولكن كتابته سهلة (نقطة بداية ونقطة نهاية )

CLine(CPoint pfrom,CPoint pto) وكتابة دالة تقوم بإنشاء سطر جديد وتخزين الأسطر في مصفوفة ديناميكية مثلا CObject

فئة CArchive و CSerialize للقيام بعملية الحفظ

وأنا في انتظار الخطوة التالية وفي انتظار البدء في العمل ، أرجوا أن لا تنسوني لأني متحمس جدا لأرى طريقة العمل في فرق البرمجة Team Players يا أروع فريق (f)(f)

#25

صفات آداة المستطيل:

مربع عبارة عن إطار وتعبئة, الاطار باللون المختار, والتعبئة بلون الخلفيّة..

عندما يضغط المستخدم على Shift يرسَم مربّع,لا مستطيل. عندما يضغط المستخدم Ctrl يُرسَم المستطيل من مركزه.. بمعنى ان مكان ضغطة الماوس الاولى تكون مركز المستطيل...

يمكن للمستخدم تحديد نوعية الخط (مقطع, مموج...) وعرض الخط. وكذلك نوع التعبئة(أحاديّة, خطوط مائلة.. الخ).

عند انتهاء عملية الرسم, يبقى المربّع في حالة اختيار, وينتج toolbar لاضافة تاثيرات, كالظل مثل أو تحريك ودوران ,ضغطة على زر Esc تلغى حالة الاختيار ويصبح الشكل نهائي.

إعطاء المستخدم امكانيّة تحديد مقاسات المستطيل وبذلك تكفي ضغطة واحدة لرسم المستطيل, ويكون موقع الضغطة مركز المستطيل.

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

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