PDA

View Full Version : مقدار دهی تمام کامپوننت های روی فروم



Will_Smith
یک شنبه 04 شهریور 1386, 19:02 عصر
با سلام
من میخام تمام کامپوننت های روی فرمم رو که همه دارای Property Text هستند رو با استفاده از یه حلقه مقدار دهی کنم
مثلا توی همشون مقدار 12 رو بزارم
فرض کنید که 3 تا Edit و 4 تا ComBoBox و 2 تا هم MaskEdit دارم
سوال ها ی قبلی سایت همه مشابه بودند اما جواب سوال من نبودن
با تشکر

mjdeveloper
یک شنبه 04 شهریور 1386, 19:12 عصر
شاید این کد کمکت کنه

for i:=0 to Form1.ControlCount-1 do
begin
if Form1.Controls[i] is TEdit then
TEdit(Form1.Controls[i]).Text='12';
if Form1.Controls[i] is TMaskEdit then
TMaskEdit(Form1.Controls[i]).Text='12';
.
.
.

end;//for
end;

hossein taghi zadeh
یک شنبه 04 شهریور 1386, 19:33 عصر
با سلام

از این کد استفاده کنید


Var
I: Integer;
Begin

For I := 0 To Self.ControlCount-1 Do
Begin
If Self.Controls[I] Is TWinControl Then
TCustomEdit(Self.Controls[I]).Text := '12';
End;

End;

Will_Smith
یک شنبه 04 شهریور 1386, 19:54 عصر
hossein taghi zadeh (http://barnamenevis.org/forum/member.php?u=4895) کد شما کوتاه و زیباست اما عجیبه چون حتی مقدار Caption دکمه ها رو هم تغییر میده البته اصلا اثری در مورد کامپوننت های Falad مثل FloatEdit نداره

Will_Smith
یک شنبه 04 شهریور 1386, 19:56 عصر
شاید این کد کمکت کنه

for i:=0 to Form1.ControlCount-1 do
begin
if Form1.Controls[i] is TEdit then
TEdit(Form1.Controls[i]).Text='12';
if Form1.Controls[i] is TMaskEdit then
TMaskEdit(Form1.Controls[i]).Text='12';
.
.
.

end;//for
end;


از شما هم تشکر میکنم
ولی نمیشه با استفاده از متدFindComponent یه کارهایی کرد ؟ چون با اندیس کنترل ها مشکلاتی و جود داره
حتی الامکان با FindComponent

Will_Smith
یک شنبه 04 شهریور 1386, 20:23 عصر
مشکل دقیق من با Controls[i] o این هست که کامپوننت ها به ترتیب شماره گذاری نمیشن و من مقدار اونها رو به ترتیب میخام
یعنی مثلا بر اساس OrderTab

vahid64
یک شنبه 04 شهریور 1386, 21:46 عصر
اگه یک کم با فرم و کامپوننت ها خودت سر و کله بزنی مطمئناً می تونی این کار رو بکنی
یه فرم جدید ایجاد کن و کامچوننت ها رو یکی یکی روش بزار و برنامه رو trace کن حتماً به جواب می رسی

SYNDROME
یک شنبه 04 شهریور 1386, 21:50 عصر
با سلام
می توانی شرط را به شکل زیر بنویسی.(فقط Editها تغییر کند)


If Self.Controls[i] Is TEdit Then

موفق باشید

Arman_1367
یک شنبه 04 شهریور 1386, 22:22 عصر
با تشکر از آقای تقی زاده و بقیه دوستان که جواب دادن میشه گفت بهترین جواب رو از آقای تقی زاده گرفتم که با کمی تغییر کارم رو حل کرد

فکر می کنم اگر زودتر می گفتی بهتر بود وقت هدر نمی رفت.

یا حق ...

Will_Smith
یک شنبه 04 شهریور 1386, 23:17 عصر
با تشکر از آقای تقی زاده و بقیه دوستان که جواب دادن میشه گفت بهترین جواب رو از آقای تقی زاده گرفتم که با کمی تغییر کارم رو حل کرد

zman123456
دوشنبه 05 شهریور 1386, 12:06 عصر
میدونم مشکلتون حل شده ولی برای پربارتر شدن موضوع مینویسم:
میشه از کد جناب mjdeveloper (http://barnamenevis.org/forum/member.php?u=34285) استفاده کرد ولی به جای نوشتن مقدار ، مقداری که باید نوشته بشه رو توی خاصیت tag هر کامپوننت بنویسی و بعد tag رو به text کامپوننت بفرستی.

Hamid_PaK
دوشنبه 05 شهریور 1386, 20:46 عصر
روش دیگه این می تواند باشد که شما در هنگام مقدار دهی نام کامپوننت و یا Order را بیازمایید و بعد مقدار دهی کنید :

*** استفاده غیر تجاری از این کد بلامانع است ***



procedure SetChildCaptions(AComponent: TComponent; cap_list: array of TCaptionList);
var
i,
idx: Integer;

function GetItemIndex( cmpnt_name: String; cap_list: array of TCaptionList ): Integer;
begin
for Result := 0 to Length( cap_list ) -1 do
if CompareStr( LowerCase( cmpnt_name ), LowerCase( cap_list[ Result, 0 ] )) = 0 then Exit;
Result := -1;
end;

begin
//;
if AComponent.ComponentCount > 0 then
with AComponent do begin
for i := 0 to ComponentCount -1 do begin
if Components[ i ].ComponentCount > 0 then
SetChildCaptions( Components[ i ], cap_list );
if Length( Components[ i ].Name ) <= 0 then Continue;
idx := GetItemIndex( Components[ i ].Name, cap_list );
if idx >= 0 then
if Components[ i ].ClassType = TAction then
ShowMessage( Components[ i ].Name ) else
if Components[ i ].ClassType = TLabel then begin
TLabel( Components[ i ] ).Caption := cap_list[ idx, 1 ];
end else begin
SetWindowText( TWinControl( Components[ i ] ).Handle,
pChar( cap_list[ idx, 1 ] ));
end;
end;
end;
end;

const
ctrl_names: array[0..5] of TCaptionList = ( {00}('', ''){00}
{01}, ( 'lbl_user', 'äÇã ˜ÇÑÈÑ' )
{02}, ( 'lbl_pass', '˜áãå ÚÈæÑ' )

{03}, ( 'bt_login', 'æÑæÏ' )
{04}, ( 'bt_exit', 'ÇäÕÑÇÝ' )

{05}, ( 'gb_login', 'Òíäå åÇí æÑæÏ' )
//{00}, ( '_______', '' )
);

procedure Tfrm_login.FormCreate(Sender: TObject);
begin
//;
SetChildCaptions(Self, ctrl_names);
end;



یا حق ...