ايران ويج

نسخه‌ی کامل: شماره کامپوننت موجود در فورم ؟!؟
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
من روی فروم برنامه تعدادی کامپوننت از قبیل :لیبل و ادیت و 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 ها رو پشت سر هم قرار بدم؟

از هر طریقی که ممکن هست راهنمایی کنید ممنون میشم.
با تشکر
اول باید هندل کنترل زیر موس رو بگیرید
GetCursorPos
WindowFromPoint
بعد
با استفاده از دستورات api ویندوز مثل get_classname
میتونین این کارو انجام بدین
کد:
http://swissdelphicenter.ch/en/showcode.php?id=141
http://delphi.about.com/od/delphitips2008/qt/find-vcl-window.htm
و یا با استفاده از تابع FindVCLWindow