سؤال

لقد راجعت 100% أنا إغلاق جميع مقابض على الملف التي تم إنشاؤها مؤخرا.ولكن عندما اتصل "opendialog.لتنفيذ;" الحوار المنبثقة كالعادة ولكن على الماوس فوق تلميح مؤخرا إنشاء ملف الشيء كله تعطل مع خارج حدود الخطأ.

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

ما هو أكثر إثارة للاهتمام هو أنه لا يحدث حتى 100% من الوقت حوالي 70% مما أدى إلي التفكير لدي ثابتة عدة مرات إذا ليس فقط لفترة قصيرة من الوقت.لا أحد يعرف ماذا يمكن أن يحدث ؟ وإذا لم يكن كيف يمكنني تعطيل onhint الحدث ؟

كما أكيد لرمز لا تساعد على الإطلاق

OpenDialog.execute;    // crashes here
if fileexists(form1.OpenDialog.FileName) then    
  form1.Address.Text:=form1.OpenDialog.FileName;

و الخطأ وصلة النص

تحرير:حسنا لدي بعض المعلومات الجديدة مثيل جديد من opendialog لا تزال لديها نفس القضايا.و أكثر من المثير للاهتمام ويبدو لي أن تحل 30% قضية على تلميح من ملف مع ضعف الوسم على سبيل المثال "اختبار.jpg.enc" الشيء هو بخير مع أنها أول مرة يتم تشغيله, و إلا تعطل على تلميح من هذه الملفات المشفرة ، ولكن فقط إذا كان لدي ترميز هذا الملف الأبيض applicatuion له بن مفتوحة.على سبيل المثال إذا كنت ترميز,, ثم محاولة فك وتعطل..يمكنني تشغيله مرة أخرى و فك ذلك بخير ، ، ولكن لم تكن هناك مشكلة في فك ثم ترميز في حالة واحدة من aplication.

هل كانت مفيدة؟

المحلول 3

الحل لهذا هو استخدام activeX ، يبدو أنه كان هناك خلل intorduced بعد SP2

يستخدم ActiveX;

التهيئة OleInitialize(nil);

الانتهاء OleUninitialize الغاية.

oringinaly أرسلت بواسطة الثعلب هنا

نصائح أخرى

هل أنت متأكد مثيل يتم إنشاء form1?

إذا كان الجواب نعم:

لماذا لا يمكنك استخدام مثل هذا:

OpenDialog.Options:=  OpenDialog.Options + [ofFileMustExist];

if OpenDialog.Execute then
  Address.Text:= OpenDialog.FileName

واستخدام FastMM4 وتحديد FullDebugMode في FastMM4.inc.هذا قد تساعدك على العثور على المشكلة الحقيقية

الأول-هو تقريبا أبدا من الضروري أن أشير إلى "form1.xxx" في التعليمات البرمجية الخاصة بك ، /خاصة/ في حالة كتابة التعليمات البرمجية في طريقة Form1.أود إزالة تلك المراجع.

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

أمرين:

ترجمة التطبيق الخاص بك مع تصحيح DCU's (المشروع / خيارات / استخدام التصحيح DCU's - ثم القيام كامل بناء) ومن ثم نرى أين الاستثناء يحدث.هذا وسوف تعطيك المزيد من المعلومات عندما استثناء يحدث في vcl/rtl رمز.إضافة لنا رسالة الخطأ بالكامل وحيث في ما الوحدة فشلت.

الثانية, وربما والأهم من ذلك, كيف الملف يتصرف خارج التطبيق الخاص بك.توحي لك أنه فشل في حوالي 30% من الوقت لذلك في كل مرة بعد حفظ الملف ، استعرض في العادية مستكشف و الماوس فوقه هناك ومعرفة ما إذا كان تلميح يعرض بخير.ثم فتحه في المفكرة.إذا كان كل من تلك الأعمال ، ومن ثم فشل في التطبيق الخاص بك التي من شأنها أن تكون مثيرة للاهتمام.

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

فقال له الحظ!

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

المدونة التي أفترض هي طريقة form1 يمكن استخدام بعض التغيير (التي سبق ذكرها):

OpenDialog.execute;    // crashes here
if fileexists(OpenDialog.FileName) then    
  Address.Text := OpenDialog.FileName;

ولكن ما هو OpenDialog هو مكون جره إلى form1?في هذه الحالة form1 ربما لا تهيئة.ولكن الأرجح هو أن OpenDialog هو متغير محلي.في هذه الحالة يمكنك تهيئة:

OpenDialog := TOpenDialog.Create;
try
  OpenDialog.execute;   
  if fileexists(OpenDialog.FileName) then    
    Address.Text := OpenDialog.FileName;
finally
  OpenDialog.Free;
end;

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top