عبود عبود
14-04-2017, 08:50 PM
السلام عليكم ورحمة الله وبركاته
أهلا ومرحبا بكم
سؤالى عن كيفية إستدعاء وظيفة ChooseFontA ديالوج إختيار فونت ووظيفة ChooseColorA ديالوج إختيار لون من ملف الدل comdlg32.dll
حاولت كالتالى دون جدوى :
result = DLL.CallFunction("comdlg32.dll", "ChooseColorA", "ChooseColor", DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL);
:abc_113:
المـهاجر
14-04-2017, 09:32 PM
فعل الاضافة ميمورى ثم ضع هذا الكود فى زر
function ColorDlg(Hndl,Basicolor,NewColor)
local ret=nil
local TblClr={}
local CLR = Memory.CreateArray(ARRAY_LONG, 16);
local ChoseColor = Memory.CreateStructure("long, long, long, long, long, long, long, long, long");
if NewColor then
for i=1, 16 do
if NewColor[i] then
Memory.SetArrayData(CLR, i-1, NewColor[i]);
else
Memory.SetArrayData(CLR, i-1, 0);
end
end
end
Memory.SetStructureData(ChoseColor, 1, 0, Memory.Size(ChoseColor), "");
Memory.SetStructureData(ChoseColor, 2, 0, Hndl, "");
Memory.SetStructureData(ChoseColor, 4, 0, Basicolor, "");
Memory.SetStructureData(ChoseColor, 5, 0, CLR, "");
Memory.SetStructureData(ChoseColor, 6, 0, 259, "");
local result = DLL.CallFunction("comdlg32.dll", "ChooseColorA", ChoseColor, DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
if result ~= 0 then
local RgbRes = Memory.GetStructureData(ChoseColor, 4, 0, "")
return1 = RgbRes
for i=1, 16 do
TblClr[i] = Memory.GetArrayData(CLR, i-1, ARRAY_LONG);
end
return2 = TblClr
end
Memory.FreeArray(CLR);
Memory.FreeStructure(ChoseColor);
return return1, return2
end
ColorDlg(Application.GetWndHandle(),255,NewColor)
عبود عبود
14-04-2017, 10:37 PM
تسلم إيدك أستاذ http://www.abc4web.net/vb/images/icons/icon_z.gif
شرح الكود إن أمكن " التعامل مع الميمورى " وهل كان لابد من إستخدام الميمورى ؟ وكيف تكون الطريقة مع ChooseFontA
المـهاجر
15-04-2017, 06:23 AM
وهل كان لابد من إستخدام الميمورى ؟
لابد
وكيف تكون الطريقة مع ChooseFontA
عليك الرجوع الى Msdn دائما قبل الشروع فى استدعاء الدوال
ChooseFontA مثلها مثل ChooseColorA
كلاهما pointer to a structure
راجع الدالة هنا
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646914%28v=vs.85%29.aspx
ثم راجع المؤشر ChooseFontA هنا
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646832%28v=vs.85%29.aspx
موفق
عبود عبود
15-04-2017, 06:28 AM
لابد
عليك الرجوع الى Msdn دائما قبل الشروع فى استدعاء الدوال
ChooseFontA مثلها مثل ChooseColorA
كلاهما pointer to a structure
راجع الدالة هنا
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646914%28v=vs.85%29.aspx
ثم راجع المؤشر ChooseFontA هنا
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646832%28v=vs.85%29.aspx
موفق
طيب إن أمكن مثال ChooseFontA لأنى مش فاهم قوى ولكن أحاول الفهم من خلال المثال
المـهاجر
15-04-2017, 04:32 PM
بعد استدعاء مربع انتقاء الخطوط ستكون هناك نتيجة بعد الانتقاء من المربع
لكنها لن تكون فى هيئة نص بسيط
ستكون فى صورة تشكيل من عدة متغيرات (مصفوفة غير متجانسة)
المتغيرات بداخل ستكون غير متجانسة قد يكون بعضها نصوص او حروف او بوليان و احيانا جداول
ما الحل ؟؟
ان تقوم بتجهيز التشكيل Structure قبل البدءفى استدعاء الدالة
و لابد من الاضافة ميمورى لأنك ستستخدم ذواكر النظام و ليس اللوا
أنصحك بإستخدام الاضافة ShellDialogs
فبها مربع الألوان و مربع الحروف معا
موفق
ثامر أبو بلقيس
15-04-2017, 06:04 PM
أنصحك بإستخدام الاضافة ShellDialogs
فبها مربع الألوان و مربع الحروف معا
موفق
أحســنت :abc_138:
ثامر أبو بلقيس
15-04-2017, 06:15 PM
و حتى لا يكون المرور بدون ترك أثر هاهي محاولة في بناء دل يخاطب
النظام فقط خصصت العمل للون الخط وحجمه و نوعه أي لم أكمـــل
الملف
https://up.top4top.net/downloadf-470jblf41-rar.html
الأكـــواد و تطبيقها على عنصر Label1 صدرت نواتج الإختيار إلى القرص سي ثم استدعائها
result = DLL.CallFunction("AutoPlay\\Docs\\4.dll", "BELKISS", "", DLL_RETURN_TYPE_INTEGER, DLL_CALL_CDECL);
tamer = TextFile.ReadToTable("C:\\belkiss.txt");
tblLabelProps = {};
tblLabelProps.FontName = tamer[1];
tblLabelProps.FontSize = tamer[2]
tblLabelProps.ColorNormal =Math.HexToNumber(tamer[3])
Label.SetProperties("Label1", tblLabelProps);
هـــي محاولة بناء حسب الطلب لا غير موفق :abc_138:
المـهاجر
15-04-2017, 07:02 PM
هناك ايضا ملف مفتوح ل وورم على ما اتذكر
بالمرفقات
عبود عبود
15-04-2017, 10:18 PM
مرور طيب وكريم ومتوقع منك أبوبلقيس