Небольшая модификация ответа Кена. Позвольте CGGeometry "стандартизировать" прямоугольник для вас.
CGRect rect = CGRectStandardize(CGRectMake(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y));
String не является классом в Delphi, поэтому у него нет методов, вы должны использовать функции для манипуляций со строками, такие как длина, копирование и т. Д. String - это класс в C ++, поэтому, возможно, вы смущен этим.
Delphi - это гибридный язык. Он содержит основные типы и классы. Только классы (а также записи и объекты) могут содержать методы.
String - это базовый тип, хотя и особый. Это единственный тип, в котором есть зарезервированное слово. Вот почему его часто пишут строчными буквами (строка), в отличие от других типов, у которых есть начальная заглавная буква (Целое число).
Если хотите, можете:
type
TString = class
private
FString: string;
public
constructor Create(const AValue: string);
property &String: string read FString write FString;
property IsEmpty: Boolean read GetIsEmpty;
// ...
end;
Нет. строка не является WideString, даже в D2009. Вы бы тоже не захотели; сравнение с nil / пустой строкой намного быстрее, чем вызов метода.
В Delphi:
var
s: string;
begin
if s = '' then begin
ShowMessage('It is empty or nil.');
... for string обнаруживает как пустую, так и пустую строку (которая равна = nil).