{"id":1616,"date":"2012-10-01T01:30:45","date_gmt":"2012-10-01T08:30:45","guid":{"rendered":"http:\/\/www.andreanolanusse.com\/pt\/?p=1616"},"modified":"2013-05-01T22:36:52","modified_gmt":"2013-05-02T05:36:52","slug":"delphi-xe3-e-suas-novidades-parte-2","status":"publish","type":"post","link":"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/","title":{"rendered":"Delphi XE3 e suas novidades &#8211; Parte 2"},"content":{"rendered":"<p>Dando sequ\u00eancia no review do Delphi XE3, vamos conhecer as novidades relacionadas ao IDE, VCL e RTL.<\/p>\n<h2>IDE<\/h2>\n<p>O IDE agora traz alguns novos Wizard para cria\u00e7\u00e3o de aplica\u00e7\u00f5es Metropolis para VCL e FireMonkey, voc\u00ea ver\u00e1 dois novos tipos de assistentes (wizards):<\/p>\n<ul>\n<li><strong>VCL Metropolis UI Application<\/strong><\/li>\n<li><strong>FireMonkey Metropolis UI Application<\/strong><\/li>\n<\/ul>\n<h3>Assinatura da Aplica\u00e7\u00e3o na Apple Mac Store<\/h3>\n<p>Nas op\u00e7\u00f5es do projeto voc\u00ea ver\u00e1 algumas novas op\u00e7\u00f5es relacionados a compila\u00e7\u00e3o de aplica\u00e7\u00f5es para Mac OS que ir\u00e1 lhe ajudar a fazer o sandbox, code sign e prepara\u00e7\u00e3o da aplica\u00e7\u00e3o para ser enviada \u00e0 Apple Mac Store, a Apple exige que seja feito o sandbox e code sign, assim este recurso facilita e melhora a experi\u00eancia do desenvolvedor no processo como um todo.<\/p>\n<h3>Convers\u00e3o de Forms VCL e FireMonkey para Metropolis<\/h3>\n<p>No Designer do Formul\u00e1rio ao clicar com o bot\u00e3o direito voc\u00ea ter\u00e1 a op\u00e7\u00e3o &#8220;Convert to UI Metropolis Form&#8221;, essa op\u00e7\u00e3o converte seu Form VCL ou FireMonkey para o estilo metropolis.<\/p>\n<h2>RTL<\/h2>\n<h3>Record Helpers para tipos simples<\/h3>\n<p>Delphi XE3 traz uma novidade bem legal que permite extender tipos primitivos ou simples atrav\u00e9s do uso de Record Helpers, se voc\u00ea n\u00e3o est\u00e1 familiarizado com Record ou Class Helpers leia este <a href=\"http:\/\/www.andreanolanusse.com\/pt\/como-utilizar-parametros-em-dbexpress-dbx-framework\/\">artigo<\/a>.<\/p>\n<p>[quote style=&#8221;boxed&#8221;]Aproveite e me siga no Twitter\u00a0<a class=\"twitter-follow-button\" href=\"https:\/\/twitter.com\/andreanolanusse\" data-show-count=\"true\" data-lang=\"pt\" data-size=\"large\">Seguir @andreanolanusse<\/a>\u00a0<script type=\"text\/javascript\">\/\/ <![CDATA[\n!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=\"\/\/platform.twitter.com\/widgets.js\";fjs.parentNode.insertBefore(js,fjs);}}(document,\"script\",\"twitter-wjs\");\n\/\/ ]]><\/script>[\/quote]<\/p>\n<p>Vamos usar o TStringHelper que \u00e9 um dos record helpers que vem na RTL do XE3, com ele vamos basicamente acessamos diversos m\u00e9todos diretamente a partir de uma String como se ele fosse um &#8220;objeto&#8221;, por exemplo em vez de escrever Length(Nome) para saber o tamanho da vari\u00e1vel Nome, vamos escrever Nome.Length e obter como retorno o tamanho da mesma, basicamente o TStringHelper extende o tipo String implementando uma s\u00e9rie de m\u00e9todos que nos permite fazer isso.<\/p>\n<p>Abaixo a defini\u00e7\u00e3o original da RTL para o TStringHelper.<\/p>\n<pre class=\"brush: delphi\">TStringHelper = record helper for string\r\nprivate\r\n  function GetChars(Index: Integer): Char; inline;\r\n  function GetLength: Integer; inline;\r\n  class function CharInArray(const C: Char; const InArray: array of Char): Boolean; static;\r\n  function IndexOfAny(const Values: array of string; var Index: Integer): Integer; overload;\r\npublic\r\n  const Empty = '';\r\n  \/\/ Methods\r\n  class function Create(C: Char; Count: Integer): string; overload; inline; static;\r\n  class function Create(const Value: array of Char; StartIndex: Integer; Length: Integer): string; overload; static;\r\n  class function Create(const Value: array of Char): string; overload; static;\r\n  class function Compare(const StrA: string; const StrB: string): Integer; overload; static;\r\n  class function Compare(const StrA: string; const StrB: string; IgnoreCase: Boolean): Integer; overload; static;\r\n  class function Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer): Integer; overload; static;\r\n  class function Compare(const StrA: string; IndexA: Integer; const StrB: string; IndexB: Integer; Length: Integer; IgnoreCase: Boolean): Integer; overload; static;\r\n  class function CompareOrdinal(const strA: string; const strB: string): Integer; overload; static;\r\n  class function CompareOrdinal(const strA: string; indexA: Integer; const strB: string; indexB: Integer; length: Integer): Integer; overload; static;\r\n  function CompareTo(const strB: string): Integer;\r\n  function Contains(const Value: string): Boolean;\r\n  class function Copy(const Str: string): string; inline; static;\r\n  procedure CopyTo(SourceIndex: Integer; var destination: array of Char; DestinationIndex: Integer; Count: Integer);\r\n  class function EndsText(const ASubText, AText: string): Boolean; static;\r\n  function EndsWith(const Value: string): Boolean; overload;\r\n  function EndsWith(const Value: string; IgnoreCase: Boolean): Boolean; overload;\r\n  function Equals(const Value: string): Boolean; overload;\r\n  class function Equals(const a: string; const b: string): Boolean; overload; static;\r\n  class function Format(const Format: string; const args: array of const): string; overload; static;\r\n  function GetHashCode: Integer;\r\n  function IndexOf(value: Char): Integer; overload; inline;\r\n  function IndexOf(const Value: string): Integer; overload; inline;\r\n  function IndexOf(Value: Char; StartIndex: Integer): Integer; overload;\r\n  function IndexOf(const Value: string; StartIndex: Integer): Integer; overload;\r\n  function IndexOf(Value: Char; StartIndex: Integer; Count: Integer): Integer; overload;\r\n  function IndexOf(const Value: string; StartIndex: Integer; Count: Integer): Integer; overload;\r\n  function IndexOfAny(const AnyOf: array of Char): Integer; overload;\r\n  function IndexOfAny(const AnyOf: array of Char; StartIndex: Integer): Integer; overload;\r\n  function IndexOfAny(const AnyOf: array of Char; StartIndex: Integer; Count: Integer): Integer; overload;\r\n  function Insert(StartIndex: Integer; const Value: string): string;\r\n  function IsDelimiter(const Delimiters: string; Index: Integer): Boolean;\r\n  function IsEmpty: Boolean;\r\n  class function IsNullOrEmpty(const Value: string): Boolean; static;\r\n  class function IsNullOrWhiteSpace(const Value: string): Boolean; static;\r\n  class function Join(const Separator: string; const values: array of const): string; overload; static;\r\n  class function Join(const Separator: string; const Values: array of string): string; overload; static;\r\n  class function Join(const Separator: string; const Values: IEnumerable): string; overload; static;\r\n  class function Join(const Separator: string; const value: array of string; StartIndex: Integer; Count: Integer): string; overload; static;\r\n  function LastDelimiter(const Delims: string): Integer;\r\n  function LastIndexOf(Value: Char): Integer; overload;\r\n  function LastIndexOf(const Value: string): Integer; overload;\r\n  function LastIndexOf(Value: Char; StartIndex: Integer): Integer; overload;\r\n  function LastIndexOf(const Value: string; StartIndex: Integer): Integer; overload;\r\n  function LastIndexOf(Value: Char; StartIndex: Integer; Count: Integer): Integer; overload;\r\n  function LastIndexOf(const Value: string; StartIndex: Integer; Count: Integer): Integer; overload;\r\n  function LastIndexOfAny(const AnyOf: array of Char): Integer; overload;\r\n  function LastIndexOfAny(const AnyOf: array of Char; StartIndex: Integer): Integer; overload;\r\n  function LastIndexOfAny(const AnyOf: array of Char; StartIndex: Integer; Count: Integer): Integer; overload;\r\n  function PadLeft(TotalWidth: Integer): string; overload; inline;\r\n  function PadLeft(TotalWidth: Integer; PaddingChar: Char): string; overload; inline;\r\n  function PadRight(TotalWidth: Integer): string; overload; inline;\r\n  function PadRight(TotalWidth: Integer; PaddingChar: Char): string; overload; inline;\r\n  function Remove(StartIndex: Integer): string; overload; inline;\r\n  function Remove(StartIndex: Integer; Count: Integer): string; overload; inline;\r\n  function Replace(OldChar: Char; NewChar: Char): string; overload;\r\n  function Replace(OldChar: Char; NewChar: Char; ReplaceFlags: TReplaceFlags): string; overload;\r\n  function Replace(const OldValue: string; const NewValue: string): string; overload;\r\n  function Replace(const OldValue: string; const NewValue: string; ReplaceFlags: TReplaceFlags): string; overload;\r\n  function Split(const Separator: array of Char): TArray; overload;\r\n  function Split(const Separator: array of Char; Count: Integer): TArray; overload;\r\n  function Split(const Separator: array of Char; Options: TStringSplitOptions): TArray; overload;\r\n  function Split(const Separator: array of string; Options: TStringSplitOptions): TArray; overload;\r\n  function Split(const Separator: array of Char; Count: Integer; Options: TStringSplitOptions): TArray; overload;\r\n  function Split(const Separator: array of string; Count: Integer; Options: TStringSplitOptions): TArray; overload;\r\n  function StartsWith(const Value: string): Boolean; overload;\r\n  function StartsWith(const Value: string; IgnoreCase: Boolean): Boolean; overload;\r\n  function Substring(StartIndex: Integer): string; overload;\r\n  function Substring(StartIndex: Integer; Length: Integer): string; overload;\r\n  function ToCharArray: TArray; overload;\r\n  function ToCharArray(StartIndex: Integer; Length: Integer): TArray; overload;\r\n  function ToLower: string;\r\n  function ToLowerInvariant: string;\r\n  function ToUpper: string;\r\n  function ToUpperInvariant: string;\r\n  function Trim: string; overload;\r\n  function Trim(const TrimChars: array of Char): string; overload;\r\n  function TrimEnd(const TrimChars: array of Char): string;\r\n  function TrimStart(const TrimChars: array of Char): string;\r\n  property Chars[Index: Integer]: Char read GetChars;\r\n  property Length: Integer read GetLength;\r\nend;<\/pre>\n<p>Abaixo um exemplo pr\u00e1tico:<\/p>\n<pre class=\"brush: delphi\">{$APPTYPE CONSOLE}\r\n\r\nuses\r\n  System.SysUtils;\r\n\r\nvar\r\n  s1 :string;\r\nbegin\r\n\r\n  s1 := 'Usando TStringHelper no Delphi XE3';\r\n  Writeln( Format('O tamanho da string \u00e9 is %d',[s1.Length] ));\r\n\r\n  Writeln(Format('Convertendo para Mai\u00fasculo %s',[s.ToUpper]));\r\n\r\n  \/\/Usando a fun\u00e7\u00e3o Contains\r\n  if s1.Contains('XE3') then\r\n      Writeln(Format('A string \"%s\" cont\u00e9m a string \"%s\"',[s1,'XE3']));\r\n\r\n  Readln;\r\nend.<\/pre>\n<p>O mais importante neste novo recurso \u00e9 poder extender os tipos simples, mas eu diria tamb\u00e9m que isso abre as portas para podermos utilizar os tipos primitivos (simples) como objetos, eles ainda n\u00e3o s\u00e3o, mas fique atento, pois as portas est\u00e3o abertas.<\/p>\n<p>A RTL ainda traz diversos outros record helpers:<\/p>\n<ul>\n<li>System \u2013 TSingleHelper = record helper para\u00a0Single<\/li>\n<li>System \u2013 TDoubleHelper = record helper para\u00a0Double<\/li>\n<li>System \u2013 TExtendedHelper = record helper para\u00a0Extended<\/li>\n<li>System.Classes \u2013 TUInt32Helper = record helper para UInt32<\/li>\n<li>System.SyncObjs \u2013 TCriticalSectionHelper = record helper para TRTLCriticalSection<\/li>\n<li>System.SyncObjs \u2013 TConditionVariableHelper = record helper para\u00a0TRTLConditionVariable<\/li>\n<li>System.Mac.CFUtils \u2013 CFGregorianDateHelper = record helper para\u00a0CFGregorianDate<\/li>\n<li>System.SysUtils \u2013 TGuidHelper = record helper para\u00a0TGUID<\/li>\n<li>Winapi.D2D1 \u2013 D2DMatrix3x2FHelper = record helper para\u00a0TD2DMatrix3X2F<\/li>\n<li>Vcl.Themes \u2013 TElementMarginsHelper = record helper para\u00a0TElementMargins<\/li>\n<\/ul>\n<h3>Vari\u00e1veis Globais (TFormatSettings)<\/h3>\n<p>Vinte vari\u00e1veis globais parte da System.SysUtils foram removidas (deprecated), estas vari\u00e1veis s\u00e3o aquelas relacionadas ao formato da data, moeda, separados de decimal e milhar, etc&#8230;, para ser mais preciso algumas delas:\u00a0DateSeparator,\u00a0DecimalSeparator,\u00a0CurrencyFormat, etc..<\/p>\n<p>A partir do XE3 voc\u00ea ter\u00e1 de usar a vari\u00e1vel\u00a0System.SysUtils.FormatSettings ou criar a sua inst\u00e2ncia de TFormatSettings, todas as vari\u00e1veis anteriormente globais agora s\u00e3o parte do\u00a0TFormatSettings.<\/p>\n<p>Ao compilar voc\u00ea receber\u00e1 um erro de identificador n\u00e3o declarado, assim \u00e9 s\u00f3 fazer a mudan\u00e7a j\u00e1 mencionado. Particularmente eu gosto desta mudan\u00e7a, vari\u00e1veis globais n\u00e3o s\u00e3o uma boa pr\u00e1tica.<\/p>\n<h3>Refactoring FireMonkey<\/h3>\n<p>Diversos tipos do FireMonkey e fun\u00e7\u00f5es matem\u00e1ticas relacionadas ao FireMonkey foram movidas para a RTL (unit System), alguns exemplos:<\/p>\n<ul>\n<li>Vector passou de FMX.Types para System.Types.Vector<\/li>\n<li>Os seguintes tipos TMatrix3D,\u00a0Point3D, TQuaternion3D,\u00a0TVector3D,\u00a0Vector3D\u00a0sairam da unit\u00a0FMX.Types3D e foram para System.Types.<\/li>\n<\/ul>\n<h3>Novos m\u00e9todos e helpers<\/h3>\n<p>Abaixo alguns m\u00e9todos adicionados a RTL e o link para a documenta\u00e7\u00e3o explicando cada um.<\/p>\n<ul>\n<li><a title=\"lib en:System.Types.InflateRect\" href=\"http:\/\/docwiki.embarcadero.com\/Libraries\/en\/System.Types.InflateRect\">InflateRect<\/a>,\u00a0<a title=\"lib en:System.Types.IntersectRectF\" href=\"http:\/\/docwiki.embarcadero.com\/Libraries\/en\/System.Types.IntersectRectF\">IntersectRectF<\/a>,\u00a0<a title=\"lib en:System.Types.MultiplyRect\" href=\"http:\/\/docwiki.embarcadero.com\/Libraries\/en\/System.Types.MultiplyRect\">MultiplyRect<\/a><\/li>\n<li><a title=\"lib en:System.Types.NormalizeRect\" href=\"http:\/\/docwiki.embarcadero.com\/Libraries\/en\/System.Types.NormalizeRect\">NormalizeRect<\/a>,\u00a0<a title=\"lib en:System.Types.NormalizeRectF\" href=\"http:\/\/docwiki.embarcadero.com\/Libraries\/en\/System.Types.NormalizeRectF\">NormalizeRectF<\/a>,\u00a0<a title=\"lib en:System.Types.UnionRectF\" href=\"http:\/\/docwiki.embarcadero.com\/Libraries\/en\/System.Types.UnionRectF\">UnionRectF<\/a><\/li>\n<li><a title=\"lib en:System.Types.RectCenter\" href=\"http:\/\/docwiki.embarcadero.com\/Libraries\/en\/System.Types.RectCenter\">RectCenter<\/a><\/li>\n<li><a title=\"lib en:System.Types.ScalePoint\" href=\"http:\/\/docwiki.embarcadero.com\/Libraries\/en\/System.Types.ScalePoint\">ScalePoint<\/a><\/li>\n<\/ul>\n<p>Tr\u00eas novos helper types (TSingleHelper,TDoubleHelper, and TExtendedHelper) que substituem os seguintes records: TSingleRec, TDoubleRec, TExtendedRec.<\/p>\n<h2>VCL<\/h2>\n<p>Al\u00e9m dos suporte a UI Metropolis que comentei na <a title=\"Delphi XE3 e suas novidades \u2013 Parte 1\" href=\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-1\/\">parte 1 das novidades do XE3<\/a>, alguns refactoring aconteceram na VCL tamb\u00e9m e a raz\u00e3o disto \u00e9 o suporte a Actions no FireMonkey, desta forma Actions agora passa a ser independente de plataforma e com isso abre a possibilidade de suportar outras plataformas futuramente.<\/p>\n<p>Outra novidade \u00e9 o suporte a efeitos quando voc\u00ea passa o mouse sobre controles da VCL, por exemplo o TBitBtn ou TButton, basta mudar a propriedade\u00a0AnimationOnControls para True e seus controles ir\u00e3o se comportar conforme definido no estilo corrente.<\/p>\n<p>Vou ficando por aqui com a segunda parte e em breve volto com a terceira e \u00faltima parte do das novidades do XE3.<\/p>\n<p>At\u00e9 breve!!!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dando sequ\u00eancia no review do Delphi XE3, vamos conhecer as novidades relacionadas ao IDE, VCL e RTL. IDE O IDE agora traz alguns novos Wizard para cria\u00e7\u00e3o de aplica\u00e7\u00f5es Metropolis para VCL e FireMonkey, voc\u00ea ver\u00e1 dois novos tipos de assistentes (wizards): VCL Metropolis UI Application FireMonkey Metropolis UI Application Assinatura da Aplica\u00e7\u00e3o na Apple [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4202,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_s2mail":"no","footnotes":""},"categories":[102],"tags":[181],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v16.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Delphi XE3 e suas novidades - Parte 2 | Andreano Lanusse | Tecnologia e Desenvolvimento de Software<\/title>\n<meta name=\"description\" content=\"Dando sequ\u00eancia no review do Delphi XE3, vamos conhecer as novidades relacionadas ao IDE, VCL e RTL. IDE O IDE agora traz alguns novos Wizard para cria\u00e7\u00e3o\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Delphi XE3 e suas novidades - Parte 2 | Andreano Lanusse | Tecnologia e Desenvolvimento de Software\" \/>\n<meta property=\"og:description\" content=\"Dando sequ\u00eancia no review do Delphi XE3, vamos conhecer as novidades relacionadas ao IDE, VCL e RTL. IDE O IDE agora traz alguns novos Wizard para cria\u00e7\u00e3o\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Andreano Lanusse | Tecnologia e Desenvolvimento de Software\" \/>\n<meta property=\"article:published_time\" content=\"2012-10-01T08:30:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-05-02T05:36:52+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2011\/09\/Icon_Delphi.png\" \/>\n\t<meta property=\"og:image:width\" content=\"170\" \/>\n\t<meta property=\"og:image:height\" content=\"170\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@andreanolanusse\" \/>\n<meta name=\"twitter:site\" content=\"@andreanolanusse\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\">\n\t<meta name=\"twitter:data1\" content=\"8 minutos\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#website\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"name\":\"Andreano Lanusse | Tecnologia e Desenvolvimento de Software\",\"description\":\"Andreano Lanusse blog - artigos, tutoriais e v&iacute;deos sobre tecnologia, desenvolvimento de software (Delphi XE4, C#, PHP, .NET) e t&eacute;cnicas de programa&ccedil;&atilde;o\",\"publisher\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/www.andreanolanusse.com\/pt\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/#primaryimage\",\"inLanguage\":\"pt-BR\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2011\/09\/Icon_Delphi.png\",\"contentUrl\":\"http:\/\/www.andreanolanusse.com\/pt\/wp-content\/uploads\/2011\/09\/Icon_Delphi.png\",\"width\":170,\"height\":170},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/#webpage\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/\",\"name\":\"Delphi XE3 e suas novidades - Parte 2 | Andreano Lanusse | Tecnologia e Desenvolvimento de Software\",\"isPartOf\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/#primaryimage\"},\"datePublished\":\"2012-10-01T08:30:45+00:00\",\"dateModified\":\"2013-05-02T05:36:52+00:00\",\"description\":\"Dando sequ\\u00eancia no review do Delphi XE3, vamos conhecer as novidades relacionadas ao IDE, VCL e RTL. IDE O IDE agora traz alguns novos Wizard para cria\\u00e7\\u00e3o\",\"breadcrumb\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"url\":\"http:\/\/www.andreanolanusse.com\/pt\/\",\"name\":\"In\\u00edcio\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/#webpage\"}}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/#webpage\"},\"author\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"headline\":\"Delphi XE3 e suas novidades &#8211; Parte 2\",\"datePublished\":\"2012-10-01T08:30:45+00:00\",\"dateModified\":\"2013-05-02T05:36:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/#webpage\"},\"commentCount\":14,\"publisher\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\"},\"image\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/#primaryimage\"},\"keywords\":[\"Delphi\"],\"articleSection\":[\"Delphi\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/www.andreanolanusse.com\/pt\/delphi-xe3-e-suas-novidades-parte-2\/#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#\/schema\/person\/620bd05e81598c3aba4781796cbe8903\",\"name\":\"Andreano Lanusse\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#personlogo\",\"inLanguage\":\"pt-BR\",\"url\":\"http:\/\/0.gravatar.com\/avatar\/6a9c6f73c7c480fb826c7303288abfd3?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/0.gravatar.com\/avatar\/6a9c6f73c7c480fb826c7303288abfd3?s=96&d=mm&r=g\",\"caption\":\"Andreano Lanusse\"},\"logo\":{\"@id\":\"http:\/\/www.andreanolanusse.com\/pt\/#personlogo\"},\"sameAs\":[\"https:\/\/twitter.com\/andreanolanusse\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts\/1616"}],"collection":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/comments?post=1616"}],"version-history":[{"count":0,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/posts\/1616\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/media\/4202"}],"wp:attachment":[{"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/media?parent=1616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/categories?post=1616"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.andreanolanusse.com\/pt\/wp-json\/wp\/v2\/tags?post=1616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}