На главную
ПРАВИЛА 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_
  
> Переменная TStringList, копирование строк, Переменная TStringList, копирование строк
    Добрый день. есть следующее:

    ExpandedWrap disabled
      var T1,T2:TstringList
       begin
         T1 := TStringList.Create;
         T2 := TStringList.Create;
         T1.Text := Memo1.Text; (*вводим в Т1 10 строк текста(к примеру), каждая строка одно слово*)
         .......
      end.


    Вопрос: как в Т2 скопировать только первые 3-и строки из Т1? что то сколько не смотрел методы и свойства TStringList так ничего и не увидел.
      ExpandedWrap disabled
        For I := 0 to 2 do
         T2.Add(T1[I]);
        вариант хороший
        ExpandedWrap disabled
          for i := 0 to 2 do
          T2.Add(T1[i])

        и все работаеь но такой косячок обнаружился:
        если число строк в Т1 менее 3-х выскакивает исключение List index out of bonds() с указание строки в скобках, которой нехватает до 3-х

        вообще число вводимых в МЕМО строк может быть и менее 3-х. и что тут сделать? написать if i < 3 then Exit(и вывести сообщение) перед всем. или есть другие варианты?
        может обойтись без цикла и просто написать:
        ExpandedWrap disabled
          T2.Add(T1[0])
          T2.Add(T1[1])
          T2.Add(T1[2])

        Какой вариант правильный с точки зрения теории и практики?
          Ну так проверь путем создания двух кусков кода и визуально сравни совпадают или нет,
            Цитата Pcrepair @
            если число строк в Т1 менее 3-х выскакивает исключение List index out of bonds() с указание строки в скобках


            ExpandedWrap disabled
              procedure CopyStringListLines(const aSrc: TStringList; var aDest: TStringList; aFirstLineIndex, aLinesCount: Integer);
              var
                I: Integer;
              begin
                if aSrc.Count - 1 < aFirstLineIndex + aLinesCount then
                  aLinesCount := aSrc.Count - 1 - aFirstLineIndex;
               
                for I := aFirstLineIndex to aFirstLineIndex + aLinesCount do
                  aDest.Add('aSrc[I]');
              end;
              Profi, спасибо и два маленьких вопроса:
              aDest.Add('aSrc[I]'); - это что специально? ну ковычки?
              еще некоторые пишут: aDest.Add(aSrc.Strings[I]); результат один и тот же, какой смысл в усложнении?
                Цитата Pcrepair @
                еще некоторые пишут: aDest.Add(aSrc.Strings[I]); результат один и тот же, какой смысл в усложнении?

                Привычка со времен ранних версий Дельфи.
                  так это правильная привычка?
                  а то тут пишут:
                  If a class has a default property, you can access that property with the abbreviation object[index], which is equivalent to object.property[index]. For example, given the declaration above, StringArray.Strings[7] can be abbreviated to StringArray[7]. A class can have only one default property with a given signature (array parameter list), but it is possible to overload the default property. Changing or hiding the default property in descendent classes may lead to unexpected behavior, since the compiler always binds to properties statically.

                  Если класс имеет свойство по умолчанию, вы можете получить доступ к этой свойствам с сокращением объекта [индекс], что эквивалентно object.property [индекс]. Например, если объявление выше, StringArray.Strings [7] может быть сокращено до StringArray [7].Класс может иметь только одно свойство по умолчанию с заданной подписью (список параметра-массива), но это возможно перегружать свойство по умолчанию. Изменение или скрывать свойства по умолчанию в потомком класса может привести к неожиданному поведению, так как компилятор всегда привязывается к свойствам статически.
                    Цитата Pcrepair @
                    так это правильная привычка?

                    Это просто привычка.
                    И к тому же в интернете очень много примеров созданных очень давно. И некоторые примеры годятся и в старых и новых версиях, а некоторые только в старых.
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,1299 ]   [ 15 queries used ]   [ Generated: 30.07.21, 00:57 GMT ]