C++Builder für Einsteiger: VCL-Oberflächen schnell gebaut

Keine Zeit? Hier die Kurzversion in 30 Sekunden.
- C++Builder ist die C++-Entwicklungsumgebung von Embarcadero (früher Borland), aktuell ist C++Builder XE.
- Oberflächen baut man im Formular-Designer, indem man Komponenten wie
TButton,TEditundTListBoxaus der Palette aufs Formular zieht.- Ein Doppelklick auf einen Button erzeugt den Event-Handler, z. B.
void __fastcall TForm1::Button1Click(TObject *Sender).- Eigenschaften greift man mit
->an, zum BeispielEdit1->TextoderListBox1->Items->Add(...).- Seit C++Builder 2009 ist
StringeinUnicodeString. Das Prinzip erinnert stark an WinForms in C#.
Neben PHP, C# und Java beschäftige ich mich in diesem Jahr auch wieder mit C++, und zwar mit dem C++Builder von Embarcadero. Der gehörte früher zu Borland, und die Delphi-Leute kennen die Oberfläche seit Jahren. Wenn ihr WinForms aus C# kennt, fühlt ihr euch schnell zu Hause. Hier ein kleiner Einstieg mit einem Mini-Programm.
Formular und Komponenten
Nach dem Start legt ihr unter „Datei > Neu“ eine „VCL-Formularanwendung“ an. Ihr bekommt ein leeres Formular Form1 samt Unit. Rechts liegt die Komponentenpalette, und ihr zieht per Maus ein TEdit, einen TButton und eine TListBox auf das Formular. Der Objektinspektor listet alle Eigenschaften der markierten Komponente. Dort ändert ihr zum Beispiel die Caption des Buttons auf „Hinzufügen“. Die Komponenten heißen standardmäßig Edit1, Button1 und ListBox1, und diese Namen werden in der Header-Datei als Member der Formularklasse angelegt.
Der Event-Handler
Ein Doppelklick auf den Button erzeugt den Handler für das Standardereignis OnClick. Der Rumpf sieht so aus, und die Zeilen dazwischen tippt ihr selbst ein:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Edit1->Text.Trim().IsEmpty())
{
ShowMessage("Bitte erst etwas eingeben!");
return;
}
ListBox1->Items->Add(Edit1->Text);
Edit1->Clear();
Edit1->SetFocus();
Label1->Caption = L"Einträge: " + IntToStr(ListBox1->Items->Count);
}__fastcall ist die Aufrufkonvention, die die VCL für ihre Ereignisse nutzt, die schreibt ihr einfach immer mit hin. Alle VCL-Objekte werden mit -> angesprochen, weil sie immer auf dem Heap liegen. Eigenschaften wie Text oder Caption sehen aus wie Felder, rufen aber im Hintergrund Methoden auf. Das ist praktisch das, was in C# Properties sind. Das Label1 müsst ihr dafür natürlich auch noch auf das Formular ziehen. Und wer einen markierten Eintrag entfernen will, schreibt in einen zweiten Button einfach ListBox1->DeleteSelected();.
Aufräumen müsst ihr die Komponenten übrigens nicht selbst, das übernimmt das Formular als Besitzer, wenn es geschlossen wird.
String und Unicode
Seit C++Builder 2009 ist String ein UnicodeString mit UTF-16, vorher war es ein einfacher Ansi-String. Für Umlaute ist das ein großer Gewinn. Man schreibt Literale mit L"...", aber auch einfache Literale werden implizit umgewandelt. Eine Eigenheit, die jeden zu Beginn erwischt: Der Index in UnicodeString beginnt bei 1, also ist Edit1->Text[1] das erste Zeichen. Wer eigene Funktionen schreibt, die std::string erwarten, muss konvertieren. Ich benutze dafür oft den Umweg über AnsiString, aber da wird es bei Sonderzeichen schnell haarig, das schaue ich mir später noch genauer an.
Vergleich zu WinForms
Wer von C# kommt, wird vieles wiedererkennen: Designer, Komponenten, Ereignisse per Doppelklick, Eigenschaften im Inspektor. Der Hauptunterschied ist, dass C++Builder echten nativen Code erzeugt, ohne .NET-Laufzeit, und dass man Speicher und Zeiger im Blick behalten muss. Dafür bekommt man eine ausgereifte Komponentenbibliothek und startet mit einer Exe, die man einfach weitergeben kann.
Habt ihr schon mit dem C++Builder oder mit Delphi gearbeitet? Schreibt mir gern, womit ihr eure Windows-Oberflächen baut.
Christian Ackermann
Softwareentwickler (C++, C, Java, C#) aus der Oberpfalz, bloggt seit 2001 über Linux, Technik und Kochen.