![]() |
|
هل يمكن جعل هذه الوظيفة تعمل خارج الفورم - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15) +--- الموضوع : هل يمكن جعل هذه الوظيفة تعمل خارج الفورم (/showthread.php?tid=7022) |
هل يمكن جعل هذه الوظيفة تعمل خارج الفورم - nnff - 03-06-2015 السلام عليكم ورحمة الله وبركاته والصلاة والسلام على سيدنا محمد وعلى اله وصحبة اجمعين لدي مشكلة في جعل المهمة او الوظيفة تعمل خارج الفورم الوظيفة او المهمة تغيير المؤشر الى شكل دائري عن طريقة تحويل ملف Bitmap الوظيفة تعمل داخل الفورم , انا ****ها تعمل خارج الفور وعلى النظام كامل , اتمنى وصلت الفكرة هذه الصورة توضح ذلك ![]() المثال موجود بالمرفقات هل يمكن جعل هذه الوظيفة تعمل خارج الفورم - الكاسر الآخر - 03-06-2015 السلام عليكم اخي انت تستخدم دوال لتغيير المؤشر داخل برنامجك فقط ولهذا عند الخروج من نطاق برنامجك سيتغير المؤشر إلى مؤشر نظام التشغيل ... ولحل هذه المشكلة عليك إستخدام دوال 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 ) ; |