Montag, 21. Mai 2018

Listen in FMX (StringGrid)

Listen in FMX, Nutzung des StringGrids

Im letzten Post ging es um die Nutzung von ListView- Steuerelementen der VCL als Standard- Stream für C++. Nun gibt es im FMX- Framework keine Unterstützung für das Windows- Steuerelement und es braucht eine andere Lösung. Dieses kann ein StringGrid sein.

Sonntag, 13. Mai 2018

VCL ListViews als Standard C++ Stream

VCL ListViews als Standard C++ Stream

In einigen der vorherigen Posts ging es um die Verwendung von GUI- Elementen für die C++- Standard- Streams. Neben dem Memofeld waren das auch Labels und Editfelder. Und für die VCL auch die Statuszeile. Damit lassen sich sicher schon einige interessante Anwendungen zusammenbauen, aber ich möchte jetzt noch einen Schritt weiter gehen, und ein ListView- Steuerelement verwenden. Dieses gibt es in der Form nur unter Windows, und damit auch nur für die VCL. Für FMX könnte man einen ähnlichen Wrapper für ein StringGrid implementieren, und damit die Funktion eines ListViews nachbilden. Aber das originale Steuerelement unter Windows nicht zu verwenden wäre sicherlich dumm. Kompatibilität ist nicht Verzicht sondern das Suchen geeigneter Abstraktionen. Eigentlich sollten die bisherigen Posts schon gezeigt haben, welche mächtigen Abstraktionen uns als C++- Programmierer zur Verfügung stehen, und das Verzicht auf Möglichkeiten sicher nicht zu diesen gehört.

Donnerstag, 10. Mai 2018

Weitere GUI- Elemente und C++- Streams

Weitere GUI- Elemente und C++- Streams

Wie im letzten Post schon angedeutet, geht es heute um weitere GUI- Elemente, die ich als Ausgabemedium für Standard- Streams verwenden möchte. Dabei sind der Phantasie keine Grenzen gesetzt,sie können Edit- Felder,  Label, die Statuszeile und die Überschrift des Formulars verwenden, aber auch so komplexe Oberflächenelemente wie ein VCL- ListView- Element für Windows. Dabei können die Standard- Streams cout, clog und cerr verwendet werden, oder sie definieren einen eigenen Stream den sie dann mit den normalen Stream- Operatoren verwenden können.

RAII beim Verwenden der stream- Neuzuordnungen

Weitere GUI- Elemente als streambuf und RAII zum aufräumen

Kurz vor dem Feiertag ein weitere Post. Wie bereits angekündigt, möchte ich einfach weitere Steuerelemente zur Ausgabe verwenden, zum anderen ist bisher immer noch das manuelle Aufräumen notwendig. In dem Post RAII - Mauszeiger für VCL + FMX habe ich ja erklärt, dass dieses dank RAII nicht notwendig ist, und durch C++ selber verhindert werden kann. Also möchte ich in diesem Post beginnen, einen entsprechenden RAII- Wrapper entwerfen. Weitere Steuerelemente werde ich im nächsten Post betrachten.

Dienstag, 8. Mai 2018

Kleine Hilfstools, trainiere deine C++ Kenntnisse

Kleine Hilfstools, trainiere deine C++ Kenntnisse

Ich vergleiche C++- Entwickler gerne mit Leistungssportlern, die jeden Tag trainieren müssen. Nur so können sie ihre Leistungen kontinuierlich steigern. Das ist bei Programmieren nicht anders, nur sind es nicht die Muskeln und Reflexe, es sind neue Techniken. So weit her ist dieser Vergleich also nicht gezogen. Warum, zum einen weil programmieren nicht so einfach ist, und speziell C++ erweiterte Anforderungen an den Kenntnisstand stellt, und es nicht jeder kann, zum anderen aber auch, weil wir in Projekten nur Spracheigenschaften nutzen werden, die wir sicher beherrschen.

Nur, wie können wir sie trainieren, wenn nicht in unseren aktuellen Projekten? Uns begegnen in der täglichen Arbeit immer wieder Aufgaben, für die wir kleine Hilfstools brauchen. Aber anstatt sie schnell selber zu schreiben, fangen wir an im Internet zu suchen und ärgern uns, wenn es nicht 100% zu dem passt, was wir eigentlich suchen. Und genau hier ist die Lösung, wir schreiben uns kleine Hilfstools und lösen damit nicht nur unsere konkreten Probleme rund um die Projekte, wir trainieren mit den aktuellsten Compilern einfach neue Techniken.

Sonntag, 6. Mai 2018

Verwendung von Standardstreams zur Ausgabe in Memofeldern

Verwendung von Standardstreams mit VCL und FMX

Ich höre immer wieder, dass die meisten C++ Bücher und Beispiele, die man im Internet findet, mit dem C++Builder im speziellen, aber eben auch generell mit C++ in der heutigen Zeit nicht mehr funktionieren würden. Diese würden die Standardstreams verwenden, und die würden ja bei der Nutzung einer grafischen Oberfläche, sei es nun Windows, Android oder auch IOS nicht funktionieren. Und wer würde dann noch Anwendungen für die Konsole oder Eingabeaufforderung schreiben? Daran würde sich dann sogar sehr schnell die generelle Schwäche von C++ zeigen, eigentlich aus der Vergangenheit zu stammen, nicht mehr modern zu sein. Für mich zeigt es allerdings nur eines. Nämlich, dass viele die C++ Streams bisher nicht verstanden haben.

Die meisten schaffen es vielleicht noch, für eigene Datentypen die Eingabe- und Ausgabe- Operatoren zu schreiben, aber generell scheinen die Streams bei vielen C++- Programmierern nicht beliebt zu sein. Dabei bieten sie uns viele Möglichkeiten, und funktionieren von beiden Seiten. Wir können unabhängig voneinander Operatoren definieren, die die Streams nutzen, um unsere eigenen Datentypen auszugeben oder einzulesen. Wir können aber auch an der Basis Veränderungen vornehmen. Also bestimmen, wohin (bzw. woher) die Daten geschrieben oder gelesen werden. Beim Verwenden solcher veränderten Streams spricht man oft vom umlenken, manche bezeichnen es auch "Verbiegen". Ich werde das für die Standardausgabe machen, im ersten Schritt werden ich hier ein Memo- Feld der VCL verwenden, um dann die Klasse auch wieder für FMX verfügbar zu machen. Außerdem werde ich einen Wrapper schreiben, der über RAII die Kontrolle über einen beliebigen Stream übernimmt und Funktionen zum "Verbiegen" anbietet. Beim Ende der Lebensdauer wird aber auf jeden Fall der vorherige Zustand wiederherstellt. 

In einem späteren Blogpost werde ich dann weitere sinnvolle Steuerelemente verwenden, wie die Statuszeile für das Loggen mit clog, oder sogar ein Listview- Steuerelement für die Ausgabe von Listen. Da Listview- Steuerelemente nur unter Windows in der Form existieren und damit mit der VCL werden wir dieses dann einfach in einem StringGrid und FMX nutzen.

Freitag, 4. Mai 2018

Konvertierung der Delphi Stringtypen

Konvertierung der Delphi Stringtypen (template, Spezialisierung)

Wir alle kennen das Problem, dass die Delphi- Stringtypen (UnicodeString oder kurz String, AnsiString) nicht unbedingt zu C++ passen, und wir immer wieder die Methode c_str() bemühen müssen. Das ist nicht nur nervig, es kann auch zu Fehlern führen. Außerdem wollen wir oft den Inhalt einen Strings in einem anderen Datentyp haben, oder dieses umgekehrt in einen Delphi- String umwandeln, zum Beispiel um diesen in einem Edit- Feld eines Formulars anzuzeigen.

Dazu kommt, dass dank der nicht unbedingt nachvollziehbaren Entscheidung von Embarcadero unter iOS und Android weiter auf ein 16 bit Zeichentyp zu setzen, anstatt den systemspezifischen wchar_t Typ zu nutzen, der bei den unixoiden Betriebssystem ja ein 32 bit Datentyp ist. Damit kann es passieren, dass wir es in einem C++- Programm unter Android plötzlich mit 3 nicht unbedingt kompatiblen Datentypen zu haben. Dabei sollte es im Businessteil ihrer Anwendung nur die Entscheidung zwischen nationalen Zeichensatz (8 bit, char, string) geben, oder dem internationalen (wchar_t, wstring). Außerdem sind die Indizes für die Delphi Stringtypen auf den Desktop- Betriebssystemen 1 basierend, auf den mobilen Betriebssystemen aber an C und C++ orientiert 0 basierend. Auch dieses kann zu Problemen und notwendigen Anpassungen führen. Alles das wäre unter C++ einfach schlichtweg unmöglich, da hier ein Industriestandard die Investitionen des Entwicklers schützt.

Ich möchte hier eine Headerdatei für die weitere Verwendung in diesem Blog erzeugen, und dieses Problem mit Hilfe von C++- templates und der Spezialisierung dieser für spezielle Datentypen.

Mittwoch, 2. Mai 2018

RAII - Mauszeiger für VCL + FMX

RAII und plattformunabhängige Bildschirmcursor

Umsetzung von plattformunabhängige Bildschirmzeigern für die Maus mit Hilfe von Resource Acquisition Is Initialization (RAII)


Resource Acquisition Is Initialization (RAII) gilt als eines der Schlüsselkonzepte von C++, und es ermöglicht uns tatsächlich fehlerfreier zu programmieren. Dabei ist es wirklich einfach und leicht umzusetzen. Ins Deutsche übersetzt bedeutet es Ressourcenbelegung ist Initialisierung. Dabei wird die Verwendung einer beliebigen Ressource an den Gültigkeitsbereich einer Variable eines dafür definierten Types geknüpft. Bei der Variablendefinition wird die Ressource angefordert, endet die Lebensdauer der Variable, weil der Block geschlossen wurde, wird die Ressource selbständig freigegeben. Damit kann nicht nur die Freigabe von Speicher automatisiert, und damit auf einen in den coffee based Programmiersprachen gehypten Garbage Collector verzichtet werden, wir können auch Handles, Mutexe und andere Ressourcen damit kontrollieren.

Montag, 30. April 2018

Kommentar zu "Eine IDE, sie zu knechten" (Heise c't 10/2018)

Kommentar zu "Eine IDE, sie zu knechten" (Heise c't 10/2018)

Meine Gedanken, als ich diesen Artikel gelesen habe

Als ich am Freitag die neuste c't in den Händen hielt und den Artikel über Crossplattform- Entwicklungssysteme gelesen habe, war ich überrascht. Ich werde jetzt keine allgemeine Kritik an Zeitschriften folgen lassen. Aber wenn man bedenkt, dass die c't auch von Entscheidungsträgern gelesen wird, denen es leider oft an technologischen Spezialwissen fehlt, die unterschwellige Werbung oder auch das Bashing zu erkennen, ist das schon bedenklich. Und gerade Artikel der c't haben in der Vergangenheit schon als Basis gedient, einen Wechsel von C und C++ hin zu Java oder anderen Sprachen zu untermauern. So kann ich mir auch dieses Mal vorstellen, dass einige Nutzer des C++Builders und von Delphi Probleme bekommen und sich in ihrem Unternehmen rechtfertigen müssen. Denn schließlich steht es ja schwarz auf weiss in der Zeitung, und irgendwie glauben wir immer noch, dass es wahr ist, wenn es gedruckt ist. Und gerade die Mischung von sinnvollen Fakten mit kleinen Seitenhieben erscheint hier immer wieder erfolgreich. So möchte ich auch nur auf einige Punkte eingehen.

Sonntag, 29. April 2018

IT im Wandel

Der Wandel der IT

In den letzten 10 Jahren ist es zu einem Wandel in der IT gekommen, Programme und Daten bestimmen immer mehr unser tägliches Leben. Und mit der neuen EU- Datenschutzgrundverordnung ist einigen vielleicht auch deutlich geworden, wieviele Daten mittlerweile gespeichert werden. Dazu kommen aber andere Probleme, denn unsere Rechenzentren werden immer größer, und nachwievor spielt hier C++ eine wichtige Rolle. Somit musste sich auch die Sprache in den letzten Jahren anpassen und erweitern. Aber beginnen wir von vorne und stellen uns diese Frage.


Warum muss sich C++ neu erfinden und anpassen? 

In den letzten Monaten und Jahren hat es sehr viele Neuigkeiten und Veränderungen in der IT gegeben. Durch die SmartPhones, Tablets und SmartTVs, neue Betriebssysteme und Technologien, wie die Bedienung von Rechnern über Touch oder sogar freie Gesten, ist mehr passiert, wie in den 50 Jahren zuvor. Der IT- Markt ist wieder in Bewegung, neue Firmen tauchen auf, andere versuchen sich zu behaupten. Außerdem spielen die sozialen Netzwerke und das Internet heute eine noch wichtigere Rolle. Dazu kommen Cloud- Dienste und andere Serverleistungen.

Samstag, 28. April 2018

Mein erster Blog

Warum gerade jetzt?

Nachdem ich am Freitag den Artikel "Crossplattform- Entwicklung für Android und iOS" von Tam Hanna über Frameworks in der neuen ct - Computerzeitschrift (10/2018) gelesen habe, mit einer doch eher kritischen Bewertung des Embarcadero C++Builder und seiner Frameworks, habe ich mich entschlossen, nun doch endlich meinen schon lange geplanten Blog aufzusetzen. Als MVP für den C++ Builder haben mich einige gefragt, hier aktiver zu werden. Einige sind verunsichert, und ich möchte mit dem Blog unabhängige Informationen rund um modernes C++ mit dem Embarcadero C++ Builder geben. Jeder, der mich in den letzten Jahren auf einer Roadshow oder Schulung gesehen hat, wird sich erinnern, dass Themen wie Ressourcenschonung und der Energieverbrauch, sowie eine Programmierung in C++ am Herzen liegt, die die Firmen nicht in die Abhängigkeit eines Herstellers oder Frameworks liegt. Denn auch die Entwicklung von Qt ist nicht vorhersehbar, und die Nutzung von JIT- Sprachen wie C# oder Java, oder gar Skripten ist nicht die Lösung unser aktuellen Probleme.

Ich werde hier zwar erst einmal in deutsch beginnen, aber später auch Beiträge in Englisch posten, einfach um eine größere Gemeinschaft anzusprechen. Vielleicht mache ich dann einfach einen zweiten Blog auf. Dieser Blog ist auch ausdrücklich privat und ich schreibe ihn in meiner Freizeit. So habe ich mich bewusst für google's blogger- Plattform entschieden, anstatt einen entsprechenden Blog über das von uns genutzte typo3 und die Seiten meiner Firma aufzusetzen. So werde ich hier meine Meinung schreiben, und auch wenn ich als Embarcadero MVP für den C++Builder und meine Tätigkeit auf den Builder fokussiert bin, werbefrei und soweit wie dieses möglich auch ohne jedes finanzielle Interesse schreiben. Ich werde diesen Blog also auch nicht über Werbung monetarisieren. 

Natürlich werde ich Beispiele von Schulungen verwenden, die ich im Rahmen meiner Tätigkeit gehalten habe, um Zusammenhänge zu zeigen. Ich werde auch Teile der Vorlesungen verwenden, die ich an der FH Strahlsund über modernes C++ gehalten habe. Aber ich möchte hier keinen C++ Lehrgang machen. Vielmehr geht es mir um die Diskussion bestimmter Themen die im Zusammenhang mit C++ im allgemeinen und dem C++ Builder im speziellen stehen.

So hoffe ich natürlich nicht nur auf Follower, ich hoffe die Kommentarfunktion wird auch genutzt, so dass es hier zu einer Diskussion kommt.


;