PDA

View Full Version : تغییر مشخصه تمام کامپوننتهای شبیه در یک حلقه For ؟؟



v_shalchian
سه شنبه 28 مرداد 1382, 12:11 عصر
سلام
من حدود 20 تا Label روی فرم دارم به نام های Label2 ,Label1,.... میخواهم در یک حلقه for یک Property از همه آنها را تغییر بدهم.لطفا بگویید چه کار باید بکنم.

مهدی کرامتی
سه شنبه 28 مرداد 1382, 13:35 عصر
for i := 0 to ComponentCount - 1 do
begin
if COMPONENTS[i] is TLabel then
TLabel(COMPONENTS[i]).Font.Name := 'Tahoma';
end;

این کد ناچیز است و خود گویای همه چیز...

(امید)
سه شنبه 28 مرداد 1382, 18:21 عصر
با سلام

این هم یه روش دیگه ( به نقل از جاسم عرب برنامه نویس دات کام )


for i:=1 to 20 do
Tlabel(Findcomponent('label'+inttostr(i)).caption: =inttostr(i);

v_shalchian
سه شنبه 28 مرداد 1382, 23:08 عصر
با تشکر از دوستان
روش اول درست کار کرد ولی روش دوم این خطاها رو تولید کرد.
[Error] Unit1.pas(38): Undeclared identifier: 'caption'
[Error] Unit1.pas(38): Incompatible types: 'TLabel' and 'String'

SyntaxCheck
چهارشنبه 29 مرداد 1382, 05:22 صبح
برای اهدای خاصیت موجود از یک کلاس به کلاس مشابه روش استفاده از پراسیجر Assign هم روش خوبیه.


Label2.Font.Assign(Label1.Font);

این کد رو میتونید با کد DelphiAssistant و یا امید ترکیب کنید تا خاصیت مشابه از کل lable های موجود مثل خاصیت Font رو با تمام زیر خاصیتهاش از خاصیت Font یک کامپوننت دیگه قرض بگیرید.

hr110
چهارشنبه 29 مرداد 1382, 07:35 صبح
با سلام
تمامی جوابها به گونه ایی درست است ، ولی اگر نام لیبلها به این صورت نبوده و از نام گذاری واقعی :wink: استفاده شود نمیتوان از این روش استفاده کرد . برای اینمظور خوبست کد زیر را دوستان مبتدی تاملی کنند:

for I:=0 to ControlCount-1 do
if Controls is TLabel then
(Controls as TLabel).caption:='hellow word';
با این روش میتوان کنترلهای مشابه را در یک فرم هندل کرد.

v_shalchian
چهارشنبه 29 مرداد 1382, 12:00 عصر
با سلام و تشکر
روش "امید" هم درست بود.فقط یک پرانتز بسته کم داشت.

Hidarneh
چهارشنبه 29 مرداد 1382, 19:10 عصر
ولی روش امید یه ایراد اساسی داره : زمانبر هستش . یعنی وقتی تعداد اجزای روی فرم زیاد بشه ( بالای 100 تا )