the_king
مدیرکل انجمن
اگر در مورد TransparentControl خودتون حرف نمی زدید و روال عادی Invalidate شدن ها رو در نظر میگرفتیم، بله، حرفتون کاملا صحیح بود، چون Invalidate ای که شامل یک ناحیه مشخص میشه به اصطلاح رسم رو Clip می کنه به اون ناحیه و رسم فقط اون ناحیه Clip بروز میشه و بقیه قسمت ها نادیده گرفته میشه. اما در مورد TransparentControl شما که اینطور نیست، چون همانطور که قبلا هم متذکر شدم نباید ترتیب رسم پنجره ها رو بهم بزنید، همونکاری که شما در کلاس تون انجام میدهید. شما میایید ترتیب رسم پنجره ها رو قاطی پاتی میکنید، از یک طرف میایید میگید فقط یکجای خاص Invalidate بشه و از طرف دیگه پنجره ای که تو باغ نیست و اصلا ربطی به اون ناحیه نداره رو وادار به Invalidate می کنید.سلامی مجدد
استاد علی ، الان اینی که گفتم ، درسته؟
من الان فکر میکنم ، بازم عجیبه برام .
مثلا فرض کنیم دو تا کنترل TransparentControl را روی پنل ای داریم . وقتی موس را روی هر کدوم از شی TransparentControl میبریم ، بگیم که فقط اون بخشی از پنل که فقط همون کنترل TransparentControl هست را Invalidate کنه . پس قسمت دیگه ی پنل که یکی دیگه از کنترل TransparentControl هست ، اصلا Invalidate نمیشه که بخواد تغییری کنه!
شما در کدتون AllParents_Invalidated رو دارید، مگه نه؟ با OnParentChange مشخصا کنترل رو وادار می کنید که برای هر Invalidate شدن والدش AllParents_Invalidated رو اجرا کنه و مجددا رسم بشه، یعنی اگه برای رسم شهرام والدش Invalidate کرده به بهرام و بهزاد هم میگه خودتون رو Invalidate کنین، در حالی که رسم زیر بهرام و بهزاد نه پاک شده بوده و نه تغییری کرده بوده چون شما یک ناحیه دیگه رو Invalidate کرده بودید.
بهرام و بهزاد مجبور میشن رسم نیمه شفاف خودشون رو مجددا روی رسم قبلی خودشون بکشن و پر رنگ ترش کنن.