PDA

View Full Version : Components & DFM



MH2538
یک شنبه 04 مرداد 1383, 20:08 عصر
سلام
باز هم فرض کنید در حال طراحی یک کامپننت هستید . این بار تصمیم می گیرید اشیا (دکمه ها ، رادیو باتن ها و ...) را در داخل یک DFM قرار دهید و سپس از طریق این فرم (dfm.*) اشیاء مورد نظر خود را کنترل نمائید . راه حل پیشنهادی شما چیست ؟
یادآوری . قرار نیست با این کامپننت هیچ فرمی نمایش داده شود.

_alish_
دوشنبه 05 مرداد 1383, 09:59 صبح
با سلام
شما می توانید یک فرم ایجاد کنید و سپس کلیه عناصر مورد نیاز خود را در آن قرار دهید مانند یک تصویر به نام Img1 و نام فرم ResFrm سپس یک Pakage ساخته و یونییت کامپوننت و یونیت و فرم را هم در آن قرار دهید و در Constructor کامپوننت خود یا جای مورد نظر دیگر:


Constructor Create(...);
begin
...
ResFrm:=TResFrm.creat(nil(;
FImage:=TImage.Creat(Self);
FImage.Picture.Assign(ResFrm.Img1.Picture);
...
end;


موفق باشی

end;

مهدی کرامتی
دوشنبه 05 مرداد 1383, 11:34 صبح
من صورت سوال را متوجه نمیشوم.

MH2538
دوشنبه 05 مرداد 1383, 20:30 عصر
سلام
خدمت مدیر عزیز سایت عرض شود که :
فرض کنید بجای اینکه تمامی کنترل ها (دکمه ها و لیست باکس ها و ...) را در خود کامپننت مقدار دهی کنید بخواهید آنها را از درون یک DFM کنترل کنید .
یکی از روش ها که تقریبا کامل هم هست روش Alish است که در بالا توضیح داد.
با تشکر

مهدی کرامتی
دوشنبه 05 مرداد 1383, 21:38 عصر
منظورتون مقداردهی از طریق Object Inspector دلفی است؟

MH2538
دوشنبه 05 مرداد 1383, 22:15 عصر
نه -
ظاهرا این سئوال من و ضعف من در بیان صحیح آنها داره مشکل ساز می شه .
به همین دلیل سعی می کنم فردا در اسرع وقت یه sample در همین بخش بذارم . شاید مشکل حل شه
باز هم معذرت می خوام
---------------------------------------------------------------
اما برای نمونه بیشتر :
شما معمولا event های object ها رو در زمان کامپننت نویسی از درون خود کامپننت کنترل میکنید . مثلا
یه object به نام Button1 داریم و تابع کلیک آن رو هم بصورت (...)Button1Click می نویسیم .اما تا حالا (اگه یه کم کنجکاوی کرده باشید ) حتما دیده اید که در DFM مربوط به فرم و این شی این دستورات را خواهید دید :


object Form1: TForm1
Left = 192
Top = 114
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 112
Top = 32
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
end
وقتی Application می نویسید کنترل و هماهنگی object ها با فرم به عهده برنامه است مثلا در برنامه
;( procedure Button1Click(Sender: TObject تابعی برای کنترل Event کلیک است که با DFM بالا کاملا در ارتباط است.
اما در زمان کامپننت نویسی شرایط کمی فرق خواهد کرد و کمی از بار کنترل این کد به عهده برنامه نویس خواهد بود .
امیدوارم با این توضیح کمی موضوع رو روشن تر کرده باشم.
موفق باشید.<span dir=ltr></span><span dir=ltr></span>

SReza1
دوشنبه 05 مرداد 1383, 22:37 عصر
یک کلک جالب برای اینکه شما چیزایی رو از Object ها بدونید اینه که شما مثلا یک دکمه رو انتخاب کنید. روی اون Ctrl +C بزنید . بعد بروید در Source دلفی. Ctrl + V بزنید. ببیندی چی میشه!

مهدی کرامتی
دوشنبه 05 مرداد 1383, 23:31 عصر
ببخشید، اما:

1- من باز هم نمیفهمم صورت مسئله چیه.

2- کاربرد چنین چیزی چیه؟

_alish_
سه شنبه 06 مرداد 1383, 09:01 صبح
با سلام
begin
بابا خیلی زرنگی به فکر من نرسیده بود بیا درست مانند توضیح بال من است بخوان من برای Font,Onclick با یک ShowMessage در فرم ResFrm امتحان کردم شد مطمئنم برای بقیه هم میشه


ResFrm&#58;=TResFrm.Create&#40;nil&#41;;
bb&#58;=TButton.create&#40;Self&#41;;
bb.Parent&#58;=self;
bb.Caption&#58;='dfgdfgd';
bb.Font&#58;=ResFrm.Button1.Font;
bb.visible&#58;=True;
bb.BringToFront;
bb.OnClick&#58;= ResFrm.Button1Click;


موفق باشی
end.

MH2538
سه شنبه 06 مرداد 1383, 18:09 عصر
سلام
جواب همینه که alish نوشته
اما این که به چه دردی می خوره .
1-در حالاتی که کنترل های کامپننت شما استاتیک است یا حداقل همیشه از محل ثابتی شروع می شن این روش استفاده داره
2- تعریف رویه های مربوط به event های کنترل ها در داخل آن می نویسن و از داخل بدنه کامپننت فقط اونها رو اداره می کنن . به عبارتی از شلوغ شدن کد هم جلوگیری می کنه
سعی می کنم به sample کامل و عملی که کار هم می کنه در این قسمت بذارم . فقط یه کم وقت می خوام که یه نمونه بدرد بخور بنویسم
موفق باشین.

Inprise
شنبه 10 مرداد 1383, 15:24 عصر
در حالاتی که کنترل های کامپننت شما استاتیک است یا حداقل همیشه از محل ثابتی شروع می شن این روش استفاده داره

اینائی که نوشتید معادل مقدار دهی از طریق Inspector است ، تولید زمان اجرای یک شیء و مقدار دهی ویژگیهای اون هم ربطی به dfm نداره .

MFCGalaxy
شنبه 10 مرداد 1383, 19:05 عصر
یک برنامه کوچولوی فسقلی نوشتم که فکر کنم منظور سوال را برآورده کند...
و فعلا .......

JavanSoft
شنبه 10 مرداد 1383, 20:38 عصر
آقای عقیلی ؟؟؟؟؟؟؟؟؟؟؟؟؟؟

MFCGalaxy
یک شنبه 11 مرداد 1383, 15:41 عصر
برنامه را یادم نرفته بود که آپلود کنم و اتفاقا شش نفر هم آنرا دانلود کرده بودند ولی
مرشد عزیز از اینکه آن برنامه را در سایت گذاشته بودم دلگیر شده بود که خب
رسم مرید و مرشدی حکم میکرد که آن برنامه را حذف کنم .....

:oops:

MH2538
دوشنبه 12 مرداد 1383, 19:21 عصر
سلام
این برنامه هیچ ربطی به سئوال نداشت . این برنامه چه ربطی به component داشت ؟

vcldeveloper
سه شنبه 13 مرداد 1383, 02:21 صبح
این بار تصمیم می گیرید اشیا (دکمه ها ، رادیو باتن ها و ...) را در داخل یک DFM قرار دهید و سپس از طریق این فرم (dfm.*) اشیاء مورد نظر خود را کنترل نمائید . راه حل پیشنهادی شما چیست ؟

با استفاده از NoDefault نمیشه این کار رو کرد؟ :roll: