Конференция "Основная" » Передать параметром процедуре указатель на массив [D7, WinXP]
 
  • inferno (13.01.09 08:27) [0]
    Здравствуйте.

    type
     TControl_array = array of TControl;
     PControl_array = ^TControl_array;

    var
     dis_panels:array of tpanel;
     dis_edits:array of TEdit;
     dis_button_del: array of TSpeedButton;



    Идея такая. Есть процедура, работающая с массивом. массивы разных типов как описано выше.
    Код процедуры:

    procedure Tgrouptest_form.renum_array(arr:pControl_array; del_num:integer);
    var i:integer;
    begin
    for i:= del_num to Length(TControl_array(arr))-2 do begin
        TControl_array(arr)[i]:=TControl_array(arr)[i+1];
        TControl_array(arr)[i].Tag:=i;
    end;
    SetLength(TControl_array(arr),Length(TControl_array(arr))-1);
    end;


    Вызов:
    renum_array(pointer(dis_panels),n);



    Дает коректный результат до тех пор пока дело не дойдет до удаления последнего элемента, в этом случае длина массива принимает непредсказуемое значение :)
    Может быть такая реализация задачи недопустима?
  • MBo © (13.01.09 08:57) [1]
    в заголовке
    arr:pControl_array
    а в процедуре
    TControl_array(arr)

    А почему бы не использовать списки (TComponentList)
 
Конференция "Основная" » Передать параметром процедуре указатель на массив [D7, WinXP]
Есть новые Нет новых   [134435   +8][b:0][p:0.001]