PDA

View Full Version : string به جای نام component



Delphi-Man
یک شنبه 04 شهریور 1386, 22:07 عصر
سلام
شاید سوالم ابتدایی باشه ولی می خواستم به جای نام یک Component مثلا Button1 یک string بنویسم. اگه راه دیگه ای هست اونو بگید. مشکل من اینه که یک فرم فرزند TUntitled ایجاد کردم و فرم پدر همان form1 هست. می دونید که وقتی create می کنیم یک فرم جدید رو یه شماره با خط زیر میاد مثلاً Untitled_1 ، Untitled_2... ولی فقط از متدهایی که داخل خود اون فرم های جدید هست می شه اینکارو انجام داد. می خواستم بدونم چطوری از form1 هر کدام از untitled ها رو که خواستم کنترل کنم.؟؟؟!!

Batman
دوشنبه 05 شهریور 1386, 06:23 صبح
با سلام
اگر درست متوجه شده باشم شما توی فرم پدر در فسمت Use فرم های دیگری رو که میخواین در فرم پدر کنترل کنید اضافه کنید
موفق باشید

Delphi-Man
دوشنبه 05 شهریور 1386, 10:10 صبح
با سلام
اگر درست متوجه شده باشم شما توی فرم پدر در فسمت Use فرم های دیگری رو که میخواین در فرم پدر کنترل کنید اضافه کنید
موفق باشید
نه یک فرم فرزند درست کردم که Name آن Untitled است.
من وقتی روی New کلیک می کنم یه فرم جدید با این Name تولید میشود: Untitled_1
اگه چند بار بزنم به ترتیب Untitled_1 و Untitled_2 و... Create می شود. از این دستور برای ایجاد فرم Untitled جدید استفاده کردم:

TUntitled.Create (Application);
و اتفاقا بدون هیچ ایرادی درست می شود.
حالا من اگه روی Button داخل خود فرم جدید کلیک کنم مثلا با نوشتن دقیقاً این برنامه:

close;
فرم جدید Minimize می شود. بدون نوشتن Untitled.close ... خودتون می دونین...
پس من این Untitled_1 و اینها را از این جا فهمیدم که در رویداد OnCreate فرم جدید نوشتم:


ShowMessage(Name);

می تونید امتحان کنید. اونوقت می نویسه آنتایتل به همراه خط زیر و شماره ی فرم...
*****
پس من می تونم داخل فرم خود فرم را بدون نوشتن نام+.+متد ، و فقط با نوشتن متد مورد نظر مدیریت کنم ولی نمی توانم از فرم پدر (Form1) یکی از Untitled ها رو مدیریت کنم. چون نام آنها با خط زیر و شماره همراه است. و اگه میشد از داخل فرم یک اینطوری بنویسیم خوب بود:


'Untitled_'+inttostr(num).close;

در نرم افزار Multimedia builder میشه نوشت:

Show(str$)
(در این نرم افزار string با $ مشخص می شود)
*****
خب... حالا شما چه راهی رو پیشنهاد می کنید؟

vcldeveloper
دوشنبه 05 شهریور 1386, 12:40 عصر
function GetFormByName(const FormName: string): TForm;
var
i : integer;
begin
for i := 0 to Screen.FormCount-1 do
begin
if Screen.Forms[i].Name = FormName then
begin
Result := Screen.Forms[i];
Break;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
GetFormByName('Form2').Show;
end;

Delphi-Man
جمعه 09 شهریور 1386, 21:26 عصر
function GetFormByName(const FormName: string): TForm;
var
i : integer;
begin
for i := 0 to Screen.FormCount-1 do
begin
if Screen.Forms[i].Name = FormName then
begin
Result := Screen.Forms[i];
Break;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
GetFormByName('Form2').Show;
end;

با تشکر از شما مدیر محترم

اگه بخواهیم این کار را برای Button ها انجام بدیم باید چکار کنیم؟

Arman_1367
شنبه 10 شهریور 1386, 00:47 صبح
Function GetFormByName(Name:String):TForm;
Var I:Integer;
Begin
Result:=nil;
Name:=UpperCase(Name);
for I:=0 to Screen.FormCount - 1 do
if UpperCase(Screen.Forms[i].Name)=Name then
begin
Result:=Screen.Forms[i];
Break;
end;
End;

Function GetChildByName(ChildParent:TWinControl;ChildName:s tring):TControl;
Var I:Integer;
Begin
if not Assigned(ChildParent) then
exit;
ChildName:=UpperCase(ChildName);
Result:=nil;
for I := 0 to ChildParent.ControlCount - 1 do
begin
if UpperCase(ChildParent.Controls[i].Name)=ChildName then
Begin
Result:=ChildParent.Controls[i];
Break;
End;
end;
if not Assigned(Result) then
Begin
for I := 0 to ChildParent.ControlCount-1 do
if ChildParent.Controls[i] is TWinControl then
Begin
Result:=GetChildByName(TWinControl(ChildParent.Con trols[i]),ChildName);
if Assigned(Result) then
Break;
End;
End;
End;

Function GetFormChildByName(FormName,ChildName:String):TCon trol;
Begin
Result:=GetChildByName(GetFormByName(FormName),Chi ldName);
End;

Delphi-Man
شنبه 26 آبان 1386, 21:24 عصر
ممنون ولی نمیشه Caption ها و خیلی چیزا دیگه رو عوض کرد

a_b_toops
یک شنبه 27 آبان 1386, 00:02 صبح
TButton(Self.FindComponent('Button1')).Caption:='O k';

TForm(FindGlobalComponent('Form1')).Caption:='Form 111';