الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أقوم بعمل toolbar متحركة على سطح المكتب ؟

مغلق
بدأه ابن الشريف في 4 سبتمبر 2006 · 37 رد · 3,910 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

المساعدة يا أعضاء الرجاء المساعدة

#2

رجاء الإهتمام..

#3

السلام عليكم

ارفقة لك مرفقات لبرنامج من صنع الاخ HnHn واسمه التاثيرات الضخمه صراحتا

لا اعرف اين رابط الصفحة التي كان فيها

على العموم به ما تريد

Big_Effects.rar

#4

قمت بعمل مثال لك تجده في المرفقات ..

علي كيفية عمل شريط أدوات يظهر ويختفي بمرور الماوس عليه..

Desktop_Bar.rar

#5

أخي الحيوتي

شكرا ً على الأمثلة الجميلة

أخي Pharonic Guy

ممتاز هذا ما أردته بالضبط..لكن لي سؤال...

كيف أقوم بعمل نص متحرك أو Scrolling Text على الفورم حيث يظهر على البار كشريط أخبار ؟

الرجاء أخي أن تفيدني لا حرمك الله الأجر

أخوك,

#6

تم تعديل المثال ..

ويمكن التحكم في سرعة ال Scroll بزيادة أو إنقاص مقدار الإزاحة في الكود التالي :

 lbl.Left = lbl.Left + 100

ولإنهاء المشروع استخدم Right Click علي الفورم

Desktop_Bar2.rar

تم تعديل هذه المشاركة بواسطة Pharaonic_Guy في 6 سبتمبر 2006 في 10:15

#7

أخي Pharonic Guy

جوزيت َ خيرا ً بارك الله فيك وأثابك..

بالضبط مثل ما أردت...

لك الأجر إن شاء الله في هذا العمل : )

لكن سأستثقل نفسي عليك وسأرفق لك تعديل على مثالك ونرى إن كان فيه أخطاء أم لا...

والفكرة هي:

أن الـScroll Text يحتوي على معلومات مأخوذة من قاعدة بيانات mdb ...

سأقوم بعمل المثال وإن واجهتني مشاكل فأتمنى مشاركتي في الحل وكل ُ بأجره : ) وإن إستطعت إمدادي بأي فكرة حول الموضوع فرجاء ً إفعل

أخوك,

#8

أنا معك لنهاية المشروع ..

خلصه أنت بس وأرفقه ..

ولو عندي أي أفكار سأضيفها إن شاء الله للمشروع ..

هل ستستخدمه لعرض أحاديث أم ماذا ؟؟ ..

#9

سأقوم بعملها إن شاء الله الليوم وأرسله لك وبارك الله فيك

أنا أعمله لعرض شبهات عن ديننا والجواب عليها في برنامج البتار الذي إنتهيت من عمل نسخة تجريبية منه

http://battar.whyislamsa.com

فكرته أنه يقوم بعرض شبهات في 7 تصانيف ويجيب عليها بشكل مختصر ومفيد

الموعد الرسمي لصدور النسخة 1,0 هو 1 رمضان إن شاء الله

والسلام,

أخوك..

ابن الشريف

#10

جميل جدا هذا العمل القيم .. وهذا سبب أدعي لأن أساعد بكل ما أقدر عليه..

فقط ملاحظة صغيرة يا أخي العزيز .. أنه إذا أردت الدعوة بهذا البرنامج ..

فإن كلمة الكفار تأتي في القرءان عندما يخاطب قريش أو أي قبيلة أخري ليست لها ديانة أو لها ديانة وثنية ..

بينما عند مخاطبة غير المسلمين أصحاب الديانات السماوية فيذكرهم دائما بـ (أهل الكتاب)..

علي العموم أنا بانتظار البرنامج اليوم ..

وقد ألقيت نظره علي البرنامج ولكنني لم استطع تشغيله لمشاكل مع الأداة Osen ..

ممكن نغيرها بأصدار أحدث ويكون ثابت علي جميع أنظمة التشغيل ..

بالإضافة إلي أن الاصدار الحالي المستخدم Trial ل 30 يوم ..

والأفضل أن يتم الاستغناء عن هذه الاداة ..وذلك سيؤثر بالإيجاب علي عمل البرنامج وعلي مساحته أيضا..

#11

أخي الكريم

كلمة (الكفار) ليست منفرة لإن كافر بالأصل تعني المغطي أي الذي يغطي الحق : )

وأهل الكتاب هم الذين كفروا بالكتاب الذي أنزل الله وإلا لآمنوا بمحمد صلى الله عليه وآله...

أما بالنسبة لأداة OSenXPSuit فبالفعل إستغنيت عنها تماما ً ...

وملف التسطيب للنسخة الكاملة لن يتعدى الـ3 ميجا فقط !

أشكرك أخي والعفو منكم

والسلام ,

ابن الشريف

#12

لن أدخل معك في مناقشة دينية .. إلا إلي ما بعد أن يخرج البرنامج ..

حتي لا نشغل نفسنا وننسي الأهم..

وكويس جداا إنك استغنيت عن Osen ..

البرنامج نزل حجمه إلي 3 ميجا..

طيب ايه رأيك نخليه ربع ميجا فقط ..يعني تقريبا 300 كيلو ويمكن يوصل لأقل 250 كيلو ..

وذلك بضغط كلا من قاعدة البيانات وال Skin وفك ضغطهم مرة واحدة فقط في أول مرة يعمل فيها البرنامج..

#13

أخي Pharonic Guy

فكرة ممتازة...

هل لديك Demo للضغط ولفك الضغط بإستخدام الوين رار ؟

ثاني سؤال:

كيف ستعلم أنها أول مره يعمل بها البرنامج ؟ هل تحبّذ الـRegistery أم ملفات الـINI ؟

أشكرك أخي على إهتمامك...

أخوك,

تم تعديل هذه المشاركة بواسطة loalsharif.NET في 6 سبتمبر 2006 في 17:45

#14

يمكننا الأعتماد علي برنامج Extract لملفات Cab .. الموجود مع معظم أنظمة التشغيل ..

ولكنني أفضل الاعتماد علي أداة OCX جاهزة..

وخلال البحث وجدت أداة ممتازة تدعي Unzip بعض الضغط حجمها 73 كيلو ..تجدها مرفقة مع مشروع يبين كيفية استخدامها ..

واستخدامها سهل ..

UnZip.InputFile = Path of the file to be extracted
UnZip.OutputFolder = Path of The Output Folder
UnZip.Go ' Do Extracting

بالتأكيد الريجستري سيكون أفضل ..

فقط للتأكد من أنها أول مرة يعمل فيه البرنامج.. سيتم فحص وجود مفتاح أو قيمة في الريجستري..ولتكن قيمة باسم Used ..

إذا لم تكن موجودة فهو يعمل لأول مرة وبالتالي يتم فك الضغط ثم إنشاء القيمة Used ..

وإذا كانت القيمة الموجودة فلا يفعل شيء ..

وسأقوم بإرفاق مثال شامل لتلك العملية اليوم ..

UnZipper.rar

تم تعديل هذه المشاركة بواسطة Pharaonic_Guy في 7 سبتمبر 2006 في 09:20

#15

أشكرك أخي الكريم على إهتمامك..

بالمناسبة .. ما رأيك بالوصف الجديد ؟

( البتّار..قاطع شبهات المحتار) : ) ؟

والسلام

#16

مبروك تغيير الاسم لـ(ابن الشريف) ..

وأنا لسه صاحي من النوم .. فقط هأعمل كام مشوار . وهأجي أخلص برنامج الإعداد ..

بالنسبة للـ Slogan الجديد.. فهو جميل جدا.. وأحبذ استخدامه ..ما دام الدعوة ستكون لغير المسلمين ..

#17

مرفق مشروع التجربة النهائي .. لفك الضغط عن ملفات البرنامج وستجد الملفات مرفقة أيضا ومضغوطة..

ولكنني وجدت أن أداة الـ OCX تظهر الرسالة التالية بعد القيام بفك الضغط..

UnZipper.PNG

وبالتالي الرسالة ملهاش لازمة وقد قمت بإبطال ظهورها من أداة الـ OCX نفسها..والأداة الجديدة مرفقة مع المشروع ..

حجم الأداة + الملف المضغوط (الاسكين +قاعدة البيانات+ملف الصوت) = 356 كيلو بايت

بإلاضافة إلي 50 كيلو وهو حجم ال EXE لبرنامج البتار بعد الضغط .. وسيكون الحجم النهائي لمشروع اليتار في حدود 400 كيلو بايت في حالة إذا لم تستخدم أدوات أخري

UnZipper.rar

تم تعديل هذه المشاركة بواسطة Pharaonic_Guy في 8 سبتمبر 2006 في 06:19

#18

ممتاز أخي بارك الله فيك الأداة تعمل بشكل ممتاز لكن سؤال:

أليست هذه الأداة تجريبية يعني trial ؟

سأقوم بإذن الله بإنجاز مثال الـdesktop bar مع قاعدة البيانات وأرفقه لك حتى تقوم بالتعديل عليه

أشكر لك إهتمامك الجم

والسلام,

#19

الأداة طلعت غير مجانية فعلا ..ولكنها ليست Trial..

النسخة المجانية لا تفرق شي عن هذه النسخة التي نستخدمها سوي في عدم ظهور الرسالة بعد فك الضغط والتي قمت بحذفها بالفعل..

وأنا في انتظار المشروع ..

#20

شكرا ً أخي قمت بعمل اللازم وبإذن الله سأخبرك بما وصلت إليه : )

البرنامج جاهز وبه 70 شبهة لكني أقوم بعمل Rough Test عليه حتى 1 رمضان

شكرا ً لك أخي الكريم على تفاعلك وبالتأكيد سأحتاجك : )

والسلام,

#21

طيب أنا موجود .. أديني رنه بس أول ما تحتاجني علي الايميل thensync@hotmail.com ..

#22

السلام عليكم : اولا الف شكر على كل المعلومات الجميلة دى وجزاكم الله خير بس انا لسه بقول ياهادى فى البرمجم ممكن بخصوص (desktop bar2 ) يتم شرح الاكواد بس علشان نبقى فاهمين احنا بنعمل ايه بالضبط وانا اسف لو بتقل عليكم

السلام عليكم : اولا الف شكر على كل المعلومات الجميلة دى وجزاكم الله خير بس انا لسه بقول ياهادى فى البرمجم ممكن بخصوص (desktop bar2 ) يتم شرح الاكواد بس علشان نبقى فاهمين احنا بنعمل ايه بالضبط وانا اسف لو بتقل عليكم

#23

ضع الأكواد التي لم تفهمها ..وسأفسر لك وظيفتها..

#24

اولا شكرا على الاهتمام :

ثانيا هذه هى الاكواد

Private Sub Timer1_Timer()

GetCursorPos pt

If pt.Y * Screen.TwipsPerPixelY > 930 Then Check

If lbl.Left > Me.Width Then lbl.Left = Me.Left - lbl.Width

lbl.Left = lbl.Left + 100

End Sub

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI

X As Long

Y As Long

End Type

Private Const HWND_TOPMOST = -1

Private Const SWP_NOMOVE = &H2

Private Const SWP_NOSIZE = &H1

Private Const Flags = SWP_NOMOVE Or SWP_NOSIZE

Dim bDown As Boolean

Dim pt As POINTAPI

Sub Restore()

Timer1.Interval = 0

Me.Left = 0

Me.Top = 0

Me.Height = 40

Me.Width = Screen.Width

Call SetWindowPos(Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, Flags)

lbl.Left = Me.Left - lbl.Width

End Sub

شكراااااااا

#25

الأول أنا شايف إن مشكلتك مع دوال API ..

يمكنك تحميل برنامج API Guide ليساعدك علي استكشاف تلك الدوال مع شرح وظيفتها ومعاملاتها..

دالة SetWindowPos تستخدم في تغيير موضع النافذة أو حجمها..

وإذا مررت لها القيمة (1-) المصرح عنها بـ HWND_TOPMOST في المعامل الثاني ومررت مثلا القيمة (1) في المعامل الأخير Flags

فسيتم وضع النافذة On Top أي في مقدمة جميع النوافذ..

دالة GetCursorPos تستخدم في معرفة موضع الإحداثين X,Y لمؤشر الماوس..

ويتم تخزين هذا الموضع في بنية من نوع POINT ..

Type POINT
	X As Long
	Y As Long
End Type

بالنسبة لإجراء الـ Timer

فيتم فيه أولا معرفة إحداثيات الماوس ..

GetCursorPos pt

ويتم تخزين تلك الإحداثيات في البنية pt ولاحظ أننا عرفنا pt علي أنها من نوع POINTAPI

وبالتالي سيكون لدينا الإحداثي X مخزن في (pt.X) ..

والإحداثي Y مخزن في (pt.Y)

الذي يهمنا هنا هو الإحداث Y للماوس .. وهذا حتي نعلم هل تجاوز الماوس حدود الفورم ..

فإذا كان تجاوزه فيتم الإجراء Check

وإذا لم يكن تجاوزه فلا يستدعي Check ويقوم بتنفيذ إجراء تحريك الليبل..

lbl.Left = lbl.Left + 100

مع التأكد من أنه إذا وصل الليبل لنهاية الفورم فيتم إعادته من جديد لبدايه الفورم

 If lbl.Left > Me.Width Then lbl.Left = - lbl.Width

فقط يبقي شرح إجراء معرفة هل تجاوز مؤشر الماوس Y حدود الفورم ..

اتفقنا علي أن الإحداث Y مخزن في المتغير pt.Y ولكن الدالة GetCursorPos تعيد القياس بوحدة البيكسل Pixel ..

بينما القياس الافتراضي للفورم لدينا هو بوحدة التويب Twip ..

وبالتالي نريد تحويل القياس pt.Y إلي وحدة التويب ومن ثم مقارنته بقياس الفورم.. أو العكس .. نحول قياس الفورم إلي وحدة البيكسل ومن ثم مقارنته بقياس

pt.Y.

سأعطيك مثال ..

إذا كانت إحداثيات الشاشة لديك 800*600 بيكسل ..

افتح مشروع جديد واكتب فيه الأتي :

Private Sub Form_Load()
 MsgBox Screen.Width & "*" & Screen.Height
End Sub

ستجد القيم المعادة هي 12000*9000 وليست 800*600

القيم التي عادت مقاسة بوحدة التويب ولتحويلها إلي بيسكل نقوم بقسمة القيم علي القيمة 15 هكذا ..

Private Sub Form_Load()
 MsgBox Screen.Width / 15 & "*" & Screen.Height / 15
End Sub

بمعني أخر أن كل 15 تويب يساوا واحد بيكسل وهذا لمعظم كروت الشاشة ..

والأفضل أن نقسم علي الخاصية Screen.TwipsPerPixelX بالنسبة لأي إحداث أفقي X

والقسمة علي الخاصية Screen.TwipsPerPixelY بالنسبة لأي إحداث رأسي Y

لأنه أعتقد أن هناك كروت تغيير تلك القيمة .. وإلا ما كانو وضعوا تلك الخصائص..

Private Sub Form_Load()
 MsgBox Screen.Width / Screen.TwipsPerPixelX & "*" & Screen.Height / 

Screen.TwipsPerPixelY
End Sub

المهم أن طول Height الفورم لدينا هو مثلا 930 بوحدة التويب وبالتالي نريد أن نتأكد من أن مؤشر الماوس Y الذي سنقوم بتحويل إلي وحدة التويب أيضا لم يتجاوز هذا

الطول..

ولهذا قمنا بكتابة الأتي :

 If pt.Y * Screen.TwipsPerPixelY > 930 Then Check

كان يمكننا بالطبع أن نحول وحدة القياس لدينا في الفورم إلي Pixel من خاصية ScaleMode وبالتالي ليس هناك داعي لهذا التحويل.

الآن في الإجراء Check ..

Sub Check()
 If bDown Then
	bDown = False
	Up
 End If
End Sub

أنا عامل متغير bDown من نوع Boolean .. هذا المتغير يكون قيمته True في حالة إذا كان الفورم تم إظهاره أي أنه Down..

ويكون قيمته False في حالة إذا كان الفورم UP

وفي هذا الإجراء يتم التأكد من أن الفورم في حالة Down

If bDown = True Then

نقوم بتغيير حالة المتغير bDown إلي False ..

bDown = False

ومن ثم نقوم بإستدعاء الإجراء UP.. والذي بدوره سيقوم بإستدعاء الإجراء Restore..

والذي نقوم فيه بإرجاع الفورم إلي حالته الأولي في وضع Up..

يبقي عند مرور الماوس علي الفورم فيتم تنفيذ الكود التالي :

 If Not bDown Then
	bDown = True
	Down
	Timer1.Interval = 100
 End If

بمعني أنه إذا لم يكن الفورم في وضع Down فيتم تغيير حالة المتغير bDown إلي True ثم إستدعاء الإجراء Down

ووضع قيمة للمؤقت كي يبدأ في فحص حالة الماوس وتحريك الليبل..

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…