Master_MTA Posted September 13, 2018 Share Posted September 13, 2018 سلام عليكم شباب كيف الحال ابي مساعدتكم بعمليه حسابيه كلكم تعرفون اني اسوي مكتبة دي اكس الحمدلله لكن مشكلة السكرول بار حق القريد لست تعبتني فابي حل للمساله الحسابيه ذي صوره للتوظيح Link to comment
SycroX Posted September 13, 2018 Share Posted September 13, 2018 4 minutes ago, Master_MTA said: سلام عليكم شباب كيف الحال ابي مساعدتكم بعمليه حسابيه كلكم تعرفون اني اسوي مكتبة دي اكس الحمدلله لكن مشكلة السكرول بار حق القريد لست تعبتني فابي حل للمساله الحسابيه ذي صوره للتوظيح وضح اكتر اقدر اساعدك في الحساب Link to comment
Master_MTA Posted September 13, 2018 Author Share Posted September 13, 2018 3 minutes ago, #َxLysandeR said: وضح اكتر اقدر اساعدك في الحساب اخيرا اصل بعيد عنك انا ساقط ماث في هندسه بس عدته وجبت فيه B+ جيد جدا مرتفع احم احم بس برضو مش نافع هههههه ازاي اوضحلك اكتر مش فاهم انته فاهم فكرة سكرول بار بتاعت الجريد لست هيا دي Link to comment
KhaledX Posted September 13, 2018 Share Posted September 13, 2018 4 minutes ago, Master_MTA said: اخيرا اصل بعيد عنك انا ساقط ماث في هندسه بس عدته وجبت فيه B+ جيد جدا مرتفع احم احم بس برضو مش نافع هههههه ازاي اوضحلك اكتر مش فاهم انته فاهم فكرة سكرول بار بتاعت الجريد لست هيا دي وريع لاتتكلم مصري , في طريقة حلوه لكن ماتوقع انها بتنفعك انقلع ديسكورد اعلمك عنها Link to comment
Master_MTA Posted September 13, 2018 Author Share Posted September 13, 2018 Just now, SuperX said: وريع لاتتكلم مصري , في طريقة حلوه لكن ماتوقع انها بتنفعك انقلع ديسكورد اعلمك عنها ههههههههههه امال اكلم ايه Link to comment
iMr.WiFi..! Posted September 13, 2018 Share Posted September 13, 2018 (edited) اتوقع اني اقدر اساعدك بس انا مافهمت وش تبي وضح اكثر /: Edited September 13, 2018 by iMr.WiFi..! Link to comment
Master_MTA Posted September 13, 2018 Author Share Posted September 13, 2018 1 minute ago, iMr.WiFi..! said: اتوقع اني اقدر اساعدك بس انا مافهمت وش تبي وضح اكثر /: يا شباب والله كل اللي ابيه لو تعرفونها عباره عن نسبة وتناسب ابي اسوي علاقه نسبيه بين السكرول بار والstart x حق ال rows بس انا بالفعل خلصت 3/4 من المهمه خليت حجم سكرول بار يجي نسبيا نفس حجم المنطقه الزايده اللي بيصيرلها سكرول + سويت ايفنت خاص بالسكرول بار onClientDxScrollBarScrolled ويجيبلي نسبة مئوية بعد باللي صارله سكرولد+ يقوله هل هو سحبه لفوق ولا تحت خلصت كل ذا ناقص اني اخلي النسبة المئويه ذي ترفع الrows حق القريد لست واول ما توصل الجريد لست الروز لاخرها يكون السكرول وصل لاخره هنا الفكره الكود للي مب فاهمني addEventHandler('onClientDxScrollBarScrolled',root,function(pr,inc) local baba=getElementParent(source) if baba and getElementType(baba)=='dxGridList' then local fin=((Elements[baba].rows[#Elements[baba].rows][1].y+Elements[baba].rows[#Elements[baba].rows][1].height-(Elements[baba].y+(Elements[baba].height*5/100)))*pr/100)/#Elements[baba].rows for k,v in ipairs(Elements[baba].rows)do for m,l in ipairs(v)do if inc then Elements[baba].rows[k][m].y=Elements[baba].rows[k][m].y-(fin) else Elements[baba].rows[k][m].y=Elements[baba].rows[k][m].y+(fin) end end end end end) هذي محاوله فاشله مني Link to comment
iMr.WiFi..! Posted September 13, 2018 Share Posted September 13, 2018 (edited) شوف انا سويت طريقة بحيث اني معتمد على الجداول ..راح اوضح الطريقة بالرسم : -- اتمنى الطريقة تفيدك . ^ طبعا الي حطيته مجرد مثال انت المفروض مايجيب الا اخر 3 ارقام او اولها . Edited September 13, 2018 by iMr.WiFi..! Link to comment
Master_MTA Posted September 13, 2018 Author Share Posted September 13, 2018 (edited) 1 minute ago, iMr.WiFi..! said: -- اتمنى الطريقة تفيدك . wow تصدق ولا جات بمخي طريقة فننااااااااانه thx بجرب واقولك زبطت معي او لا انا اصلا مسوي فنكشن يجيبلي اقصى رو يمكن عرضه لول Edited September 13, 2018 by Master_MTA 1 Link to comment
SycroX Posted September 13, 2018 Share Posted September 13, 2018 local testTable = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22} local scrollLevel = 0 local currentLevel = 0 local totalRows = 7 local selected = {} local addedValue = 0 function isMouseInPosition ( x, y, width, height ) if ( not isCursorShowing( ) ) then return false end local sx, sy = guiGetScreenSize ( ) local cx, cy = getCursorPosition ( ) local cx, cy = ( cx * sx ), ( cy * sy ) if ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) then return true else return false end end addEventHandler("onClientRender", root, function() dxDrawRectangle(0, 240, 800, 121, tocolor(0, 0, 0, 150), false) local tableSize = #testTable if tableSize > totalRows then scrollLevel = (tableSize/totalRows)-1 if scrollLevel > math.floor((tableSize/totalRows)-1) then scrollLevel = scrollLevel + 1 end end if currentLevel == 0 then local startIndex = 1 local endIndex = totalRows for index = startIndex, endIndex do if testTable[index] and testTable[index] ~= nil then if isMouseInPosition(20+((index-1)*107)+addedValue, 250, 107, 101) or (selected[1] == 20+((index-1)*107)+addedValue and selected[2] == 250 and selected[3] == 107 and selected[4] == 101) then dxDrawRectangle(20+((index-1)*107)+addedValue, 250, 107, 101, tocolor(0, 0, 0, 150), false) dxDrawText(tostring(testTable[index]), 20+((index-1)*107), 250, 127+(((index-1)*107)), 350, tocolor(150, 150, 150, 255), 1.00, "default", "center", "center", false, false, false, false, false) else dxDrawRectangle(20+((index-1)*107)+addedValue, 250, 107, 101, tocolor(62, 194, 68, 150), false) dxDrawText(tostring(testTable[index]), 20+((index-1)*107), 250, 127+(((index-1)*107)), 350, tocolor(255, 255, 255, 255), 1.00, "default", "center", "center", false, false, false, false, false) end end end elseif currentLevel > 0 then local startIndex = currentLevel*totalRows+1 local endIndex = (currentLevel+1)*totalRows for index = startIndex, endIndex do local drawIndex = index-(totalRows*currentLevel) if testTable[index] and testTable[index] ~= nil then if isMouseInPosition(20+((drawIndex-1)*107), 250, 107, 101) or (selected[1] == 20+((drawIndex-1)*107) and selected[2] == 250 and selected[3] == 107 and selected[4] == 101) then dxDrawRectangle(20+((drawIndex-1)*107), 250, 107, 101, tocolor(200, 200, 200, 150), false) dxDrawText(tostring(testTable[index]), 20+((drawIndex-1)*107), 250, 127+(((drawIndex-1)*107)), 350, tocolor(255, 255, 255, 255), 1.00, "default", "center", "center", false, false, false, false, false) else dxDrawRectangle(20+((drawIndex-1)*107), 250, 107, 101, tocolor(62, 194, 68, 150), false) dxDrawText(tostring(testTable[index]), 20+((drawIndex-1)*107), 250, 127+(((drawIndex-1)*107)), 350, tocolor(255, 255, 255, 255), 1.00, "default", "center", "center", false, false, false, false, false) end end end end end ) bindKey("a", "down", function() currentLevel = currentLevel - 1 if currentLevel < 0 then currentLevel = scrollLevel end end ) bindKey("d", "down", function() currentLevel = currentLevel + 1 if currentLevel > scrollLevel then currentLevel = 0 end end ) addEventHandler("onClientClick", root, function(b,s) if b == "left" and s == "down" then selected = {} local startIndex, endIndex if currentLevel > 0 then startIndex = currentLevel*totalRows+1 endIndex = (currentLevel+1)*totalRows else startIndex = 1 endIndex = totalRows end for index = startIndex, endIndex do local drawIndex if currentLevel > 0 then drawIndex = index-(totalRows*currentLevel) else drawIndex = index end if testTable[index] and testTable[index] ~= nil then if isMouseInPosition(20+((drawIndex-1)*107), 250, 107, 101) then selected = {20+((drawIndex-1)*107), 250, 107, 101} end end end end end ) بص هو واي فاي ساعدك بس صراحه مش عايز امسح الي كتبته فذا مثال كنت مسويه زمان لما كنت بحاول اسوي جريدليست بس بالعرض عشان احط فيه صور و كذا بما اني معتزل قلت ممكن يفيدك او تاخد منه فكره اسهل عن السكرول بار 1 Link to comment
Master_MTA Posted September 13, 2018 Author Share Posted September 13, 2018 Just now, #َxLysandeR said: بما اني معتزل قلت ممكن يفيدك او تاخد منه فكره اسهل عن السكرول بار حبيبي تسلم لكن الفكره مش هنا انا ممكن اعمله لو ل 1 جريد لست لكن انا عايز اعمله لاي جريد لست لول فعشان كده عايزه نسبة وتناسب هوا ده اللي بكلم فيه لكن عالعموم تسلم 1 Link to comment
SycroX Posted September 13, 2018 Share Posted September 13, 2018 1 minute ago, Master_MTA said: حبيبي تسلم لكن الفكره مش هنا انا ممكن اعمله لو ل 1 جريد لست لكن انا عايز اعمله لاي جريد لست لول فعشان كده عايزه نسبة وتناسب هوا ده اللي بكلم فيه لكن عالعموم تسلم اها معلش فهمت غلط , مش مشكله خلاص واي فاي عمل الواجب معك 1 Link to comment
Master_MTA Posted September 13, 2018 Author Share Posted September 13, 2018 1 minute ago, #َxLysandeR said: اها معلش فهمت غلط , مش مشكله خلاص واي فاي عمل الواجب معك حبيبي ولا يهمك تسلم منا بجرب طريقة وايفاي اهو ادعي بس ههههه Link to comment
Master_MTA Posted September 14, 2018 Author Share Posted September 14, 2018 11 hours ago, iMr.WiFi..! said: راح اوضح الطريقة بالرسم : لم تزبط معنا لكني سويت طريقة غيرها شوي مسوي 3 تيبل الاوله اللي فيها الروز اللي مب ظاهره فوق الرو الظاهره حاليا الثانيه فيها الرو الظاهره حاليا والثالثه فيها الرو اللي مب ظاهره تحت الرو الظاهره حاليا هههه عالعموم الطريقه معقدة شوي لكني قريب من اني اخلصها خلاص خلصتها يعتبر لكن في مشكله مع نسبة السكرول بار بس ازابطها والدنيا تمام +_+ Link to comment
H25 Posted September 14, 2018 Share Posted September 14, 2018 احسب مجموع الارتفاعات لكل الروز واقسم الناتج على ١٠٠ واضربه في السكرول نفترض ان ارتفاع الرو الواحد 25 وعدد الروز 6 مجموع الارتفاعات بيصير ١٥٠ ١٥٠/١٠٠ = ١.٥ والسكرول ٥٠ ١.٥*٥٠ = ٧٥ 75 هذي الاحداثي الرأسي والحين تحتاج حساب بسيط عشان تعرف رقم الرو الي عند 75 تقسم الاحداثي على ارتفاع الرو الواحد الي هو 25 75/25 = 3 الجواب معقول لان السكرول في النص والثلاثة نص الستة بس لاتنسى تستخدم math.floor لان ممكن يطلع رقم الرو بفاصلة وطبعاً في النهاية تسوي لوب يبدأ من 3 الي حسبناها Link to comment
iMr.WiFi..! Posted September 14, 2018 Share Posted September 14, 2018 (edited) 2 hours ago, Master_MTA said: لم تزبط معنا لكني سويت طريقة غيرها شوي مسوي 3 تيبل الاوله اللي فيها الروز اللي مب ظاهره فوق الرو الظاهره حاليا الثانيه فيها الرو الظاهره حاليا والثالثه فيها الرو اللي مب ظاهره تحت الرو الظاهره حاليا هههه عالعموم الطريقه معقدة شوي لكني قريب من اني اخلصها خلاص خلصتها يعتبر لكن في مشكله مع نسبة السكرول بار بس ازابطها والدنيا تمام +_+ مايحتاج 3 تيبلز بالكثير تقدر تسويه بواحد بس اذا تبي يعني توزع القيم بشكل افضل استعمل جدولين الجدول الاول تكون فيه كافة قيم الجريد ليست والجدول الثاني القيم الي تظهر فقط . - دون ان انسى ذكر طريقة حسين الي ذكرها قبل تعتبر كويسة بس استعمل الي يعجبك لان طريقة حسين بالحسابات وانا بالجداول .. Edited September 14, 2018 by iMr.WiFi..! Link to comment
N3xT Posted September 14, 2018 Share Posted September 14, 2018 متغير واحد للسكرول وتسوي اللوب للجدول من بداية السكرول وعاد بعدين تعدله مثل الماكس حق عدد الروز وكذا Link to comment
Master_MTA Posted September 14, 2018 Author Share Posted September 14, 2018 5 hours ago, H25 said: احسب مجموع الارتفاعات لكل الروز واقسم الناتج على ١٠٠ واضربه في السكرول نفترض ان ارتفاع الرو الواحد 25 وعدد الروز 6 مجموع الارتفاعات بيصير ١٥٠ ١٥٠/١٠٠ = ١.٥ والسكرول ٥٠ ١.٥*٥٠ = ٧٥ 75 هذي الاحداثي الرأسي والحين تحتاج حساب بسيط عشان تعرف رقم الرو الي عند 75 تقسم الاحداثي على ارتفاع الرو الواحد الي هو 25 75/25 = 3 الجواب معقول لان السكرول في النص والثلاثة نص الستة بس لاتنسى تستخدم math.floor لان ممكن يطلع رقم الرو بفاصلة وطبعاً في النهاية تسوي لوب يبدأ من 3 الي حسبناها انت جبت النص الاول حق طريقتي بالفعل لكن طريقة العرض حقتي تختلف 2 hours ago, N3xT said: متغير واحد للسكرول وتسوي اللوب للجدول من بداية السكرول وعاد بعدين تعدله مثل الماكس حق عدد الروز وكذا نفس فكرتة حسين 4 hours ago, iMr.WiFi..! said: مايحتاج 3 تيبلز بالكثير تقدر تسويه بواحد بس اذا تبي يعني توزع القيم بشكل افضل استعمل جدولين +_+ مشكور انا خلصت تقريبا Link to comment
Popular Post </Mr.Tn6eL> Posted September 14, 2018 Popular Post Share Posted September 14, 2018 تحتاج عنصرين اول شي شريط التمرير والزر حق السحب كما في الصورة شريط التمرير راح يكون له اربع متغيرات اللي هي الاحداثيات والطول والعرض x, y, w, h راح يكون له متغيرين thumb وزر شريط التمرير اللي اسمه thumb_y اول شي احداثياته y بما اننا راح نسوي شريط تمرير عمودي راح نستخدم الاحداثي والعكس مع الافقي THUMB_S اما المتغير الثاني اللي هو حجمه بما اننا نستخدم ثوابت فالأفضل نستخدم اسم متغير بحجم كبير progress راح يكون عندنا متغير ثاني وهو نسبة المثوية للشريط تكون اسمها يكون كل شي بالجدول التالي SCROLLBAR = { x = 0, y = 0, -- احداثيات الشريط w = 13, h = 480 -- الطول والعرض thumb_y = 0, -- الاحداثيات للزر progress = 0, -- نسبة التقدم THUMB_SIZE = 27, -- حجم الزر hold = true, -- راح اشرحها بعدين } وبسطت المفهوم بصورة Spoiler اما بالنسبة للعملية الحسابية عشان تحريك الزر الازرق بسيطة اول شي نحتاج نعرف مكان الماوس راح نستخدم مكان الماوس في عمليتين 1- التحقق من ان الماوس داخل المنطقة الرمادية عند الضغط 2- بما اننا نستخدم شريط تمرير عمودي y ننقل الزر الازرق لاحدثيات الماوس راح نستخدم وظيفتين getCursorPosition getKeyState - mouse1(زر الماوس الايسر) وتكون حسابات الطريقة كالآتي hold عند الضغط على المنطقة الرمادية بالزر الايسر بالماوس نسوي متغير لكن عند افلات زر الماوس نلغي المتغير طبعا نحن نريد يفلت زر الماوس باي منطقة شرط يكون ضغط في البداية على المنطقة الرمادي كالآتي hold يكون عملية تحويل المتغير function render() local cx, cy = getCursorPosition() -- نجلب احداثيات الماوس -- نتحقق ان احداثيات الماوس داخل المربع المادي local hovered = cx >= SCROLLBAR.x and cx <= SCROLLBAR.h and cy >= SCROLLBAR.y and cy <= SCROLLBAR.h if hovered and getKeyState "mouse1" then -- نتحقق كمان ان الماوس مضغوط SCROLLBAR.hold = true -- hold نفعل قيمة end if hold and not getKeyState "mouse1" then -- hold اذا الاعب افلت زر الماوس وكان متفعل متغير SCROLLBAR.hold = false -- نلغي المتغير end -- hold if SCROLLBAR.hold then -- اذا تحقق الشرط هذا كما شرحنا سابقا بامكاننا نجري حساباتنا SCROLLBAR.thumb = ... SCROLLBAR.progress = ... end end onClientClick طبعا في طرق كثيرة مثلا باستخدام حدث لكن اخترت هذي عشان يكون كل الحسابات في مكان واحد ننتقل الى المرحلة المعقدة وهي عن الضغط او السحب نريد نقل الزر الازرق الى الاحداثيات المطلوبة لكن في مشاكل الأولى قد يتعدى الزر الازرق المنطقة الرمادية يكون فوق المنطقة او تحتها y نحتاج نعمل الحد الأدنى للإحداثيات وراح يكون اقل حد هو احداثيات المنطقة الرمادية وننقصه من طول الزر الازرق y اما للحد الأقصى هو طول المنطقة الرمادية مجموعة مع احداثيات يكون y : الحد الأدنى y+h-THUMB_SIZE : الحد الأقصى صار كذا عندنا نطاق لمكان الشريط الازرق يوضع فيه راح نستخدم math.max, math.min كذا حلينا المشكلة الأولى اما المشكلة الثانية هي التوسيط لما ننقل الزر الازرق لاحداثيات الماوس تصير مشكلة كما في الصورة Spoiler الحل بسيط ناخذ احداثيات الماوس وننقصها من نص حجم الزر الازرق كما في المعادلة التالية cy-(THUMB_SIZE/2) يصير كذا حلينا كل المشاكل اللي تتعلق بالنقل تصير المعادلة الحاسبية لاحداثيات الزر الازرق كالتالي --[[ نتأكد ان قيمة احداثيات الماوس الازرق اصغر من الحد الأقصى واكبر من الحد الأدنى لنضعها في نطاق محدد لاتخرح عنه math.min( math.max( احداثيات الزر الازرق, الحد الأدنى ), الحد الأقصى ) ]] SCROLLBAR.thumb_y = math.min(math.max(cy-(t/2), SCROLLBAR.y), SCROLLBAR.y+SCROLLBAR.h-SCROLLBAR.THUMB_SIZE) اما بالنسبة لحساب النسبة المئوية نحتاج نخليه احداثيات الزر الازرق بالنسبة لاحداثيات المنطقة الرمادية يعني لو كانت احداثيات المنطقة الرمادية هي 100 واحداثيات الزر الازرق هي 150 فتصير الاحداثيات 50 بالنسبة الى المنطقة الرمادية y بالمتغير thumb_y يعني نحتاج نطرح المتغير كذا اعطانا قيمة اولى لحساب النسبة المثوية لكن نحتاج الى قيمة قصوى ثابتة وهي طول المنطقة الرمادية منقوصة من حجم الزر الازرق تصير الحسبة كالتالي SCROLLBAR.progress = math.floor((SCROLLBAR.thumb_y-SCROLLBAR.y)/(SCROLLBAR.h-SCROLLBAR.THUMB_SIZE)*100) يكون الكود النهائي كالتالي -- اتجاه شريط التمرير راح يكون عمودي -- y ومتغيرات لاحداثي x يعني راح نستخدم ثوابث لاحداثي SCROLLBAR = { x = 0, y = 0, -- احداثيات الشريط w = 13, h = 480 -- الطول والعرض thumb_y = 0, -- الاحداثيات للزر الازرق progress = 0, -- النسبة المئوية THUMB_SIZE = 32, -- حجم الزر hold = false, -- راح اشرحها بعدين } function render() -- onClientRender local cx, cy = getCursorPosition() -- نجلب احداثيات الماوس -- نتحقق ان احداثيات الماوس داخل المربع المادي local hovered = cx >= SCROLLBAR.x and cx <= SCROLLBAR.h and cy >= SCROLLBAR.y and cy <= SCROLLBAR.h if hovered and getKeyState "mouse1" then -- نتحقق كمان ان الماوس مضغوط SCROLLBAR.hold = true -- hold نفعل قيمة end if hold and not getKeyState "mouse1" then -- hold اذا الاعب افلت زر الماوس وكان متفعل متغير SCROLLBAR.hold = false -- نلغي المتغير end -- hold if SCROLLBAR.hold then -- اذا تحقق الشرط هذا كما شرحنا سابقا بامكاننا نجري حساباتنا --[[ نتأكد ان قيمة احداثيات الماوس الازرق اصغر من الحد الأقصى واكبر من الحد الأدنى لنضعها في نطاق محدد لاتخرح عنه math.min( math.max( احداثيات الزر الازرق, الحد الأدنى ) الحد الأقصى ) ]] SCROLLBAR.thumb_y = math.min(math.max(cy-(t/2), SCROLLBAR.y), SCROLLBAR.y+SCROLLBAR.h-SCROLLBAR.THUMB_SIZE) -- current/max -- المعادلة ذي تعطينة نسبة لشيء بالنسبة لشيء -- current : هي قيمة احداثيات الزر الازرق منقوصة من احداثيات المنطقة الرمادي عشان تعطينا الاحداثيات بالنسبة للمنطقة الرمادية -- max : هي القيمة الثابتة اللي بنينا عليها النسبة المئوية -- يكون الناتج نضربه ب100 يعطينا النسبة المئوية -- math.floor يعطينا رقم بدون كسور SCROLLBAR.progress = math.floor((SCROLLBAR.thumb_y-SCROLLBAR.y)/(SCROLLBAR.h-SCROLLBAR.THUMB_SIZE)*100) end -- الزر الازرق dxDrawRectangle(SCROLLBAR.x, SCROLLBAR.thumb_y, SCROLLBAR.w, SCROLLBARTHUMB_SIZE, 0x03a9f4ff) -- شريط التمرير اللي هي المنطقة الرمادية dxDrawRectangle(SCROLLBAR.x, SCROLLBAR.y, SCROLLBAR.w, SCROLLBAR.h, 0xb3b3b3ff) -- النسبة المئوية dxDrawText(SCROLLBAR.progress, SCROLLBAR.x, SCROLLBAR.y, SCROLLBAR.x+w, SCROLLBAR.y+SCROLLBAR.h, 0xffffffff, 1, font, "center", "center") end 4 Link to comment
Master_MTA Posted September 14, 2018 Author Share Posted September 14, 2018 26 minutes ago, </Mr.Tn6eL> said: اما بالنسبة لحساب النسبة المئوية يعطيك العافيه حبيبي ما قصرت لكني حليت المشكله لكن كذا بطور من الجريد لست بطريقتك باذن الله مشكور Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now