Главная страница
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.062 c
3-1181305142
Alvin
2007-06-08 16:19
2007.10.14
Приложение на Delphi под wine


15-1189577904
Johnmen
2007-09-12 10:18
2007.10.14
Сверхзвуковая ударная волна


15-1189270196
УАув
2007-09-08 20:49
2007.10.14
Двумерный массив в качестве параметра с С++


2-1188218496
Riply
2007-08-27 16:41
2007.10.14
Объявление "лишних" переменных в процедуре.


2-1190190540
O.O
2007-09-19 12:29
2007.10.14
Сдвиг выделеных строк в редакторе