На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Подскажите альтернативу функции splice?
    Работаю сейчас в delphi, до этого работала в JS. В js есть функция slpice которая удаляет элементы массива, в статьях по delphi я не нашла этой функции. Предположим мне нужно удалить массив (ниже приведен пример с JS).
    Цитата

    var pts = [2,3,4,5,6,7,8,9];
    pts.splice(0, pts.length);


    Как я могу это сделать в delphi7?
    Сообщение отредактировано: Katerina1993 -
      ExpandedWrap disabled
        Array.prototype.splice()
        Сводка
        Метод splice() изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые.
         
        Синтаксис
        array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
        Параметры
        start
        Индекс, по которому начинает изменять массив. Если больше длины массива, реальный индекс будет установлен на длину массива. Если отрицателен, указывает индекс элемента с конца.


      Если коротко, то "элементы массива не удаляют" (на сколько мне не изменяет память), а "заполняют, присваивают значения".
      В динамических массивах можно назначать длину массива. Можно лишь заполнить в цикле например нулевыми значениями (любыми другими).

      Массивы
      Удаление, добавление -> относится к спискам.
      Списки

      Возможно, Вам дадут более квалифицированный ответ :jokingly:
      Сообщение отредактировано: RusSun -
        Как таковой встроенной функции для массивов нет.
        А устроена она так:
        Создать новый пустой массив итоговой длины
        Скопировать кусок до удаляемого фрагмента через Move
        Скопировать кусок после удаляемого фрагмента через Move
        Вернуть новый массив

        Будут нюансы для динамических элементов (строки, интерфейсы, дин. массивы, записи с полями этих типов)
          Fr0sT, может вы подскажите как это правильно сделать? Вот мой код сделанный по вашей инструкции.
          ExpandedWrap disabled
            unit Unit1;
             
            interface
             
            uses
              Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
              Dialogs;
             
            type
              arr = array of Integer;
              
              TForm1 = class(TForm)
                procedure FormShow(Sender: TObject);
              private
                { Private declarations }
              public
                { Public declarations }
              end;
             
            var
              Form1: TForm1;
             // arr:Array[0..10] of Integer;
             
            implementation
             
            {$R *.dfm}
             
             
            procedure TForm1.FormShow(Sender: TObject);
            var
            i,Cuted,Len:Integer;
            M:arr;
            s:String;
            begin
              Len:=20;
              SetLength(M,Len);
             
              Len:=Length(M);
             
              for i := 1 to 9 do
              begin
                M[i] := i+1;
              end;
             
              Move(M[0],M[5],10);
              SetLength(M,0);  //Удаление
              Move(M[0],M[5],10);
            end;
            end.
          Сообщение отредактировано: Katerina1993 -
            ExpandedWrap disabled
              unit Unit1;
               
              interface
               
              uses
                Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                Dialogs, StdCtrls;
              type
                arrI = array of Integer;
              type
                TForm1 = class(TForm)
                  Button1: TButton;
                  Button2: TButton;
                  procedure Button2Click(Sender: TObject);
               
                private
                  { Private declarations }
                public
                  { Public declarations }
                end;
               
              var
                Form1: TForm1;
               
              implementation
              procedure TForm1.Button2Click(Sender: TObject);
              var
              i:integer;
              M:arrI;
              M2:arrI;
              s:string;
              begin
              s:='';
                   SetLength(M,9);
                   SetLength(M2,9);
                  for i := 1 to 9 do M[i] := i+1;
               
               for i := 1 to 9 do  S:=S+' '+intToStr(M[i]);
               
                ShowMessage( 'M is '+ S );
               
                   Move(M[1],M2[5],4); //   из 1 в 5 размер 4 байта
                   SetLength(M,0);//удален
                   ShowMessage(  'Length of M is '+intToStr(Length(M)) );
              S:='';
                for i := 1 to 9 do  S:=S+' '+intToStr(M2[i]);
                SetLength(M2,0);//удален
                ShowMessage( 'M2 is '+ S );
              end;
            Сообщение отредактировано: RusSun -
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0353 ]   [ 16 queries used ]   [ Generated: 27.04.24, 06:02 GMT ]