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

Invalid Pointer Operation

مغلق
بدأه Mer في 12 أكتوبر 2005 · 13 رد · 1,147 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أقوم بحل مسألة رياضية تعتمد عدداً من المتحولات ضمن إجرائية تعتمد مبدأ التعاودية (Iterations) وأستخدم Application.processmessage لإظهار القيم المحسوبة على الشاشة أثناء تنفيذ الإجرائية وكذلك لإمكانية ايقاف البرنامج بالضغط على زر "إيقاف التنفيذ" الموجود على الشاشة. بدأت أحصل على الخطأ Invalid Pointer Operation وبعدها الخطأ Access Violation وذلك عند استخدام قيمة كبيرة لأحد هذه المتحولات.

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

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

#2

شو يا شباب وين الردود ...

هل السؤال غير مفهوم ....

أم أن السؤال صعب ......

الرجاء الرد من الخبراء

وشكرا لكم

#3

هناك مشكل في كود تعاملك مع Pointer

d4baa0.gif
#4
DeltaAziz كتب:
هناك مشكل في كود تعاملك مع  Pointer

الأخ العزيز DeltaAziz :

أنا لا أتعامل مع Pointer من الأصل حتى يكون هناك مشكل في هذا التعامل.

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

Application.processmessage

يعود البرنامج إلى التنفيذ بشكل سليم جداً.

شو علاقة Application.processmessage بالـ Pointer ؟؟؟؟؟؟؟؟؟

أرجو الرد من الخبراء

#5

قم بإرفاق مثال بالإجرائية

وإن شاء الله أريك ما أقصد

d4baa0.gif
#6

اشكر لك اهتمامك اخي DeltaAziz.

ولكن هل تعرف بديل لإستخدام التعليمة Application.processmessage من أجل التمكن من إيقاف تنفيذ إجرائية علماً أنني وجدت البديل من أجل أظهار القيم أثناء التنفيذ في ليبلات وذلك عن طريق Label1.Update;

#7
اقتباس
ولكن هل تعرف بديل لإستخدام التعليمة Application.processmessage

نعم يا اخي قم باستخدام مبدأ Thread

فقط قم بالبحث عنها في المنتدى ان كنت لا تعرفها وستجد الكثير

انظر الملف المرفق

test.zip

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#8

شكرا لك أخي waeldalol وجاري التجربة

#9

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

وهذا أيضا مثال عن الخطأ للأخ DeltaAziz.

#10

أين المثال ؟

d4baa0.gif
#11

المثال في مشاركة الأخ waeldalol

#12

لا يا اخي الزر الثاني ينفذ العملية بدون استخدام مبدأ ال Thread

الزر الأول يقوم بتشغيل العداد من 1 الى 10000

ثم يضع القيمة في Lable و هو يعمل بشكل صحيح

فقط انظر الى الكود يا اخي

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#13

نعم أخي كلامك صحيح وقد انتبهت لهذا الشيئ أن الزر الأول يعمل بمبدء الـ Thread بعكس الزر الثاني.

عند طلب تنفيذ الزر الأول يبدء العد بشكل صحيح ولكن عند طلب تنفيذ الزر الثاني بنفس الوقت الذي يعمل فيه العداد يعطي البرنامج رسالة Invalid Pointer Operation .

#14

يا اخي الزر الثاني ليس له علاقة انظر الى المثال المرفق نسخة معدلة

عند الضغط على الزر مرة يتم تشغيل Thread ليقوم بالعد ضمن Label1

و عند الضغط على نفس الزر مرة ثانية يتم تشغيل Thread ثاني ليقوم بالعد ضمن Label2

اذا كنت تريد شرح عن كيفية التعامل مع ال Thread انظر الكتاب المرفق ايضا

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

سيساعدك كثير في التعامل مع ال Thread

test.zip

TThread in Arrabic.pdf

تم تعديل هذه المشاركة بواسطة waeldalol في 19 أكتوبر 2005 في 11:28

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

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

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