PDA

View Full Version : سوال: دسترسی به پروسیجر تعریف شده در یک Frame



hadisalahi2
دوشنبه 05 خرداد 1393, 18:07 عصر
سلام به همگی دوستان عزیز

یک فریم دارم که وظیفه اون نگهداری تصاویری هستش و داخش میشه تصویر اضافه کرد و یا اسکن کرد.

حالا یک فرم دارم که در سه تب جداگانه ، سه بار این فریم ها رو ایجاد کردم به صورت زیر:

کد ایجاد فریم :


procedure TCompanyForm.CreatFrame(Parent: TsTabSheet);
Var TempFrame:TFrame;
begin
Try
TempFrame:=TPictureFrame.Create(Self);
TempFrame.Name:='FrPicture'+IntToStr(Parent.PageIn dex);
TempFrame.Parent:=Parent;
(TempFrame.FindComponent('PictureList') as TAdvSmoothSlideShow).Items.Clear;
except on E: Exception do
InsertToException(Self.Name,'CreatFrame',e.Message );
end;
end;



کد فراخوانی فریم :


CreatFrame(Step4);
CreatFrame(Step5);
CreatFrame(Step6);




حالا من یک پروسیجر داخل این فریم دارم که کار ذخره تصاویر داخل فریم رو انجام میده.

حالا چطوری میتونم پروسیجر داخل فریم رو از داخل فرم خودم صدا بزنم ، طوری که هر پروسیجر کار ذخیره تصاویر رو با تصاویر داخل هر فریم و با کد جدا گانه انجام بده؟

امیدوارم منظورم رو به خوبی رسونده باشم ؟:اشتباه:

Mask
دوشنبه 05 خرداد 1393, 18:51 عصر
پروسیجرتون رو بزاریذ روی یک دیتا ماژولی که ، همه فریمها بهش دسترسی داره.

hadisalahi2
دوشنبه 05 خرداد 1393, 18:55 عصر
یعنی نمیشه از طریق فرم به پروسیجر فریم دسترسی داشت؟

البته خودم به ذهنم رسیده که اون picture list داخل فریم رو به صورت پارامتر پاس بدم به داخل پروسیجر
ولی میخوام بدونم به این روشی که گفتم امکان داره؟

یوسف زالی
دوشنبه 05 خرداد 1393, 21:22 عصر
سلام.

TCompanyForm.CreatFrame

این یعنی این که شی شما باید قبلش ساخته شده باشه.
متدتون رو در فضای interface و خارج از کلاس قرار بدید.

hadisalahi2
سه شنبه 06 خرداد 1393, 11:05 صبح
این یعنی این که شی شما باید قبلش ساخته شده باشه.

خوب قبلش فریم رو میسازم دیگه
و با این پروسیجر یک آبجکت ازش ایجاد میکنم .



متدتون رو در فضای interface و خارج از کلاس قرار بدید.
منظورتون کدوم متده؟
همین ایجاد فریم؟

خارج از کلاس ، دقیقا یعنی کجا؟

یوسف زالی
چهارشنبه 07 خرداد 1393, 14:14 عصر
اگر قبلش ساخته باشید، احتمال داره اون رو در Public نگذاشته باشید.

hadisalahi2
چهارشنبه 07 خرداد 1393, 18:12 عصر
اگر قبلش ساخته باشید، احتمال داره اون رو در Public نگذاشته باشید.
یوسف جان ببخشید ، چی رو توی Public نگذاشته باشم؟
متدی که میخوام بهش دسترسی داشته باشم و توی فریم هست رو میگی؟

یوسف زالی
چهارشنبه 07 خرداد 1393, 19:28 عصر
آره دیگه. مگه چیز دیگه ای هم هست؟

hadisalahi2
پنج شنبه 08 خرداد 1393, 20:01 عصر
چرا یوسف جان
توی Public تعریف کردم

البته مشکل رو این طوری حل کردم


TempFrame:=(FindComponent('FrPicture'+IntToStr(i)) as TPictureFrame);
TempFrame.SaveImages(TempID,ID.Caption,IntToStr(i) ,'PicCompany',ProgressBar1,TempFrame.PictureList,I nsertState);




اول فریم رو پیدا کردم و فرستادم به متغیر موقت
بعد هم همراه پارامترهای متد PictueList همون فریم رو هم ارسال کردم

یوسف زالی
پنج شنبه 08 خرداد 1393, 20:54 عصر
پس دلیلش اینه که شما متغیری از نوع کلاس فریم خودتون تعریف نکردید، بلکه از نوع کلاس پدر کلاس فریم خودتون، یعنی TFrame گرفتید.
مثلا از نوع TMyFrame باید بگیرید. تابعی که نوشتید در اون کلاسه نه کلاس TFrame

hadisalahi2
جمعه 09 خرداد 1393, 12:10 عصر
آره حرف شما درسته
موقع ایجاد ، از Tframe گرفتم
الان با این روش درست کار میکنه و به متد فریم هم دسترسی دارم

حالا فرقی که نداره از Tframe باشه؟
بعدا مشکلی پیش نمیاد که؟

یوسف زالی
جمعه 09 خرداد 1393, 13:34 عصر
tempframe باید از نوع فریم شما باشه.
اگر نیست، باید تبدیل بشه وگرنه توش متدتون رو نمی بینید.
متوجه توضیحاتت نشدم. نمونه کد نهاییت رو بذار.

hadisalahi2
شنبه 10 خرداد 1393, 16:42 عصر
tempframe باید از نوع فریم شما باشه.

هنگام تعریف از Tframe می گیرم
اما بعدش
tempframe رو از نوع فریم خودم میگیرم.



اگر نیست، باید تبدیل بشه وگرنه توش متدتون رو نمی بینید.

بعد از اینکه از نوع فریم خودم میگیرم اون متد هم قابل شناسایی هستش