السلام عليكم ورحمة الله وبركاته
والصلاة والسلام على سيدنا محمد وعلى اله وصحبة اجمعين
لدي مشكلة في جعل المهمة او الوظيفة تعمل خارج الفورم
الوظيفة او المهمة تغيير المؤشر الى شكل دائري عن طريقة تحويل ملف Bitmap
الوظيفة تعمل داخل الفورم , انا ****ها تعمل خارج الفور وعلى النظام كامل , اتمنى وصلت الفكرة
هذه الصورة توضح ذلك
المثال موجود بالمرفقات
السلام عليكم
اخي انت تستخدم دوال لتغيير المؤشر داخل برنامجك فقط ولهذا عند الخروج من نطاق برنامجك سيتغير المؤشر إلى مؤشر نظام التشغيل ... ولحل هذه المشكلة عليك إستخدام دوال API لتنفيذ إستدعاءات النظام System Calls
هذه بعض التعديلات على برنامجك لتحصل على ماتريد
عن طريق دالتي CopyIcon و SetSystemCursor من مكتبة user32.dll في وندوز
عند الانتهاء من نسخ ملف bitmap الخاص بك وتحويله إلى مؤشر ونسخه إلى مصفوفة المؤشرات الخاصة بدلفي ، ماعليك ألا الحصول على المقبض Handle الخاص بالمؤشر واستعماله في دالة SetSystemCursor حيث تأخذ هذه الدالة بارامترين الأول هو الـ Handle الخاص بالمؤشر والبارامتر الثاني هو حالة المؤشر الذي تريد استبداله بمؤشرك وهنا استخدمنا OCR_NORMAL للإشارة إلى المؤشر العام ..
وهذا الكود بعد التعديل
كود :
procedure TForm1.Button1Click(Sender: TObject);
var
bmpMask : TBitmap;
bmpColor : TBitmap;
hcur:hcursor;
begin
bmpMask := TBitmap.Create;
bmpColor := TBitmap.Create;
bmpMask.LoadFromFile('CircleMask.bmp');
bmpColor.LoadFromFile('Circle.bmp');
with iconInfo do
begin
fIcon := false;
xHotspot := 15;
yHotspot := 15;
hbmMask := bmpMask.Handle;
hbmColor := bmpColor.Handle;
end;
Screen.Cursors[crMyCursor] := CreateIconIndirect(iconInfo);
Screen.Cursor := crMyCursor;
hcur:= CopyIcon(Screen.Cursors[crMyCursor]); /////// للحصول على مؤشرك من مصفوفة المؤشرات الخاصة بدلفي
setsystemcursor(hcur,OCR_NORMAL); /// لتغيير مؤشر نظام التشغيل
bmpMask.Free;
bmpColor.Free;
end;
ولإرجاع المؤشر لحالته الطبيعية أكتب هذا الكود في في حدث FormDestroy
كود :
SystemParametersInfo(SPI_SETCURSORS,0,0,WM_SETTINGCHANGE or SPIF_UPDATEINIFILE ) ;