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

مشاهدة النسخة كاملة : تصحيح أو إستكمال كود إذا كان ممكن


عبود عبود
23-10-2017, 11:31 PM
السلام عليكم ورحمة الله وبركاته

بعد محاولات عديدة أخيرا توصلت إلى كود إظهار ديالوج إختيار الخط أو الفونت عبر قراءة ومحاولة الفهم من هذه الصفحة :
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646832%28v=vs.85%29.aspx

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

الكود :

--
local str = Memory.CreateStructure("long, long, long, long, long, long, long, long, long, long, long, long, long, long, long");

Memory.SetStructureData(str, 1, 0, Memory.Size(str), "");
Memory.SetStructureData(str, 2, 0, Application.GetWndHandle(), "");

Memory.SetStructureData(str, 5, 0, 10, "");

Memory.SetStructureData(str, 6, 0, 256, "");

Memory.SetStructureData(str, 7, 0, 255, "");

Memory.SetStructureData(str, 13, 0, 1024, "");
Memory.SetStructureData(str, 14, 0, 6, "");

local result = DLL.CallFunction("comdlg32.dll", "ChooseFontA", str, DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);

Memory.FreeStructure(str);

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

ثامر أبو بلقيس
24-10-2017, 12:14 AM
السلام عليكم ورحمة الله وبركاته
للأسف لا أملك لا التعامل مع الاضافة و لا المعلومة

لكن للأمانة لم يظهر لي ديلوج اختيار الفونت
علما أعمل على جهاز قديم بونداوز (xp):abc_139:

عبود عبود
26-10-2017, 03:14 PM
أشكرك على التفاعل مع السؤال أخى أبوبلقيس

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

سوف أحاول الاستكمال اليوم :abc_138:

عبد الهادي بهاب
26-10-2017, 08:25 PM
أشكرك على التفاعل مع السؤال أخى أبوبلقيس

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

سوف أحاول الاستكمال اليوم :abc_138:

نظام ويندور 7

بعد وضعه الكود في زر يظهر مربع الخطوط

الشكل التالي :

https://b.top4top.net/p_664n2zy91.png

ثامر أبو بلقيس
26-10-2017, 09:54 PM
أشكرك على التفاعل مع السؤال أخى أبوبلقيس

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

سوف أحاول الاستكمال اليوم :abc_138:

تمنينا تقديم القليل لرد الجميل مما تعلمته منك لكن يبدو أن المطلب فوق قدراتي
فدنا بكل ما تتوصل اليه موفق :abc_139:

عبود عبود
26-10-2017, 10:14 PM
محاولة أخرى :

--
local _LogFont = Memory.CreateStructure("long, long, long, long, long, long, long, long, long, long, long, long, long, long");
Memory.SetStructureData(_LogFont, 1, 0, "<0", "");
Memory.SetStructureData(_LogFont, 2, 0, "0", "");
Memory.SetStructureData(_LogFont, 3, 0, "20", "");
Memory.SetStructureData(_LogFont, 4, 0, "20", "");
Memory.SetStructureData(_LogFont, 5, 0, "400", "");

Memory.SetStructureData(_LogFont, 6, 0, true, ""); --Italic

Memory.SetStructureData(_LogFont, 7, 0, true, ""); --Underline
Memory.SetStructureData(_LogFont, 8, 0, true, ""); --StrikeOut
Memory.SetStructureData(_LogFont, 9, 0, "0xB2", ""); --ARABIC_CHARSET
Memory.SetStructureData(_LogFont, 10, 0, "OUT_TT_PRECIS", ""); --OutPrecision
Memory.SetStructureData(_LogFont, 11, 0, "CLIP_DEFAULT_PRECIS", ""); --ClipPrecision
Memory.SetStructureData(_LogFont, 12, 0, "0x04", ""); --FontQuality
Memory.SetStructureData(_LogFont, 13, 0, "1", ""); --PitchAndFamily FIXED_PITCH

Memory.SetStructureData(_LogFont, 14, 0, "Arial", ""); --FaceName

local str = Memory.CreateStructure("long, long, long, long, long, long, long, long, long, long, long, long, long, long, long");

Memory.SetStructureData(str, 1, 0, Memory.Size(str), "");
Memory.SetStructureData(str, 2, 0, Application.GetWndHandle(), "");

Memory.SetStructureData(str, 4, 0, _LogFont, "");

Memory.SetStructureData(str, 5, 0, "0x00000100", "");

Memory.SetStructureData(str, 6, 0, "0x00000100", ""); --Flags

Memory.SetStructureData(str, 7, 0, "255", "");

Memory.SetStructureData(str, 8, 0, "", "");

Memory.SetStructureData(str, 9, 0, "", "");
Memory.SetStructureData(str, 10, 0, "", "");
Memory.SetStructureData(str, 11, 0, "", "");
Memory.SetStructureData(str, 12, 0, "", "");

Memory.SetStructureData(str, 13, 0, "0x0100", ""); --BOLD_FONTTYPE
Memory.SetStructureData(str, 14, 0, 6, "");


local result = DLL.CallFunction("comdlg32.dll", "ChooseFontA", str, DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);

if result~=false then
_c = Memory.GetStructureData(str, 5, 0, ""); -- _GetFontSize
_c1 = Memory.GetStructureData(str, 14, 0, "");
Dialog.Message("", _c1);
end
Memory.FreeStructure(_LogFont);
Memory.FreeStructure(str);

عبود عبود
26-10-2017, 11:13 PM
تم الحذف مؤقتا

ياسرهتهت
26-10-2017, 11:27 PM
بسم الله الرحمن الرحيم
استاذ عبود تمت التجربة على وندوز 7 و8 والاثنين
يعطي نتيجة ممتازة لاختيار الفونت

الكود الثاني يعطي ايضا نيجة ممتازة ولكن يظهر مسج برقم 6

موفق بإذن الله ... لك مني أجمل تحية .
:abc_152::abc_152:

عبود عبود
26-10-2017, 11:31 PM
بسم الله الرحمن الرحيم
استاذ عبود تمت التجربة على وندوز 7 و8 والاثنين
يعطي نتيجة ممتازة لاختيار الفونت

الكود الثاني يعطي ايضا نيجة ممتازة ولكن يظهر مسج برقم 6

موفق بإذن الله ... لك مني أجمل تحية .
:abc_152::abc_152:

جزاك الله خيرا ...... هذا المسج هو تجاربى التى أحاول الحصول منها على إسم الخط ولسة لم تنجح معى :abc_113:

يمكنك أنت أيضا قراءة ردى السابق قراءة متأنية ربما تستفيد شيئا منها إذا كان كلامى التفسيرى واضح

عبود عبود
26-10-2017, 11:33 PM
طبعا نسيت أشكر أخى عبدالهادى أيضا :abc_138:

عبود عبود
13-11-2017, 08:39 PM
شكرا الى الأستاذ / Sajjadkhati من منتدى آخر وذلك لتصحيحة الكود لإيجاد إسم الفونت أو الخط بهذا التعديل :

--
local _LogFont = Memory.CreateStructure("long, long, long, long, long, byte, byte, byte, byte, byte, byte, byte, byte, char[32]");
Memory.SetStructureData(_LogFont, 1, 0, "<0", "");
Memory.SetStructureData(_LogFont, 2, 0, "0", "");
Memory.SetStructureData(_LogFont, 3, 0, "20", "");
Memory.SetStructureData(_LogFont, 4, 0, "20", "");
Memory.SetStructureData(_LogFont, 5, 0, "400", "");

Memory.SetStructureData(_LogFont, 6, 0, true, ""); --Italic

Memory.SetStructureData(_LogFont, 7, 0, true, ""); --Underline
Memory.SetStructureData(_LogFont, 8, 0, true, ""); --StrikeOut
Memory.SetStructureData(_LogFont, 9, 0, "0xB2", ""); --ARABIC_CHARSET
Memory.SetStructureData(_LogFont, 10, 0, "OUT_TT_PRECIS", ""); --OutPrecision
Memory.SetStructureData(_LogFont, 11, 0, "CLIP_DEFAULT_PRECIS", ""); --ClipPrecision
Memory.SetStructureData(_LogFont, 12, 0, "0x04", ""); --FontQuality
Memory.SetStructureData(_LogFont, 13, 0, "1", ""); --PitchAndFamily FIXED_PITCH
Memory.SetStructureData(_LogFont, 14, 4, 73, ""); --FaceName "Impact"
Memory.SetStructureData(_LogFont, 14, 5, 109, ""); --FaceName "Impact"
Memory.SetStructureData(_LogFont, 14, 6, 112, ""); --FaceName "Impact"
Memory.SetStructureData(_LogFont, 14, 7, 97, ""); --FaceName "Impact"
Memory.SetStructureData(_LogFont, 14, 8, 99, ""); --FaceName "Impact"
Memory.SetStructureData(_LogFont, 14, 9, 116, ""); --FaceName "Impact"




local str = Memory.CreateStructure("long, long, long, long, long, long, long, long, long, long, long, long, long, long, long");
Memory.SetStructureData(str, 1, 0, Memory.Size(str), "");
Memory.SetStructureData(str, 2, 0, Application.GetWndHandle(), "");

Memory.SetStructureData(str, 4, 0, _LogFont, "");

Memory.SetStructureData(str, 5, 0, "0x00000100", "");

Memory.SetStructureData(str, 6, 0, "0x00000100", ""); --Flags

Memory.SetStructureData(str, 7, 0, "255", "");

Memory.SetStructureData(str, 8, 0, "", "");

Memory.SetStructureData(str, 9, 0, "", "");
Memory.SetStructureData(str, 10, 0, "", "");
Memory.SetStructureData(str, 11, 0, "", "");
Memory.SetStructureData(str, 12, 0, "", "");

Memory.SetStructureData(str, 13, 0, "0x0100", ""); --BOLD_FONTTYPE
Memory.SetStructureData(str, 14, 0, 6, "");



local isOkSelect = DLL.CallFunction("comdlg32.dll", "ChooseFontA", str, DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL); -- فراخوني تابع ChooseFont که در فايل Comdlg32.dll هست

if (tonumber(isOkSelect) == 1) then
myString = Memory.GetString(_LogFont + 28, -1, "Ascii");
Dialog.Message("Notice", myString, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end

فرح صالحي
14-11-2017, 10:18 AM
الاصج ان نقول : لاظهار إسم الفونت أو الخط بهذا التعديل

عبود عبود
14-11-2017, 12:58 PM
الاصج ان نقول : لاظهار إسم الفونت أو الخط بهذا التعديل

ههههههه طيب وعلشان نظهر إسم الفونت أو الخط مش كان لازم إيجادة ؟

فرح صالحي
14-11-2017, 01:41 PM
ههههههه طيب وعلشان نظهر إسم الفونت أو الخط مش كان لازم إيجادة ؟

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

عبود عبود
14-11-2017, 05:51 PM
صحيح ولكن لا يزال هناك تصحيحات كثيرة مطلوبة
أما مسألة المسج فهذه ليست لب الموضوع فكان من الممكن أى شيئ آخر
أما عن تعليقى السابق فقد كان لسبب وهو معرفة أن الكود التالى يستخدم للحصول على النص " إسم الخط " وهو أيضا ليس صحيحا 100% :

Memory.GetString(_LogFont + 28, -1, "Ascii");

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