delphi4arab منتديات دلفي للعرب

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

والصلاة والسلام على سيدنا محمد وعلى اله وصحبة اجمعين


لدي مشكلة في جعل المهمة او الوظيفة تعمل خارج الفورم
الوظيفة او المهمة تغيير المؤشر الى شكل دائري عن طريقة تحويل ملف Bitmap
الوظيفة تعمل داخل الفورم , انا ****ها تعمل خارج الفور وعلى النظام كامل , اتمنى وصلت الفكرة


هذه الصورة توضح ذلك
[صورة: sCLlHC.gif]


المثال موجود بالمرفقات
السلام عليكم
اخي انت تستخدم دوال لتغيير المؤشر داخل برنامجك فقط ولهذا عند الخروج من نطاق برنامجك سيتغير المؤشر إلى مؤشر نظام التشغيل ... ولحل هذه المشكلة عليك إستخدام دوال 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 ) ;