PDA

View Full Version : سوال: شماره کامپوننت موجود در فورم ؟!؟



Majid.Ebru
یک شنبه 27 بهمن 1392, 00:03 صبح
سلام
من روی فروم برنامه تعدادی کامپوننت از قبیل :لیبل و ادیت و shape و....
در حدود 20 تا shape دارم که رنگشون رو باید تطبق یه شرایط عوض کنم.
با استفاده از یه حلقه For تمام کامپوننت های موجود توی فورم رو چک می کنم که آیا Shape هست یا نه ؟ بعد باید رنگشون رو عوض کنم.

for ii := 0 to testForm.ComponentCount - 1 do
begin
Memo1.Lines.Add(Components[ii].ClassName);
if Components[ii].ClassName = 'TShape' then
begin
OpenIndicator.Brush.Color := clblack;
( Components[ii] as Tshape).Brush.Color := clblue;
end;
اما تمام shape ها پشت سر هم نیست؟
یعنی مواردی که توی memo1 نوشته میشه به این صورت هست :
TShape
TLabel
TLabel
TShape
TShape
TShape
TShape
TButton
TMemo
TButton
TMemo
TButton
TButton
TMemo
TButton
.
.
.
.
TTimer
آیا راهی هست که بتونم تمام shape ها رو پشت سر هم قرار بدم؟

از هر طریقی که ممکن هست راهنمایی کنید ممنون میشم.
با تشکر

یوسف زالی
یک شنبه 27 بهمن 1392, 11:27 صبح
سلام.
شما باید ComponentIndex ها رو دست بزنید.
یک راه دیگش استفاده از DFM فرم هست.
ولی بودن یا نبودن پشت سر هم کامپوننت ها چه فرقی در کارکرد شما داره؟
لیست رو سورت کنید، قبلش یه لیست بگیرید آیتم ها رو توش بریزید، سورت کنید ...

دلفــي
یک شنبه 27 بهمن 1392, 19:26 عصر
به چند روش می تونید این کار رو انجام بدید مثلا همون روشی که You-Sei در بالا گفت ، به صورت زیر هم می تونی این کارو بکنی ولی چه دلیلی داری برای این کار من نمی دونم !


procedure TForm1.Button1Click(Sender: TObject);
var ii:Integer;
List:TStringList;
begin
List := TStringList.Create;
for ii := 0 to Form1.ComponentCount - 1 do
begin
if Components[ii].ClassName = 'TShape' then
begin
Memo1.Lines.Add(Components[ii].ClassName);
OpenIndicator.Brush.Color := clblack;
( Components[ii] as Tshape).Brush.Color := clblue;
end else
List.Add(Components[ii].ClassName);
end;
Memo1.Lines.Append(List.Text);
List.Free;
end;

Majid.Ebru
یک شنبه 27 بهمن 1392, 20:29 عصر
سلام و ممنون از پاسخها
اصل ماجرا اینه که من با استفاده از میکرو PIC (http://www.eca.ir/forum2/index.php?topic=89247.0)یه سری دیتا رو از طریق پورت USB به کامپیوتر می فرستم.
رشته ای رو که دریافت می کنم ، از خونه 0 تا 19 اون مربوط به یه سری Boolean هست .که من می خوام مستقیمن اون مقادیر رو به Shapeها ربط بدم و رنگ Shape رو عوض کنمو نمی خوام تک تک چک کنم.
ممنون