Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.14;
Скачать: CL | DM;

Вниз

Вопрос про Button.Free   Найти похожие ветки 

 
vegarulez ©   (2007-09-15 09:06) [0]

Привет Мастерам! У меня такой вопрос. Етсь TPanel, в котором есть Button`ы, я их очишаю с помощью такого кода, но тут у меня пролблемка одна, когда он убивает допустим батон, то контролкаунт уменьшается и i уже нету там - вылазиет ошибка... подскажите как быть?

     for i:=0 to P_Panel.ControlCount-1 do
     if P_Panel.Controls[i] is TButton then
       begin
        with (P_Panel.Controls[i] as TButton) do
         Begin
          //s:=Name;
            If pos(FormMain.a+"_",Name)<>0 then
            BEGIN
             Free;
            END;
         End;
       end;


 
{RASkov} ©   (2007-09-15 10:38) [1]

 
{$<выключить полное вычисление логических выражений>}
 for i:=0 to P_Panel.ControlCount-1 do
  if (P_Panel.Controls[i] is TButton) and (pos(FormMain.a+"_", (P_Panel.Controls[i] as TButton).Name)<>0) then
   TButton(P_Panel.Controls[i]).Free;
{$<венуть как было - полное вычисление логических выражений>}


Вот это вот
pos(FormMain.a+"_",Name)<>0
я не совсем понял что это такое, но думаю тут сам разберешься.
Что такое - FormMain.a ??
Наверное тебе нужно так
pos("pnButt_", (P_Panel.Controls[i] as TButton).Name)=1
и соответственно все бутоны на панели должны иметь имена типа такие pnButt_1, pnButt_2, pnButt_3....


 
{RASkov} ©   (2007-09-15 10:42) [2]

> {$<выключить полное вычисление логических выражений>}
> for i:=0 to P_Panel.ControlCount-1 do
>  if (P_Panel.Controls[i] is TButton) and (pos(FormMain.a+"_",
> (P_Panel.Controls[i] as TButton).Name)<>0) then
>   TButton(P_Panel.Controls[i]).Free;
> {$<венуть как было - полное вычисление логических выражений>}

Впрочем можно и так.... без дериктив компилятору

for i:=0 to P_Panel.ControlCount-1 do
 try
  if (P_Panel.Controls[i] is TButton) and ({pos(FormMain.a+"_", (P_Panel.Controls[i] as TControl).Name)<>0}) then
   P_Panel.Controls[i].Free;
  except
   Continue;
  end;


 
Anatoly Podgoretsky ©   (2007-09-15 10:59) [3]

Освой downto


 
{RASkov} ©   (2007-09-15 11:04) [4]

> Освой downto

Ну конечно же.... ведь хотел еще переделать, причем еще во [2] посте :) так и оставил не верно... :(
downto 0 и работает вроде как быстрее, так как с нулем сравнивать проще чем ... не с нулем :)


 
{RASkov} ©   (2007-09-15 11:28) [5]

> downto 0 и работает вроде как быстрее, так как с нулем сравнивать
> проще чем ... не с нулем :)

"Фишка" тут конечно же не в быстроте, а в постоянстве последнего значения цикла, поэтому переменная цикла все время жизни цикла будет идти по "правильным" индексам массива Controls. И следовательно ошибка из-за этого исключена.
P.S:(последнее предложение нужно понять правильно)


 
vegarulez ©   (2007-09-15 15:31) [6]

>> {RASkov} ©   (15.09.07 10:38) [1]
>> Что такое - FormMain.a ??

Да тут стринг просто. переменная с другой формы.

ту ол:
Ок. Всё понял. Большой Пасип. ;)



Страницы: 1 вся ветка

Текущий архив: 2007.10.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
3-1181367762
Dmitry_177
2007-06-09 09:42
2007.10.14
какую лучше использовать базу для локального использования?


6-1171481886
malyar
2007-02-14 22:38
2007.10.14
отправка http запросов post get head через сокет


11-1173758240
Galkov
2007-03-13 06:57
2007.10.14
TC_Insert


15-1189268654
Gorlum
2007-09-08 20:24
2007.10.14
Плата MSI - а как узнать конкретно какая?


15-1189581269
Sergey13
2007-09-12 11:14
2007.10.14
Интерьер детской комнаты - ищу идеи.