Assign — Процедура Delphi


Содержание

Assign — Процедура Delphi

Copies the contents of another, similar object.

Call Assign to copy the properties or other attributes of one object from another. The standard form of a call to Assign is

which tells the Destination object to copy the contents of the Source object to itself.

Most objects override Assign to handle the assignment of properties from similar objects. When overriding Assign, call the inherited method if the destination object can’t handle the assignment of properties from the class of the Source parameter.

If no overridden Assign method can handle the assignment of properties from Source, the method implemented in TPersistent calls the source object’s AssignTo method. This allows the source object to handle the assignment. If the Source object is nil (Delphi) or NULL (C++), Assign raises an EConvertError exception.

In general, the statement

is not the same as the statement

The assignment operator makes Destination reference the same object as Source, whereas the Assign method copies the contents of the object referenced by Source into the object referenced by Destination.

Иллюстрированный самоучитель по Delphi 7 для профессионалов

Класс TPersistent

«Persistent» в переводе с английского означает «устойчивый», «постоянный». Что же такого постоянного в одноименном классе? Ответ таков: виртуальный метод procedure Assign(Source: TPersistent);.

Этот важнейший метод осуществляет копирование содержимого одного объекта (source) в другой (self, т. е. в объект, вызвавший метод Assign). При этом объект-получатель остается самим собой, чего нельзя достигнуть, используя простое присваивание переменных объектного типа:

Ведь в этом случае указатель на одну область адресного пространства, содержащую экземпляр класса (объект), замещается указателем на другую область адресного пространства, содержащую другой объект.

Метод Assign позволяет продублировать объект – присвоить одному объекту значения всех свойств другого. При этом объекты не обязательно должны быть одного и того же класса; более того, они не обязательно должны находиться в отношениях «родитель-потомок». Данный метод тем и хорош, что позволяет полиморфное присвоение. Конструкция:

Позволяет скопировать содержимое картинки Picture в папку обмена Windows (объект clipboard). Какова здесь логика? Известно, что в папку обмена можно поместить растровую картинку, текст, метафайл, мультимедийные данные и т. п. Метод Assign класса TClipboard переписан таким образом, чтобы обеспечить присвоение (т. е. реальное перемещение в папку обмена) всех этих данных.

Для обеспечения взаимодействия потомков класса TPersistent со средой разработки предназначен метод:

Он возвращает имя объекта для передачи его в Инспектор объектов.

Для взаимодействия с потоками при загрузке и сохранении компонентов предназначен следующий метод:

Класс TPersistent никогда не используется напрямую, от него порождаются потомки, которые должны уметь передавать другим объектам значения своих свойств, но не являться при этом компонентами.

Delphi — Почему события не копируются в (процедуры Assign)?

Я наблюдал несколько Assign () процедуры и заметил, что события, как правило, игнорируются в процессе выполнения задания. Например, способ назначения TBitmap не копирует событие OnChange. я хочу знать

  1. Если это общепринятый способ не копировать события в процессе выполнения задания, то есть, если все пользователи полагаются на тот факт, что события никогда не — и никогда не должны быть — скопированы во время свиданий?
  2. Почему события (по крайней мере, обычно) не копируется во время свиданий?
  3. Или, может быть, я ошибаюсь, и события могут быть скопированы полностью, просто в зависимости от обстоятельств?

Я не знаю о «правилах», которые диктуют, но я думаю, что вы правы, и это почти никогда не бывает. Это до автора компонента, хотя, потому что Присвоить вводится в TPersistent, но ничего не делает сам по себе, пока вы на самом деле реализовать переопределение. На самом деле он бросает исключение (X не может быть назначен на Y) по умолчанию.

И это сила Присвоить тоже. Источник вы назначаете от даже не должны быть того же типа компонента, потому что каждое задание является обычай реализации. В вашем примере TBitmap, вы можете присвоить его TPicture, и вы даже можете назначить другие типы графиков в TBitmap, которые позволили бы этим графикам рисовать себя на холсте растрового изображения.

В большинстве, если не во всех случаях я столкнулся, Присвоить о том, что: назначение, а иногда даже преобразование данных (состояния, если вы хотите) из одного объекта в другой.

События различны. Это не до объекта, чтобы иметь обработчик событий и управлять им. Это не работа этого объекта, чтобы принять решение, что его абоненты также хотят, чтобы подписаться на другой объект. Значение / указателя на обработчик событий не является частью (соответствующей) данных объекта.

Она просто предоставляет возможность для других, чтобы слушать, что произошло с ним, и если эти вещи хотят слушать другой объект тоже, они просто должны назначить обработчик событий для этих объектов, а также.

Так что для меня это имеет смысл, что события не скопированные, и я думаю, что я никогда не включал событие в реализациях Присвоить, что я написал сам.

Функции и процедуры Delphi. Справочник.

Функция Assigned( var P ): Boolean;

Описание
Функция проверяет, имеет ли переменная P значение nil.
Параметр P должен представлять собой либо указатель, либо переменную процедурного типа. Если P=nil, то функция возвращает True, а иначе — False.


If P=nil then. для переменной типа Pointer.
If @P=nil then. для переменной процедурного типа

Процедуры Delphi

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

Главное отличие процедуры от функции состоит в том, что есть связь между именем функции и значением. Таким образом, возможно использование имени функции в разнообразных выражениях. Организация процедуры Delphi по сути ничем не отличается от организации функции.

Как и для функции, в начале каждой процедуры указывают ее заголовок. Затем называют эту процедуру каким-нибудь именем. После имени в скобках следует перечень параметров, заканчивающийся символом «;» и потом уже описывают разделы констант, типов, переменных и инструкций.

Общий вид процедуры Delphi:

Общий вид процедуры Delphi выглядит следующим образом:

В приведенном выше примере, как мы видим, в состав заголовка процедуры сначала входит служебное словоprocedure. Далее за этим ключевым словом следом располагается имя процедуры, использующееся при вызове процедуры, обеспечивая активизацию ее выполнения.

Если процедура обладает какими-либо параметрами, то программист их указывает в скобках, сразу после имени процедуры. В конце заголовка процедуры ставится символ «;». В случае, когда в процедуре имеются именованные константы, программист объявляет их в разделеconst.

Далее за этим разделом идет раздел type, использующийся для объявления типов. После располагается раздел var, содержащий все переменные, которые впоследствии программист использует в своей программе. Затем следует раздел инструкций , которые включает в себя исполняемые инструкции данной процедуры.

Примеры процедуры Delphi:

Приведем пример процедуры Delphi, вычисляющей стоимость некоторой покупки:

Delphi : Why TStringlist can’t assign in procedure?

The first procedure :

When I click button the memo doesn’t show any thing , and the breakpoint show the procedure doesn’t execute this line:

and I modify the procedure :

this time it works.

so why it can’t use List := TempList; ?

1 Answer 1

When you pass a variable by value, Delphi makes a copy of the parameter value in the Stack and all the changes made to that parameter inside the method are done over that copy.

That’s the way pascal worked since Turbo Pascal days and maybe since the beginning. Consider this:

Now, when you pass a object as a parameter, you have to remember the object variable is a reference to the object (a pointer to the address where the object is really stored in the heap). But, if you pass the parameter by reference, the above rule still applies: A copy of the reference is made in the stack. Any change you make to that reference inside your method/procedure is done over that copy.

The line List := TempList; merely changes the reference making it point to a different object in a different memory location. That value is lost when the procedure returns, in the same way the integer value is lost when the TestInt procedure returns.

The fact that the line is never executed is the optimizer in action. Since the new value is never used, the optimizer eliminates the assignment from the final exe and the line is really never executed.

You can change the parameter declaration to pass it by reference (a var parameter), but that’s not a good Idea when working with objects, since you have to take into account who’s responsible to free the object’s memory to avoid memory leaks.

You don’t tell what you’re trying to accomplish, but it looks like Assign is the way to go, since the assignment copies the strings from one list to the other. You have to consider working directly over the List and not use a TempList, like this:

The result, as you can see, is the same.

Rob pointed something important in the comments, so I will address why the last line of the Button1Click method works: Memo1.Lines := aList;

This looks like a direct assignment, but you must know in that line you’re dealing with a Delphi property.

A property, like a field, defines an attribute of an object. But while a field is merely a storage location whose contents can be examined and changed, a property associates specific actions with reading or modifying its data. Properties provide control over access to an object’s attributes, and they allow attributes to be computed.

The declaration of a property specifies a name and a type, and includes at least one access specifier.

Looking at how the Lines property of a TCustomMemo is declared:

This means that, when you assign a value to the property, you’re really calling the SetLines method, passing the Value as a parameter, like this:


The SetLines implementation looks like this:

So, you’re finally issuing the same TStrings.Assign call which copies all the strings from the source list to the destination list.

This is the Delphi way to deal with object properties and maintain a clear ownership over the objects. Each component creates and owns it’s own sub-objects, and you create and own your objects.

The assignment operator ( := ) over a property is sintactic sugar to allow the component writer to introduce side effects when reading or writing the values, and to allow you, the programmer to think as if the property was a standard field and enjoy the comfort of that side effects.

Использование процедур и функций в Delphi

Скобки

Добавление скобок при вызове процедур и функций без параметров уже давно не является новинкой в Delphi, тем не менее, эта возможность мало известна. Эту возможность оценят по достоинству те программисты, которым приходится работать на двух языках (C++ и Delphi), так как им не нужно будет постоянно помнить о разнице в синтаксисе при вызове процедур и функций в разных языках. В Delphi оба варианта, приведенные ниже, считаются корректными.

Возможность перегрузки

Впервые концепция перегрузки процедур и функций была реализована в Delphi 4. Она позволяет иметь несколько различных процедур и функций с одинаковыми именами, но с разными списками параметров. Такие процедуры и функции должны быть описаны с применением директивы overload.

procedure Test (I: integer); overload;
procedure Test (S: string); overload;
procedure Test (D: double); overload;

При вызове процедуры Test, Delphi сама решит, какую из трех процедур необходимо выполнить, в зависимости от передаваемого ей параметра. Но нужно отметить, что это не самая безопасная возможность языка. Применение перегружаемых процедур и функций может стать неиссякаемым источником трудноуловимых ошибок в программе. Поэтому пользуйтесь этой возможностью осторожно.

Передача параметров

Pascal позволяет передавать параметры в функции и процедуры либо по значению, либо по ссылке. Передаваемый параметр может иметь любой встроенный или пользовательский тип либо являться открытым массивом. Параметр также может быть константой, если его значение в процедуре или функции не меняется.

Передача параметров по значению

Этот режим передачи параметров применяется по умолчанию. Если параметр передается по значению, создается локальная копия данной переменной, которая и предоставляется для обработки в процедуру или функцию. Посмотрите на следующий пример:

procedure Test(s: string);

При вызове указанной процедуры будет создана копия передаваемой ей в качестве параметра строки s, с которой и будет работать процедура Test. При этом все внесенные в строку изменения никак не отразятся на исходной переменной s.

Однако это не относится к объектам. Например, если в функцию передается переменная (а точнее экземпляр объекта) TStringList, то в данном случае произойдет передача по ссылке (даже если это не указано явно). Этот способ передачи является у большинства самым излюбленным, но в тоже время является и самым не практичным, т.к. для выполнения метода выделяется дополнительная память для создания точной копией передаваемой переменой. Для решения этой проблемы следует использовать один из способов описанных ниже.

Передача параметров по ссылке

Pascal позволяет также передавать параметры в функции или процедуры по ссылке — такие параметры называются параметрами-переменными. Передача параметра по ссылке означает, что функция или процедура сможет изменить полученные значения параметров. Для передачи параметров по ссылке используется ключевое слово var, помещаемое в список параметров вызываемой процедуры или функции.

procedure ChangeMe(var x: longint);
begin
x := 2; // Параметр х изменен вызванной процедурой
end;

Вместо создания копии переменной x, ключевое слово var требует передачи адреса самой переменной x, что позволяет процедуре непосредственно изменять ее значение.

Передача параметров констант

Если нет необходимости изменять передаваемые функции или процедуре данные, можно описать параметр как константу. Ключевое слово const не только защищает параметр от изменения, но и позволяет компилятору сгенерировать более оптимальный код передачи строк и записей. Вот пример объявления параметра-константы:

procedure Test(const s: string );

Передача открытых массивов

Открытый массив параметров позволяет передавать в функцию или процедуру различное количество параметров. В качестве параметров можно передать либо открытый массив элементов одинакового типа, либо массивы констант различного типа. В приведенном ниже примере объявляется функция, которой в качестве параметра должен передаваться открытый массив целых чисел.

function AddEmUp(A: array of integer): integer;

В открытом массиве можно передавать переменные, константы или выражения из констант.

Для получения информации о фактически передаваемом массиве параметров в функции или процедуре могут использоваться функции High, Low и SizeOf.

Object Pascal также поддерживает тип array of const, который позволяет передавать в одном массиве данные различных типов. Синтаксис объявления функций или процедур, использующих такой массив для получения параметров, следующий:

procedure WhatHaveIGot( A: array of const );


Вызвать объявленную выше функцию можно, например, с помощью такого оператора:

procedure WhatHaveIGot( [‘Text’, 10, 5.5, @WhatHaveIGot, 3.14, true, ‘c’] );

При передаче функции или процедуре массива констант все передаваемые параметры компилятор неявно конвертирует в тип TVarRec. Тип данных TVarRec объявлен в модуле System следующим образом:

PVarRec = ^TVarRec;
TVarRec = record
case Byte of
vtInteger: (VInteger: Integer; VType: Byte);
vtBoolean: (VBoolean: Boolean);
vtChar: (VChar: Char);
vtExtended: (VExtended: PExtended);
vtString: (VString: PShortString);
vtPointer: (VPointer: Pointer);
vtPChar: (VPChar: PChar);
vtObject: (VObject: TObject);
vtClass: (VClass: TClass);
vtWideChar: (VWideChar: WideChar);
vtPWideChar: (VPWideChar: PWideChar);
vtAnsiString: (VAnsiString: Pointer);
vtCurrency: (VCurrency: PCurrency);
vtVariant: (VVariant: PVariant);
vtInterface: (VInterface: Pointer);
vtWideString: (VWideString: Pointer);
vtInt64: (VInt64: PInt64);
end;

Поле VType определяет тип содержащихся в данном экземпляре записи TVarRec данных и может принимать одно приведенных значений.

Поскольку массив констант способен передавать данные разных типов, это может вызвать определенные затруднения при создании обрабатывающей полученные параметры функции или процедуры. В качестве примера работы с таким массивом рассмотрим реализацию процедуры WhatHaveIGot, которая просматривает элементы полученного массива параметров и выводит их тип.

procedure WhatHaveIGot( A: array of const );
var
i: integer;
TypeStr: string;
begin
for i := Low(A) to High(A) do
begin
case A[i].VType of
vtInteger : TypeStr := ‘Integer’;
vtBoolean : TypeStr := ‘Boolean’;
vtChar : TypeStr := ‘Char’;
vtExtended : TypeStr := ‘Extended’;
vtString : TypeStr := ‘String’;
vtPointer : TypeStr := ‘Pointer’;
vtPChar : TypeStr := ‘PChar’;
vtObject : TypeStr := ‘Object’;
vt ;
vtW ;
vtPW ;
vtAnsiString : TypeStr := ‘AnsiString’;
vtCurrency : TypeStr := ‘Currency’;
vtVariant : TypeStr := ‘Variant’;
vtInterface : TypeStr := ‘Interface’;
vtW ;
vtInt64 : TypeStr := ‘Int64’;
end;
ShowMessage( Format( ‘Array item %d is a %s’, [i, TypeStr] ) );
end;
end;

Значения параметров по умолчанию

В Delphi есть одна очень полезная возможность — использование значений параметров по умолчанию. Она позволяет установить принимаемое по умолчанию значение параметра процедуры или функции. Это значение будет использоваться в тех случаях, когда вызов процедуры или функции производится без указания значения данного параметра. В объявлении процедуры или функции принимаемое по умолчанию значение параметра указывается после знака равенства, следующего после его имени. Поясним это на следующем примере:

procedure HasDefVal( s: string; i: integer = 0 );

Подобное объявление означает, что процедура HasDefVal может быть вызвана двумя путями. В первом случае — как обычно, с указанием обоих параметров:

procedure HasDefVal( ‘Hello’, 26 );

Во втором случае можно задать только значение параметра s, а для параметра i использовать значение, установленное по умолчанию:

procedure HasDefVal( ‘Hello’ );

При использовании значении параметров по умолчанию следует помнить о нескольких приведенных ниже правилах:

  • Параметры, имеющие значения по умолчанию, должны располагаться в конце списка параметров. Параметр без значения по умолчанию не должен встречаться в списке после параметра, имеющего значение по умолчанию.
  • Значения по умолчанию могут присваиваться только параметрам обычных типов, указателям или множествам.
  • Значение по умолчанию может передаваться только по значению либо с модификатором const. Оно не может быть ссылкой или нетипизированным параметром.

Одним из важных преимуществ применения значений параметров по умолчанию является простота расширения функциональных возможностей уже имеющихся процедур и функции с соблюдением обратной совместимости. Предположим, на рынок программных продуктов была выпущена программа, ключевым звеном которой является функция сложения двух целых величин:

function Add( I1, I2: integer ): integer;
begin
Result := I1 + I2;
end;

Предположим также, что исследования показали целесообразность добавления в программу возможности сложения трех чисел. Однако замена имеющейся функции функцией сложения трех чисел приведет к тому, что вам придется переправлять немало текста, который перестанет компилироваться из-за внесения в функцию еще одного параметра. Однако при использовании значений параметров по умолчанию проблема решается легко и просто. Достаточно изменить объявление функции так, как показано ниже.

function Add( I1, I2: integer; I3: integer = 0 ): integer;
begin
Result := I1 + I2 + I3;
end;

Директива

Директива <$X->запрещает вызов функций как процедур (с игнорированием возвращаемого результата). По умолчанию этот режим включен (<$X+>). Так вот, запомните, использование переменной Result недопустимо при сброшенном флажке опции Extended Syntax, расположенном во вкладке Compiler диалогового окна Project Options, или при указании директивы компилятора <$X->.

В каждой функции языка Objecl Pascal существует локальная переменная с именем Result, предназначенная для размещения возвращаемого значения. Кроме того, вернуть значение из функции можно также путем присвоения значения переменной, имеющей то же имя, что и данная функция. Это стандартный синтаксис языка Pascal, сохранившийся от его предыдущих версий. При использовании в теле функции переменной с ее именем не забывайте, что существуют большие отличия в обработке этого имени — все зависит от того, где она расположена — в левой части оператора присвоения или же в любом другом месте текста функции. Если имя функции указано в левой части оператора присвоения, то предполагается, что назначается возвращаемое функцией значение. Во всех других случаях предполагается, что осуществляется рекурсивный вызов этой функции.

Процедура и функция — это ключевые понятия в любом языке программирования, без которых не обходится ни одна серьезная программа. И поэтому очень важно иметь полное понимание о механизме их работы.

Что такое точная подпись System.Assign (для использования в процедурных выражениях)?

К сожалению, точная подпись Assign недоступна в источнике RTL, и мои попытки угадать, например:

не дал никаких положительных результатов, и компилятор отказывается рассматривать это выражение констатации как процедурное и жалуется на правую стоимость ( E2029 ‘(‘ expected but ‘;’ found) ).

Итак, какой тип я должен использовать для соответствия Delphi RTL?

Assign — это языковой остаток Delphi, который отслеживает свое происхождение в оригинальном синтаксисе Turbo Pascal. Задолго до перегрузки функций был добавлен синтаксис языка, задолго до того, как был зафиксирован текстовый файл RTL и внутренние структуры данных типа «файл типа», был Assign .

Assign — достаточно простая процедура для использования, но когда вы смотрите на то, что она должна делать, вы увидите, что ее практически невозможно реализовать без какой-либо магии компилятора. File of TFoo создает тип файла, который отличается и несовместим с File of Integer . И все же, оба могут быть переданы в качестве первого параметра Assign .

Сегодня вы, вероятно, могли бы реализовать Assign используя параметр generic type для параметра файла. Общий тип будет соответствовать типу переданной переменной. Это классно и все, но нам нужен способ связать типизированную переменную файла с именем файла строки за 25 лет до того, как дженерики были добавлены в микс.

Assign — это встроенная функция компилятора. Это означает, что он живет за пределами синтаксического пространства Delphi/Pascal. Assign — это, по сути, процедура, соответствующая типу, которая не может быть представлена на строго типизированном языке Delphi/Pascal (без современных и сложных языковых расширений, таких как общие типы). Он не является безличным и не динамически набирается, потому что фактический тип параметра полностью определяется во время компиляции.

Вы не можете взять адрес функции Assign . Даже если бы вы могли, потому что это аморфно, вы не сможете определить тип процедуры, который точно отражает все возможные возможные сигнатуры вызова.

Магические функции компилятора существуют вне языка, чтобы заботиться о задачах, которые не могли быть легко представлены в синтаксисе, доступном в то время. Assign — один из примеров. Writeln () — это другое.


System.Assign — это внутренняя функция. Официальная документация на него полностью безнадежна. В нем говорится:

Я могу только догадываться, почему генератор документации не может справиться с этой функцией. Но три идентичные перегрузки явно фиктивные. И это не функция, скорее это процедура.

Не важно. Поскольку он является внутренним, вы не можете назначить его указателю на функцию. Решение состоит в том, чтобы обернуть его собственной функцией.

Затем вы можете назначить эту функцию переменной или константе процедурного типа.

Другой вариант Assign принимает третий параметр, который указывает кодовую страницу, переданную как Word . Вы можете вызвать эту функцию только в том случае, если первым аргументом Assign является TextFile .

Итак, внутренности — это действительно закон для себя.

Обратите внимание, что в документации указано, что Assign больше не используется. Вместо этого вы должны использовать AssignFile . Документация не лучше вас!

Программирование Delphi

Все о программировании.

Главное меню

Функции и процедуры

Краткий обзор как использовать различные типы процедур и функций Delphi, указателей на функции и процедуры, методы и указатели методов, анонимные методы.

Автономные процедуры

Более или менее все RTL процедуры — так называемые «автономные» процедуры. Они объявлены на уровне модулей и чтобы вызвать такую процедуру, Вы должны знать, где она объявлена (имя модуля и список параметров для передачи).

Пример — процедура ShowMessage, объявленная в модуле dialogs.pas, вот ее объявление:

Чтобы вызвать такую процедуру, Вы просто должны включить имя модуля, где объявлена эта процедура в раздел uses вызывающего модуля. Большинство общих модулей уже перечислено в пункте uses модуля формы, таким образом, Вы не должны вручную добавлять dialogs.pas, чтобы использовать ShowMessage.

Вложенные процедуры

Функции и процедуры иногда содержат другие функции и процедуры в пределах своих блоков:

Вышеупомянутые два типа объявления процедур не связаны с классом или объектом.

Методы

Процедуры, которые связаны с классом, называют методами. Большинство методов используют экземпляры класса — объекты. Некоторые методы, называемые методами класса, работают в классах.

Функция Add — метод класса TStringList. Например, метод Add объявляется как:

Процедурные типы и указатели процедур

Delphi позволяет обрабатывать подпрограммы (функции и процедуры) как значения, которые могут быть назначены переменным.

Рассмотрим отрывок кода:

В этом коде TDisplayerProc и TIntegerDisplayerFuncпроцедурные типы

Переменные dp и idp — указатели процедур. Обратите внимание, что функция DisplayDoubleInteger получает процедурный тип, как второй параметр (TDisplayerProc).

Указатели методов

Подобно указателям процедур, указатели методов ссылаются на методы экземпляра объекта.

Анонимные методы

Начиная с Delphi 2006, язык Delphi знает также анонимные методы.

Анонимный метод — процедура или функция, которая не связана с ассоциированным именем.


Пример анонимных методов: сортировка объекта TList.

Delphi 2006. Справочное пособие: Язык Delphi, классы, функции Win32 и .NET. — Архангельский А.Я.

Сегодня пятница 10.06.05 Доход: 150 % Убыток: 150 %

В приведенном примере использована третья форма функции AppendFormat, принимающая три аргумента. Если нужен еще один аргумент, например, разность между доходом и убытком, необходимо воспользоваться четвертой формой функции с аргументом в виде массива. Это может выглядеть, например, так:

var Ar: array[0..3] of TObject; А, В: Double;

Ar[0] := DateTime.Now; Ar[1] := A; Ar [2] := B ; Ar[3] := A — B;

TextBoxl.Text := StringBuilaer. Create .AppendFormat( ‘<0: Сегодня dddd d>‘ +

Результат выполнения такого кода имеет вид:

Сегодня пятница 10.06.05 Доход: 150 % Убыток: 150 % Нулевой баланс

Основные формы метода Insert подобны соответствующим формам метода Append. Отличие в том, что метод Append добавляет текст в конец строки, а метод Insert вставляет текст в позицию строки, указанную параметром index (индексы отсчитываются от 0). В форме метода Insert, принимающей параметр value типа String и параметр count, значение count указывает, сколько раз должна быть вставлена строка value в данную строку. Последняя форма метода Insert вставляет в данную строку, начиная с позиции index, фрагмент массива символов value, начинающийся с позиции startlndex и содержащий charCount символов.

Метод Remove удаляет из строки фрагмент, начинающийся с позиции startlndex и содержащий length символов. Совместное применение методов Insert и Remove позволяет заменять фрагмент строки другим текстом. Например, в одном из приведенных ранее примеров был оператор, формирующий строку:

S.Append(1 Это заданное число: ‘).Append(і).Append (1.’) ;

формирующий строку вида: «Это заданное число: 12345.». Если к этой строке применить операторы:

S.Remove(13, 5); S.Insert(13, ‘значение’);

то в строке слово «число» заменится словом «значение». Приведенные операторы можно объединить в один:

S.Remove(13, 5) . Insert(13, ‘значение’);

Первые две формы метода Replace заменяют все вхождения в строку символа или текста oldValue символом или текстом newValue. Например, следующий оператор заменит в строке S все символы «з» в нижнем регистре на символы в верхнем регистре:

S.Replace(TextBoxl.Text, TextBox2. Text) ;

заменит в строке S все вхождения подстроки, введенной в окне TextBoxl, текстом, введенным в окно TextBox2. Следует отметить, что в качестве второго аргумента метода Replace можно задать пустую строку или в приведенном выше примере удалить текст из окна TextBox2. В этом случае метод Replace не заменяем, а просто стирает все вхождения в текст указанной подстроки.

Третья и четвертая формы метода Replace позволяют производить замену не во всем тексте строки, а только в подстроке, начинающейся с позиции startlndex и содержащей count символов.

Ряд примеров использования рассмотренных методов вы найдете в разд. 5.1.5.2. 692

Г лава 10 ¦ Описания свойств и методов

AppendFormat — метод StringBuilder

См. разд. «Append и другие методы преобразования строк StringBuilder».

Assign, AssignTo — методы TPersistent

Копируют один объект в другой, создавая копию всех данных объекта Библиотеки VCL Win32 Классы TPersistentj TStrings

В классе TPersistent:

procedure Assign (Source : TPersistent); В классе TStrings:

procedure Assign (Source : MarshalByRefObject); Описание

Метод Assign копирует свойства и атрибуты объекта Source в данный объект. Объявлен в классе TPersistent и перегружен в классах, производных от него. Некоторое число классов Delphi поддерживает присваивание объектов разных типов. Для большинства же классов, производных от TPersistent. применение Assign к несовпадающим типам объектов источника и назначения ведет к генерации исключения EConvertError.

Для списков строк TStrings и TStringList используется метод, объявленный в классе TStrings. Если в списке Source имеются строки, связанные с объектами, то в данный список копируются и эти объекты.

Метод Assign отличается по результатам от операции присваивания

При присваивании указатель на начинает указывать на . А метод Assign создает новую копию объекта. После применения Assign имеется два объекта с одинаковыми данными.

Илон Маск рекомендует:  Что такое код asp putex
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL