PDA

View Full Version : نحوه Override کردن CreateParams برای یک TTabSheet !



Mahmood_M
جمعه 26 مهر 1387, 00:39 صبح
با سلام ...
کسایی که با CreateParams و دستکاری Params آشنایی دارن ، لطفا راهنمایی کنن ...
با تغییر مقدارهای Params و Override کردن CreateParams یک WinControl با Params تغییر داده شده ، می شه برخی خصوصیات اون WinControl ( مثلا Form ) رو تغییر داد ...
برای Override کردن CreateParams یک فرم میشه ساختاری مثل زیر ایجاد کرد :
1.


type
TFrm = class(TForm)
private
procedure CreateParams(var Params : TCreateParams); Override;
{ Private declarations }
public
...
2.


procedure TProjectFrm.CreateParams(var Params : TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_OVERLAPPEDWINDOW;
end;
یعنی میشه تعریف تابع رو در قسمت Private فرم انجام داد و بعد تابع جدید با مقادیر جدید رو هم نوشت ...
حالا سئوال : !
من می خوام یک TTabSheet که روی فرم قرار داره رو یکی از خصوصیاتش رو تغییر بدم ، درواقع می خوام اون رو به صورت یک فرم MDI ( لبه دار ) در بیارم :

Params.ExStyle := Params.ExStyle or WS_EX_OVERLAPPEDWINDOW;چطور میتونم برای این کامپوننت عمل Override کردن CreateParams رو انجام بدم ؟
باید سورسش رو تغییر بدم ؟

یک سئوال مرتبط :
آیا Style ای وجود داره که با دادن مقدار اون به Params.ExStyle ، بشه صفحه فرم رو به صورت نقطه گذاری شده در آورد ، یعنی اینطوری :


http://nabegheh.parsaspace.com/Form.jpg

منتظر راهنمایی دوستان هستم ...

موفق ترین باشید ...

vcldeveloper
جمعه 26 مهر 1387, 08:01 صبح
برای این کار باید یک کلاس جدید از TTabSheet مشتق بشه، و متد CreateParams مربوط به آن Override بشه. اونوقت از این کلاس فرزند برای ساخت صفحات جدید استفاده بشه:


TMyTabSheet = class(TTabSheet)
protected
procedure CreateParams(var Params : TCreateParams); override;
end;

و به این شکل صفحات جدید ساخته بشه:


procedure TForm1.Button1Click(Sender: TObject);
var
MyTab : TMyTabSheet;
begin
MyTab := TMyTabSheet.Create(Self);
MyTab.PageControl := PageControl1;
end;

در ضمن، CreateParams در بخش Protected تعریف میشه، نه Private.

Mahmood_M
جمعه 26 مهر 1387, 14:39 عصر
ممنون جناب کشاورز ، اما مشکل من اینه که نمی خوام در زمان اجرا TabSheet رو بسازم ، آیا راهی وجود داره مثل فرم عمل بشه و نیازی به Create در زمان اجرا نباشه ؟!

با تشکر ...

...

Mahmood_M
جمعه 26 مهر 1387, 16:18 عصر
مشکل حل شد ...

موفق باشید ...