PDA

View Full Version : تغییر در vcl



حمیدرضاصادقیان
دوشنبه 23 مهر 1386, 07:48 صبح
سلام خدمت دوستان.من میخوام ببینم اگر در vcl تغییراتی بدم آیا در برنامه من هم تغییری میده؟
چه طور میشه مثلا در بعضی از کامپوننتها تغییراتی در Vcl ایجاد کرد؟مثلا بعضی از موارد گرید را تغییر بدیم.

Maisa pardaz
دوشنبه 23 مهر 1386, 09:09 صبح
آقای صادقیان عزیز
لطفا کمی در رابطه با سوالتون توضیح بفرمایید. متشکرم

rasool_brn
دوشنبه 23 مهر 1386, 10:19 صبح
من میخوام ببینم اگر در vcl تغییراتی بدم آیا در برنامه من هم تغییری میده؟
100%

چه طور میشه مثلا در بعضی از کامپوننتها تغییراتی در Vcl ایجاد کرد؟مثلا بعضی از موارد گرید را تغییر بدیم.
اشیا داخل VCL بعضی از توابع وخصوصیاتشونو از کلاسهای بالاتر به ارث می برند , این روند تا کلاس Tobject که کلاس مادر همه کلاسهاست پیش می ره.اگه بخوای تغییری در کامپوننتها بدی باید کلاسهای بالاترشم دستکاری کنی. پس توصیه می کنم تا وقتی که کاملا حرفه ای نشدی این کارو انجام ندی.

حمیدرضاصادقیان
دوشنبه 23 مهر 1386, 13:35 عصر
در زمینه حرفه ای شدن مشکلی نیست. اینقدر دستکاری میکنم تا حرفه ای بشم. :)

ولی مثلا در کلاس TCustomgrid یک procedure تعریف شده به نام Setdefaultrowheight که در بخش private هست من اول اومدم در قسمت public قرار دادم که نتونستم ازش استفاده کنم ولی یک property بود که هنگامی که یک شی از کلاس tdbgrid مشتق کردم تونستم از اون استفاده کنم که اون تابع این procedure را صدا میزد.حالا در dbgrid شما وقتی که خط های افقی یا عمودی را حذف میکنید title گرید به صورت non 3d در میاد و flat میشه ولی وقتی دو خط باهم هست به صورت 3d میشه.چطور میشه این رو حذفش کرد.میشه با ایجاد یک شی از این کلاس دستکاری کرد(بدون نیاز به تغییر vcl )
با تشکر.

rasool_brn
دوشنبه 23 مهر 1386, 15:42 عصر
سوالت رو خوب متوجه نشدم .اگه اشتباه نکرده باشم منظورت اینه که خودت یه شی از کلاس dbgrid ایجاد کنی. بازم فرقی نداره چه خودت این کارو بکنی چه دلفی هیچ تفاوتی ایجاد نمیشه(یعنی tdbgrid1 : tdbgrid با x1 : dbgrid برابره) .
اگرم منظورت اینه که یه کلاس رو خودت ایجاد کنی و اونو از کلاس tdbgrid مشتق کنی بازم فرقی با کلاس tdbgrid نداره مگه اینکه خودت توابع یا خصوصیاتی و بهش اضافه کنی.
همونطور که گفتم کلاسهای VCL یه سلسله مراتب کلاسو تشکیل میدن , هر کلاسم خصوصیات کلاس والد رو به ارث می بره.اگه بخوای کلاسی رم از کلاسهای VCL مشتق کنی بازم خصوصیات و توابع اونارو به ارث میبره .

وقتی که خط های افقی یا عمودی را حذف میکنید title گرید به صورت non 3d در میاد و flat میشه ولی وقتی دو خط باهم هست به صورت 3d میشه.چطور میشه این رو حذفش کرد
اگه اشتباه نکنم این خصوصیت رو بشه از داخل Object Inspector کنترل کرد.

حمیدرضاصادقیان
دوشنبه 23 مهر 1386, 18:34 عصر
ممنون. نه دوست عزیز نمیشه. بعد هم تفاوت داره.وقتی که شما یک کلاس از dbgrid مشتق میکنی توابع protected رو دراختیار شما میگذاره..شما در حالت عادی نمیتونی اندازه ردیفهای یک گرید رو عوض کنی ولی با روش زیر میتونی.


type=Thackgrid=class(Tdbgrid)

..
Thackgrid(dbgrid1).rowhieght:=20;

rasool_brn
دوشنبه 23 مهر 1386, 21:28 عصر
بله دوست عزیز روشی که شما گفتید کاملا عملیه , ولی به این نکته هم باید توجه کنین که دستیابی به داده های محافظت شده یه کلاس دیگه یه جور هک می مونه و بر خلاف بر نامه ویسی شی گراست . البته خود طراحان VCL هم از شیوه تو ساختار VCL استفاده کردن ولی تاکیدم کردن که تا جایی که امکان داره باید از این شیوه استفاده نکرد.

vcldeveloper
سه شنبه 24 مهر 1386, 01:39 صبح
در زمینه حرفه ای شدن مشکلی نیست. اینقدر دستکاری میکنم تا حرفه ای بشم.
حرفه ایی شدن به اینجور کارا نیست. بگردیدی ببینید چند تا برنامه نویس مثلا حرفه ایی کلاس های VCL رو تغییر دادند که شما نفر بعدی شون باشید؟!!
اگر می خواستید حرفه ایی بشید، روی مفاهیم شی گرایی بخصوص "ارث بری" مطالعه می کردید و متوجه می شدید برای همچین تغییراتی کلاس جدید از یکی از کلاس های پایه VCL مشتق می گیرند، نه اینکه کلاس موجود در VCL را تغییر بدند!!!
تنها دلیلی که میشه برای تغییر VCL پیدا کرد اینه که باگی در اون پیدا کرده باشید، و بخواید باگ مربوطه را به نوعی برطرف کنید، نه اینکه فیلد Private رو ببرید در بخش Public !!!