ورود

View Full Version : دسترسی به اجزای یک فریم



p_ooya
شنبه 20 تیر 1388, 09:10 صبح
سلام به همه.
من تو برنامه ام یک فرم (مثلاً Mainform) و یک فریم (مثلاً ArchiveFrame) دارم. بعد از اینکه فریم رو create کردم چطور می تونم property های یکی از اجزای فریم رو از طریق فرم اصلی تغییر بدم. مثلاً، با کلیک بر روی یک button روی فرم اصلی، عنوان یک button روی فریم تغییر کنه.

سپاس.

Hsimple11
شنبه 20 تیر 1388, 09:32 صبح
تفاوتی با فرم نداره. بعد از ساخت با متد FindGlobalComponent به اجزای فریمتون دسترسی خواهید داشت.

p_ooya
شنبه 20 تیر 1388, 10:07 صبح
تفاوتی با فرم نداره. بعد از ساخت با متد FindGlobalComponent به اجزای فریمتون دسترسی خواهید داشت.

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


anyForm.button1.enabled:=true;کدی که برای فریم خواستم استفاده کنم و جواب نداد این بود :


TArchiveFrame(self).Button1.Enabled:=true;

دلفی کد رو invoke می کنه و موقع کامپایل هم ایرادی نمی گیره، اما وقتی کد بالا فراخوانی میشه ارور میده.

p_ooya
یک شنبه 21 تیر 1388, 14:29 عصر
کسی نظری نداره؟

SQLMAN
چهارشنبه 24 تیر 1388, 11:38 صبح
این کد را تست کن

TButton(AnyFrame.Button1).Enabled := True;

mohammad_alikhani
چهارشنبه 24 تیر 1388, 12:11 عصر
این کد را تست کن

TButton(AnyFrame.Button1).Enabled := True;
به نظرم این کار لازم نیست.

به این شکل می تونید دسترسی داشته باشید:


anyFrame.Button1.Enabled := False;

تو ضمیمه هم گذاشتم.:چشمک:

p_ooya
چهارشنبه 24 تیر 1388, 13:26 عصر
این کد را تست کن

TButton(AnyFrame.Button1).Enabled := True;


به نظرم این کار لازم نیست.

به این شکل می تونید دسترسی داشته باشید:


anyFrame.Button1.Enabled := False;

تو ضمیمه هم گذاشتم.:چشمک:
از همفکریتون ممنونم. ولی جواب نمیده. ببینید، من تو برنامه ام یه کامپوننت framebar از مجموعی alphaskins دارم که مثل یه ساید بار عمل می کنه. هر عنوان رو که کاربر انتخاب می کنه، یه فریم براش نمایش داده میشه که نتیجه اش میشه یه چیزی شبیه به ضمیمه ای که قرار میدم.

ضمیمه (http://www.alphaskins.com/forum/index.php?act=attach&type=post&id=3188). (http://www.alphaskins.com/forum/index.php?act=attach&type=post&id=3188)
(توجه کنید که کمی طول میکشه تا لینک دانلود ضمیمه شروع به کار کنه)

مسئله اینجاست که من از کامپوننت frames استاندارد دلفی استفاده نمی کنم و خودم با دستور زیر فریم رو می سازم :

procedure TMainForm.sFrameBar1Items1CreateFrame(Sender: TObject;
var Frame: TCustomFrame);
begin
Frame:=TFactor.Create(nil);

TFactor(Frame).sSpeedButton1.Caption:='ÕÏæÑ ÍæÇáå';
TFactor(Frame).sSpeedButton2.Caption:='æíÑÇí ÍæÇáå';
TFactor(Frame).sSpeedButton3.Caption:='ÌÓÊÌæ' ;

end;تو برنامه ام من از یه سایدبار استفاده می کنم مثل ساید بار ضمیمه که مقادیرش بدون تغییرند (برخلاف ضمیمه) و من می خوام بعضی هاشون، بسته به اینکه کدوم یوزر داره با برنامه کار میکنه، فعال یا غیر فعال باشند. در نتیجه کدهایی مثل کدی که شما در بالا قرار دادید، برای من نتیجه بخش نیست.

Hsimple11
چهارشنبه 24 تیر 1388, 17:47 عصر
1- موقع Create فریم فریم های قبلی رو هم حتما Free کنید.

2- از همون FindGlobalComponent استفاده کنید. همین کلمه رو جستجو کنید. شبیه این:


TMyForm(FindGlobalComponent('MyFormName')).Button1

جواد ملاولی
دوشنبه 07 تیر 1389, 18:27 عصر
سلام.
میدونم این تاپیک مال یک سال پیشه، ولی سوال من هم بود و دیگه نخواستم تاپیک جدید ایجاد کنم.
سوال من دقیقا همون پست اوله:

من تو برنامه ام یک فرم (مثلاً Mainform) و یک فریم (مثلاً ArchiveFrame) دارم. بعد از اینکه فریم رو create کردم چطور می تونم property های یکی از اجزای فریم رو از طریق فرم اصلی تغییر بدم. مثلاً، با کلیک بر روی یک button روی فرم اصلی، عنوان یک button روی فریم تغییر کنه.
هیچ کدوم از راههایی که در این پستها گفته شده جواب نمیده. لطفا راه درست رو بفرمایید.

SAASTN
سه شنبه 08 تیر 1389, 01:30 صبح
فکر کنم مسئله ست کردن Parent باشه. اینو تست کن:

جواد ملاولی
سه شنبه 08 تیر 1389, 11:41 صبح
فکر کنم مسئله ست کردن Parent باشه. اینو تست کن:
دوست عزیز با تشکر از شما، مسأله ای که هست اینه که من برای create کردن فریمها از روش شما استفاده نکردم؛ علتش هم اینه که چون تعداد فریمهای من زیاده، دیگه نیومدم به ازای هر فریم یه متغیر تعریف کنم و کدهای شما رو بنویسم، بلکه دو تا متغیر از جنس فریم تعریف کردم و با اونها کار کردم. یه چیزی مثل این:

if Assigned(CurrentFrame) then OldFrame := CurrentFrame;
if OldFrame is TMyFrame then FreeAndNil(OldFrame);
CurrentFrame := TMyFrame.Create(MyForm);
if Assigned(MyForm) and Assigned(CurrentFrame) then
begin
CurrentFrame.Parent := MyForm;
CurrentFrame.Align := alClient;
if Assigned(OldFrame) then FreeAndNil(OldFrame);
end;که CurrentFrame و OldFrame اون دو تا متغیر هستند که گفتم.
با این کد چطور میتونم به اجزاء فریمها دسترسی داشته باشم؟

zidane
سه شنبه 08 تیر 1389, 15:35 عصر
این کد رو امتحان کن:

TButton(CurrentFrame.FindComponent('Button1')).Ena bled:=True;

SAASTN
سه شنبه 08 تیر 1389, 17:38 عصر
خوب چرا CurrentFrame رو از نوع TMyFrame تعریف نکردی؟
ولی به هر صورت:

TMyFtrame(CurrentFrame).Button1.Enabled := True;
یا

(CurrentFrame as TMyFrame).Button1.Enabled := True;