المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : مسااااعدة عااجلة رجااء لأصحاب الخبرة في الأوتوبلاي - مشكلة صعبة !


عاصم المرابطي
18-09-2013, 06:22 PM
السلام عليكم ورحمة الله تعالى وبركاته

ها أنا ذا أعود لحضراتكم بعدما واجهتني مشكلة عويصة نوعا ما وهي شاائعة على حسب ما لاحظت من استفسارات الأعضاء.
المشكلة تتلخص في كوني قمت بعمل برنامج تعليمي بواسطة الأوتوبلاي وقد أوليت اهتماما كبيرا لجانب التصميم حيث قمت بالكتابة بخطوط كثيرة ومختلفة وغالبا لا توجد عند أغلب المستخدمين. لذا فقد قمت بإضافة كود يقوم بنسخ الخطوط التي أرفقتها في مجلد Docs الموجود بالبرنامج إلى مجلد الخطوط Fonts بالويندوز. لكن المشكلة هي في نسخ الخطوط حيث قمت في الأول بعمل كود بسيط File.Copy والذي يقوم بتحديد الملف وإسمه وامتداده ثم نسخه وبعد ذلك كود آخر لتسجيل الخط في الويندوز. لكن هذه الطريق لم تنجح للأسف بعد تجربتها على عدة أجهزة، وكملاحظة على ذلك فإن الخطأ لا يكمن في نظام التشغيل كما سيعتقد البعض منكم، حيث قمت بتجربة الكود على نظام Windows XP ولم تفلح أيضا.
لذ قمت بتعديل بسيط حيث أضفت الكود السابق إلى دالة عادية من صنعي ووضعت الكود في Global Functions ثم قمت بالإعلان عنها في Project في الحدث On Startup لكن النتيحة ظلت كما هي. :abc_083:

لذا فإنني أطلب من الخبراء أن يعطوني كودا قوياً لأتمكن من خلاله من نسخ الخطوط مهما كانت وأين ما كان مجلد الخطوط وكيفما كان نظام التشغيل.

ملاحظة : لقد قمت بتجربة كود Get.Folder لكن بدون أية فائدة أيضاً .. :abc_070:

المرجو مساعدتي في أقرب وقت ممكن لأنني قد أضطر إلى إعادة تصميم البرنامج بالكامل، والكتابة بالفوتوشوب على الصور ..

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

Haitham.2012
18-09-2013, 07:57 PM
اذا كانت المشكله في عدم النسخ فهناك مواضيع كثيره في المنتدى توضح عملية نسخ الخطوط

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

القنـاص المصرى
18-09-2013, 09:47 PM
اليك يا غالى الحل انا واجهت نفس المشكلة مع احد مشارعى فى تنصيب الخطوط
والحل النهائى اللى توصلتله كان هذا الكود

Fpath = Shell.GetFolder(SHF_FONTS);
fonts = File.Find(_SourceFolder.."AutoPlay\\Docs\\Fonts\\Arabic", "*.ttf", false, false, nil, nil);
for i,y in pairs (fonts) do
File.Copy(y, Fpath, false, false, false, true);
split = String.SplitPath(y);
File.Copy(y, Fpath, true, true, false, true, nil);
System.RegisterFont(Shell.GetFolder(SHF_FONTS), split.Filename..split.Extension, true);




وعيبه الوحيد هو انه لا يعمل مع ويندوز 7 و فيستا و 8 الا بعتد تغيير User Account Settings
وقد ارفقتها لك فى المشاركة فى ملف ورد

Haitham.2012
18-09-2013, 10:47 PM
من قال انه لا ينجح مع ويندوز 7 او 8 ؟؟

فقط اضبط برنامجك على وضعية Require Administrartor

من project > settings > advanced

:abc_050:

القنـاص المصرى
18-09-2013, 10:54 PM
من قال انه لا ينجح مع ويندوز 7 او 8 ؟؟

فقط اضبط برنامجك على وضعية Require Administrartor

من project > settings > advanced

:abc_050:

ينجح مع ويندوز فيستا و 7 بأعدادات Require Administrator
عندما يتم تنصيب الخطوط خط خط وليس فى طريقة جلبهم من ملف ووضعهم فى جدول وتنصيبهم مثل الطريقة التى قمت بأرفاقها
فانا عانيت ومن اشار الى بهذا التعديل هو الاستاذ عزيز سوفت
اما اذا كان المبرمج ينوى تنصيب 1-10 خطوط واستعمل امر System.RegisterFont لكل خط مرة واحدة وفعل خاصية التشغير كمسؤل
فستعمل على جميع الاصدارات سواء فيستا او سيفن او ايت او اكس بى
وهذ العيب الحالى فى البرنامج وهو عدم القدرة على استخدام هذه الميزة فى التعامل مع الجداول

عبود عبود
19-09-2013, 04:24 PM
ينجح مع ويندوز فيستا و 7 بأعدادات Require Administrator
عندما يتم تنصيب الخطوط خط خط وليس فى طريقة جلبهم من ملف ووضعهم فى جدول وتنصيبهم مثل الطريقة التى قمت بأرفاقها
فانا عانيت ومن اشار الى بهذا التعديل هو الاستاذ عزيز سوفت
اما اذا كان المبرمج ينوى تنصيب 1-10 خطوط واستعمل امر System.RegisterFont لكل خط مرة واحدة وفعل خاصية التشغير كمسؤل
فستعمل على جميع الاصدارات سواء فيستا او سيفن او ايت او اكس بى
وهذ العيب الحالى فى البرنامج وهو عدم القدرة على استخدام هذه الميزة فى التعامل مع الجداول
وربما يكون العيب فى أكوادك و ليس فى البرنامج :abc_065:

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

---------------

من قال انه لا ينجح مع ويندوز 7 او 8 ؟؟

فقط اضبط برنامجك على وضعية Require Administrartor

من project > settings > advanced

:abc_050:

طبعا كلام صحيح و فعال 100% مع التوظيف الصحيح للأكواد



تحياتى لكم .............. وبالتوفيق

القنـاص المصرى
19-09-2013, 05:39 PM
يا اخوانى

اليكم هذا الكود على سبيل المثال فما الخطأ اللذى ارتكبه المبرمج فيه


ar_selected = CheckBox.GetChecked("ar");
en_selected = CheckBox.GetChecked("en");
os = System.GetOSName();
Fpath = Shell.GetFolder(SHF_FONTS);
-- ÌãíÚ ÍÇáÇÊ ÇáÇÎÊíÇÑÇÊ
-- First Case if User wants to setup en & ar fonts
if ar_selected == true and en_selected == true then
ar_t = File.Find(_SourceFolder.."\\AutoPlay\\Docs\\Fonts\\Arabic", "*.ttf", false, false, nil, nil);
en_t = File.Find(_SourceFolder.."\\AutoPlay\\Docs\\Fonts\\English", "*.ttf", false, false, nil, nil);
all_t = {}
all_t = ar_t
total_size = 0
for a,z in pairs (en_t) do
Table.Insert(all_t, a, z);
end
count = Table.Count(all_t);
Label.SetText("all", count);
total_size = 0
for i,y in pairs (all_t) do
get_size = File.GetSize(y);
total_size = total_size + get_size
end
total_size = String.GetFormattedSize(total_size, FMTSIZE_AUTOMATIC, true);
Label.SetText("sz", total_size);
--------------------------------
for i,y in pairs (all_t) do
File.Copy(y, Fpath, false, false, false, true);
split = String.SplitPath(y);
File.Copy(y, Fpath, true, true, false, true, nil);
System.RegisterFont(Shell.GetFolder(SHF_FONTS), split.Filename..split.Extension, true);
Label.SetText("current_num", i);
Progress.SetCurrentPos("Progress1", i * 100 / count);
end

فعيب الكود هو مثل ماقلت لابد من تغيير ال User Account Control

وارجو ان تلفى نظرة على مشاركة الاخ عزيز سوفت هنا
http://www.abc4web.net/vb/showthread.php?t=27619&page=2

عبود عبود
19-09-2013, 06:00 PM
يا أخى الحبيـــــــب إذا كنت تريد تعليقات على كودك فالتعليقات على ما أعتقد سوف تكون كثيرة منها على سبيل المثال :

all_t = {}
all_t = ar_t
total_size = 0
for a,z in pairs (en_t) do
Table.Insert(all_t, a, z);
end


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

ما هو الـــ a , الـــ z فى التكرار السابق ؟

هل يمكنك أن تحاول إلقاء نظرة على شرح المصفوفات ربما تعرف الخطأ من الشرح للمصفوفات .
:abc_065: هو أنا بــــ أشرح لنفسى فى قسم الدروس و الشروحات ؟ ههههههههه

:abc_138: تحياتى :abc_138:

عاصم المرابطي
19-09-2013, 07:12 PM
السلام عليكم ورحمة الله وبركاته

شكرا جزيلاُ إخواني الكرام على التفاعل مع مشكلتي . وقد قرأت كل التعليقات .
لقد إرتأيت أن أوريكم الكود ال\ي استعملته في نسخ الخطوط دفعة واحدة .

هذا الكود قمت بكتابته في Global Functions :

-- On Global Functions --

function Copy_Fonts ()

File.Copy("AutoPlay\\Docs\\Fonts\\AdvertisingExtraBold.TTF", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\AdvertisingExtraBold.TTF", "AdvertisingExtraBold.TTF", true);

File.Copy("AutoPlay\\Docs\\Fonts\\Army.ttf", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\Army.ttf", "Army.ttf", true);

File.Copy("AutoPlay\\Docs\\Fonts\\BAHAMASN.TTF", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\BAHAMASN.TTF", "BAHAMASN.TTF", true);

File.Copy("AutoPlay\\Docs\\Fonts\\BARBE4.TTF", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\BARBE4.TTF", "BARBE4.TTF", true);

File.Copy("AutoPlay\\Docs\\Fonts\\BERKE15.TTF", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\BERKE15.TTF", "BERKE15.TTF", true);

File.Copy("AutoPlay\\Docs\\Fonts\\BRSHFLR.TTF", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\BRSHFLR.TTF", "BRSHFLR.TTF", true);

File.Copy("AutoPlay\\Docs\\Fonts\\CASCD09.TTF", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\CASCD09.TTF", "CASCD09.TTF", true);

File.Copy("AutoPlay\\Docs\\Fonts\\CROISNTN.TTF", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\CROISNTN.TTF", "CROISNTN.TTF", true);

File.Copy("AutoPlay\\Docs\\Fonts\\FORTE.TTF", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\FORTE.TTF", "FORTE.TTF", true);

File.Copy("AutoPlay\\Docs\\Fonts\\FRHND471.TTF", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\FRHND471.TTF", "FRHND471.TTF", true);

File.Copy("AutoPlay\\Docs\\Fonts\\FRKFRTHN.TTF", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\FRKFRTHN.TTF", "FRKFRTHN.TTF", true);

File.Copy("AutoPlay\\Docs\\Fonts\\TT0806M.TTF", _WindowsFolder .. "\\Fonts", true);
System.RegisterFont("AutoPlay\\Docs\\Fonts\\TT0806M.TTF", "TT0806M.TTF", true);

end

وهذ الكود قمت بكتابته في الحدث On Stratup للمشروع بحيث أقوم من خلاله الدالة السابقة والمسؤولة عن نسخ الخطوط :

-- On Project Startup Event --

Copy_Fonts ();

- ملاحظة : الهدف الذي أريده من هذا كله هو نسخ الخطوط أثناء تحميل البرنامج أي في الخلفية دون استعمال أية أزرار أو نوافذ منبثقة، يعني لا أريد أن أزعج المستخدم بهذا الأمر الذي قد لا يفهمه بعض المستخدمين العاديين جدا للبرنامج !

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

ملاحظة أخرى : لاحظت أن بعض الخطوط تُنب في مجلد الخطوط والأخرى لا تُنب وبالتالي لا تظهر أثناء تشغيل البرنامج.

ملاحظة أخيرة : هناك بعض الخطوط تحتوي أسماؤها بعضاُ من الرموز أو ما شابه ذلك، وبالتالي فإن الأوتوبلاي لا يستطيع تتبع المسار الذي يكون فيه رموز أو ما شابه ذلك وبالتالي لا يسطيع إحضار الخط المطلوب من مجلد Docs، لكنني قمت بمراعاة هذه النقطة وقمت بإعادة تسمية بعض الخطوط التي تحتوي أسماؤها على رموز خاصة إلى أسماء بحروف عادية. لكن طبعاُ دوون أية تنيجة تُذكر :abc_085:

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

Haitham.2012
20-09-2013, 03:13 AM
fonts_path = Shell.GetFolder(SHF_FONTS);

fonts = File.Find(_SourceFolder.."\\AutoPlay\\Docs\\Fonts\\", "*.TTF", true, true, nil, nil);

for x,y in pairs (fonts) do

File.Copy(y, fonts_path, false, false, false, true);

end



هذا الكود كافي بإتمام المهمه .. أما عن كود ...

System.RegisterFont

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

القنـاص المصرى
20-09-2013, 06:09 AM
يا أخى الحبيـــــــب إذا كنت تريد تعليقات على كودك فالتعليقات على ما أعتقد سوف تكون كثيرة منها على سبيل المثال :

all_t = {}
all_t = ar_t
total_size = 0
for a,z in pairs (en_t) do
Table.Insert(all_t, a, z);
end


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

ما هو الـــ a , الـــ z فى التكرار السابق ؟

هل يمكنك أن تحاول إلقاء نظرة على شرح المصفوفات ربما تعرف الخطأ من الشرح للمصفوفات .
:abc_065: هو أنا بــــ أشرح لنفسى فى قسم الدروس و الشروحات ؟ ههههههههه

:abc_138: تحياتى :abc_138:

على فكرة انا متابع معاك شروحات المصفوفات والله يا اخ عبود وافادتنى كتير
ولكن اللى عدل على الكود واضاف هذا الجزء هو الاخ النصل القاطع
والكود يعمل بشكل جيد
وليس العيب هنا ان كنت تريد شرح العيب
قم بادراج ملف داخل التجميعه ولتضع به مثلا 10 خطوط ثم استخدم الامر File.Find لجلبهم فى جدول ثم قم بأستدعائهم للتنصيب عبر
For i,x in pairs (Fonts) do
system.registerfonts....
واضف اليها ماتشاء من تعديلات ستجد ان الطريقة لن تعمل الا عند عدم التعامل مع البيانات بشكل قاعدة
وعانى بذلك الطريقة الخاص بتنصيب كل خط على حدا
اما عن a-z
a وهو رقم العنصر فى الجدول ويساوى Index لذلك نجد ان معظم المبرمجين فى هذه الحالة يكتبه
i حتى لاينسى
اما z فهو العنصر نفسه مثال توضيحي (( عشان ابين لحضرتك اني فاهم ))
لو قلنا ان عندنا مصفوفة اسمها Programs
وفي اهذه المصفوفة 5 مسارات لبرامج
ولتكن
c:\program files\program1.exe
c:\program files\program2.exe
c:\program files\program3.exe
c:\program files\program4.exe
c:\program files\program5.exe
وقمن بوضعهم فى مصفوفة مثلا

programs = {}
programs[1] = "c:\program files\program1.exe"
programs[2] = "c:\program files\program2.exe"
programs[3] = "c:\program files\program3.exe"
programs[4] = "c:\program files\program4.exe"
programs[5] = "c:\program files\program5.exe"

تمام انا الان اريد استدعاء جميع عناصر المجموعة مدرج قبلها رقم العنصر فى الجدول ومفصول بينهما بـ -- فى رسالة سيكون الامر

for i,y in pairs (programs) do
Dialog.Message("Notice",i.."--"..y)
end

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

عبود عبود
20-09-2013, 07:10 AM
جيد الآن عرفت أنك فهمت جزءا من التعامل مع الجداول

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

شكرا

:abc_138:

القنـاص المصرى
20-09-2013, 12:14 PM
جيد الآن عرفت أنك فهمت جزءا من التعامل مع الجداول

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

شكرا

:abc_138:

كم هو شرف لى ان انجح فى اختبار احد اعمدة الـams جزاك الله خيرا اخ عبود

النصل القاطع
20-09-2013, 03:57 PM
جيد الآن عرفت أنك فهمت جزءا من التعامل مع الجداول

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

شكرا

:abc_138:

أخى العزيز الأستاذ عبود

هنا الغلطة عندك
و هى أنك لم تشرح بعد الفرق بين حلقات for do و حلقات for in do

فى حلقات for do علينا وضع حدى الحلقة for ووضع متغير العداد الذى يشار غالبا له ب i
أما حلقات for in do فلا يتم وضع حدى الحلقة for و لا يكون علينا وضع متغير للعداد. و بمجرد وضع أي حرفين
يكون الأول هو الرقم بالفهرس و يكون الثانى العنصر المقابل

(ليس شرح بل مجرد توضيح)

سلامى للجميع

النصل القاطع
20-09-2013, 08:14 PM
ع
اللى عدل على الكود واضاف هذا الجزء هو الاخ النصل القاطع
والكود يعمل بشكل جيد
وليس العيب هنا ان كنت تريد شرح العيب
قم بادراج ملف داخل التجميعه ولتضع به مثلا 10 خطوط ثم استخدم الامر File.Find لجلبهم فى جدول ثم قم بأستدعائهم للتنصيب عبر
For i,x in pairs (Fonts) do
system.registerfonts....
ا

ضع مباشرة بعد كود تسجيل الخط التعليمة sleep بقيمة 100 مللى
ضع بعد كود نسخ الخط فى الحلقة أيضا و مباشرة sleep بقيمة 100 مللى

لاحظ أن 100 مللى تساوى واحد على عشرة من الثانية
عشران من الثانية ليسا مؤثران فى سرعة الكود و يكادا يكونان غير محسوسان

عبود عبود
20-09-2013, 08:56 PM
أرى فى التكرار الأخير فى الكود عدد 2 File.Copy هل لابد من وجودهم معا ؟

أبو يسري
16-12-2013, 10:36 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .
:abc_152:
:abc_152:

فرح صالحي
17-12-2013, 08:15 AM
موفق بإذن الله ... لك مني أجمل تحية .