Home » Über Delphi » Versionen » Preview Delphi 2009 (Tiburon)

Preview Delphi 2009 (Tiburon)

Dieser Artikel wurde zu einem Zeitpunkt geschrieben, zu dem Delphi 2009 noch nicht veröffentlicht war. Die Inhalte basieren auf den Blog-Einträgen von CodeGear-Mitarbeitern und sollen einen Überblick geben, welche Dinge in der neuen Delphi-Version zu erwarten sind. Natürlich gibt es keine Garantie, dass das Release dann auch alle aufgeführten Neuerungen enthält!

Unicode

Delphi 2009 unterstützt Unicode, wofür die komplette VCL, RTL, IDE und die Sprache selbst umgestellt werden musste. Der Typ „String“, der in Delphi 1 ein Alias für „ShortString“ und in den folgenden Versionen für „AnsiString“ war, wird nun ein „UTF8String“. Der AnsiString richtete sich bislang nach der Codepage, die zur Laufzeit gültig war. CodeGear hat die Implementierung nun so erweitert, dass man bereits zur Compile-Zeit festlegen kann, welche Codepage verwendet werden soll. Der UTF8String ist wie folgt definiert:

type
 UTF8String = type AnsiString(CP_UTF8);

Wird dieser UTF8String als Parameter einer Methode verwendet, wird sichergestellt, dass der String-Wert automatisch beim Aufruf nach UTF-8 konvertiert wird, auch wenn es sich vorher um einen normalen AnsiString gehandelt hat.
Die Umstellung auf Unicode ermöglicht es nun auch, mit den bekannten Datenbankkomponenten UTF-8-kodierte Texte aus Datenbanken zu lesen, ohne dass es zu Zeichensatzproblemen kommt.
Und auch wer nur einfache Textdateien verwendet, kommt in den Genuss von Unicode: Die Methoden LoadFromFile und SaveToFile von TStrings wurden überladen, so dass sie nun optional mit einem zusätzlichen Parameter namens „Encoding“ aufgerufen werden können. Damit sind z.B. die folgenden Aufrufe möglich:

Listbox1.Items.LoadFromFile(’c:tempMyListBoxItems.txt’,TEncoding.UTF8)
ListBox1.Items.SaveToFile(’MyListBoxItems.txt’,TEncoding.UTF8);

Neue VCL-Komponenten

Tiburon enthält einige neue VCL-Komponenten:

  • TCategoryPanels: Panels, die verschiedene Gruppierungen anzeigen können
  • TLinkLabel: Ein Label, das einen Link wie auf einer Webseite enthält
  • TBallonHint: Ein Hint in Form einer Sprechblase, die unter Vista auch Icons enthalten kann
  • TButtonedEdit: Ein Eingabefeld, in das ein Button integriert ist (s. Screenshot unten)

Außerdem wurden bestehende Komponenten erweitert. So kann TEdit nun einen Hint anzeigen, wenn ungültige Zeichen eingegeben wurden:

Neues in der IDE

Die Toolpalette enthält nun ein Eingabefeld für die Komponentensuche:

Außerdem gibt es eine neue View zur Anzeige aller verfügbaren Type Libraries.
Der COM/ActiveX-Assistent wurde überarbeitet.

Neues im Debugger

Der Debugger unterstützt nun unter Windows Vista und Windows Servier 2008 die neue API Vista Wait Chain Traversal. Damit kann man detaillierte Informationen über Deadlocks, die im eigenen Programm auftreten, erhalten. Genauere Informationen dazu sind im Blog von Chris Hesik zu finden.

Neue Sprach-Features

Anonyme Methoden

Mit Tiburon unterstützt Delphi nun auch anonyme Methoden. Dabei handelt es sich um Funktionen oder Prozeduren ohne Namen. So kann einer Variablen direkt ein Code-Block zugewiesen werden (Methodenzeiger), ohne dass diese Methode noch einen eigenen Namen benötigt. Beispiel:

Deklaration:

type
 // method reference
 TProc = reference to procedure(x: Integer); 

procedure Call(const proc: TProc);
begin
  proc(42);
end;

Verwendung:

var
  proc: TProc;
begin
  // anonymous method
  proc := procedure(a: Integer)
  begin
  Writeln(a);
  end; 

  Call(proc);
  readln
end.

Generics

Tiburon wird Generics unterstützen, mit deren Hilfe man z.B. eine Liste erzeugen kann, die nur Elemente eines bestimmten Typs aufnimmt. Die Unit Generics.Collections enthält dabei TList, TQueue, TStack, TDictionary, TObjectList, TObjectQueue, TObjectStack und TObjectDictionary.

 TList<T> = class
  private
    FItems: array of T;
    FCount: Integer;
    procedure Grow(ACapacity: Integer);
    function GetItem(AIndex: Integer): T;
    procedure SetItem(AIndex: Integer; AValue: T);
  public
    procedure Add(const AItem: T);
    procedure AddRange(const AItems: array of T);
    procedure RemoveAt(AIndex: Integer);
    procedure Clear;
    property Item[AIndex: Integer]: T read GetItem write SetItem; default;
    property Count: Integer read FCount;
 end;

Verwendung:

var
  ilist: TList<Integer>;
  slist: TList<String>; 

procedure PrintListInteger;
var
  i: Integer;
begin
  for i := 0 to ilist.Count - 1 do
    Write(ilist[i], ' ');
  Writeln;
end; 

procedure PrintListString;
var
  i: Integer;
begin
  for i := 0 to slist.Count - 1 do
    Write(slist[i], ' ');
  Writeln;
end; 

begin
  ilist := TList.Create;
  try
    ilist.AddRange([1, 2, 3]); // ['1', 'second', 'third']);
    PrintListInteger;
    ilist.RemoveAt(1);
    PrintListInteger;
    ilist.Clear;
    PrintListInteger;
  finally
    ilist.Free;
  end;
  slist := TList.Create;
  try
    slist.AddRange(['one', 'two', 'three']); // ['first', 'second', 'third']);
    PrintListString;
    slist.RemoveAt(1);
    PrintListString;
    slist.Clear;
    PrintListString;
  finally
    slist.Free;
  end;
  Readln;
end.

Methoden beenden

Während „return“ in Java die Ausführung einer Methode sofort beendet und auch einen Rückgabewert zurückgegen kann, musste man in Delphi erst der „result“-Variablen einen Wert zuweisen und dann mit „exit“ beenden. Mit Tiburon gibt es nun eine neue Möglichkeit:

function DoStuff(Value: Boolean): Integer;
begin<
  if Value then
    Exit(1);

 Result := 0;
end;

TStringBuilder

Die Tiburon-Runtime Library (RTL) enthält eine neue Klasse namens TStringBuilder, die das Zusammensetzen von Strings vereinfacht. Dabei wird das Anhängen, Ersetzen und Einfügen unterstützt. Beispiel:

procedure TForm1.example;
var myStringBuilder: TStringBuilder;
  newVersion: SmallInt;
begin
  myStringBuilder := TStringBuilder.Create;
  try
    newVersion := 2009;
    myStringBuilder.Append('Tiburon - ').Append('The new Delphi ').Append(newVersion);
    myStringBuilder.Append('and').Append('C++Builder ').Append(newVersion);)
    MessageDlg(myStringBuilder.ToString, mtInformation, [mbOk], 0);
    myStringBuilder.Replace('and', ' and ');
    MessageDlg(myStringBuilder.ToString, mtInformation, [mbOk], 0);
  finally
    myStringBuilder.Free;
  end;
end;

Datenbankanbindungen

Tiburon enthält eine neue komponentenbasierte DataSnap-Server-Technologie, die nicht mehr DCOM verwendet, sondern JSON/RPC. Weitere Informationen hierzu sind im Blog von Steve Shaughnessy zu finden.

Danke...

Danke an Seppy Bloom, Andreano Lanusse, Allen Bauer, Anders Ohlsson, Chris Bensen, David I. und Nick Hodges für ihre Blogeinträge, aus denen obige Informationen stammen!
Aktuelles ist unter blogs.codegear.com zu finden.