Delete folders recursively

Here is an example batch file that deletes all Delphi “__history” folders recursively:

BOF of batch file:
===========

@ECHO OFF
ECHO.

@SET DELPHI_PROJECTDIR=C:\DELPHI_PROJECTS

REM delete all __history folders recursively
FOR /D /R "%DELPHI_PROJECTDIR%" %%d IN (__history) DO (
  IF EXIST "%%d" (
    echo deleting temp directory "%%d"
    RMDIR /S /Q "%%d"
  )
)
PAUSE

===========
EOF of batch file

Application default font

Here is an example how to detect the Windows version and set the default font name and size of your app if it is Windows Vista or higher.
Important: you have to enable the ParentFont property of each form in your project!

program MyApp;

uses
  Forms,
  SysUtils;

{$R *.res}

begin
  Application.Initialize;
  if CheckWin32Version(6) then
  begin
    Application.DefaultFont.Name := 'Segoe UI';
    Application.DefaultFont.Size := 9;
  end;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmMain_MyForm, frmMain_MyForm);
  Application.Run;
end.


Return to Tab

Hier ein weiterer Code-Schnipsel: diese kleine procedure setzt beim Drücken von RETURN den Focus auf das nächste Control.


procedure TfrmTest.KeyPress(Sender: TObject; var Key: Char);
begin
  // move the cursor to the next control pressing the RETURN key
  if Key = #13 then
  begin
    If HiWord(GetKeyState(VK_SHIFT)) <> 0 then
    begin
      SelectNext(Sender as TWinControl, False, True);
    end
    else
    SelectNext(Sender as TWinControl, True, True);
    Key := #0;
  end;
end;

Assertion failure “(!”SetThreadContext failed”)” in “\win32src\thread32.cpp at line 434

After installation of Windows 7 (64 Bit) and installation of Delphi 2009 the following error “Assertion failure “(!”SetThreadContext failed”)” in “\win32src\thread32.cpp at line 434 Continue execution?” occured terminating the started application in IDE.

The IDE has to be closed per Windows Task Manager.

But there is an inofficial fix that Olaf Molien described in his blog.

There is a howto and a tool to modify the file “bordbk120N.dll”.

My IDE doesn’t throw any exception after the fix. Nice work!

Entwicklertage 2010

Vom 22.02.2010 bis zum 25.02.2010 fanden die Entwicklertage im Maritim(-konferenz) Hotel Darmstadt statt.

Ich besuchte alle 3 angebotenen Sessions:

22.02.2010 – Delphi Language Update

Speaker: Bernd Ua (probucon)

Hier wurden viele der Neuerungen der letzten Delphi Versionen an praktischen Beispielen gezeigt.

23.02.2010 – Tests mit Delphi – Von Unit-Tests bis TDD

Speaker: Bernd Ua (probucon)

Hier wurde vor allem auf das Erstellen und Durchführen von Testfällen mit Dunit eingegangen.

Ich hätte für meinen Fall gern noch den Einsatz in einem automatischen Buildskript gesehen.

24. – 25.02.2010 Verbesserung von Softwarequalität in Delphi

Speaker: Jeroen Pluimers (better office benelux)

Der erste Tag war recht viel Theorie. Zum Beispiel: welche Vorgehensmodelle es bei der Softwareentwicklung gibt, muss ich nicht unbedingt in einer solchen Session noch einmal vorgekaut bekommen.

Am zweiten Tag wurde es dann praktischer. Verschiedene Session Teilnehmer durften Teile ihrer Programme und Quellcodes vorstellen. Es war einmal ganz interessant zu sehen wie andere Firmen und Entwickler die Projekte aufgebaut haben, welche Tools und Komponenten verwendet werden, wie der Quellcode organisiert und formatiert ist und vieles mehr.

Fazit…

  • Sehr schön ist, dass man viele der gezeigten Beispiele auch live am eigenen Laptop nachvollziehen kann, soweit man denn das Gezeigte sofort verstanden hat.
  • Ich habe im Maritim Hotel übernachtet. Da ich aber zu spät gebucht hatte, wurde ich nicht in dem Hotel untergebracht, in dem die Konferenz stattfand, sondern in dem gegenüberliegenden Hotel.
    So musste ich morgens und abends das Hotel wechseln. Als Nachteil ergab sich daraus zum Beispiel, dass ich kein kostenloses W-LAN in meinem Hotel hatte, während man in dem Konferenzhotel auf die BASTA-WLANs Zugriff hatte.
  • Einge der Session Teilnehmer hatten teilweise noch Delphi 7 in Verwendung. Wenn man an einer Session zum Thema DUnit teilnimmt, sollte man sich DUnit vorher eventuell mal ansehen und auch installieren. Der Speaker hatte unnötigerweise zu viel Zeit aufgebracht, hier den Kandidaten zu helfen DUNit in Delphi 7 lauffähig zu bekommen, während andere Teilnehmer die Däumchen drehen konnten. Diese Zeit hätte man lieber dazu verwendet, um noch näher auf die praktischen Beispiele einzugehen.
  • Die Verpflegung war gut. Frühstück, Mittags- und Abendbuffet sowie Getränke waren inklusive.
  • Ich kann die Sessions weiterempfehlen, vor allen denjenigen, die noch ältere Delphiversionen nutzen. Ihr verpasst so einiges.
  • Die Sessions haben mir klar gezeigt wohin der Weg geht: .Net. Daran führt wohl oder übel kein Weg vorbei. Passend dazu habe ich den Hauptpreis bei der Verlosung gewonnen: eine Lizenz NetAdvantage von http://www.infragistics.com. Damit wird dann wohl mein erster .Net Kontakt beginnen.

Zugriffsverletzungen bei Benutzung von Generics

Nachdem ich nun das neue Feature  Generics in meinen Quellcodes implementiert hatte, musste ich auch gleich eine schmerzhafte Bekanntschaft mit einigen Zugriffsverletzungen bei der Benutzung von folgenden Methoden machen:

  • TObjectList<T>.Remove(<T>)
  • TObjectList<T>.Extract(<T>)
  • TObjectList<T>.IndexOf(<T>)

Das Problem hier ist, dass in der Unit Generics.Collection auf eine nicht erzeugte Instanz von TComparer zugegriffen wird.

Die Lösungen sind die folgenden:

  • auf Delphi 2010 updaten :-)
  • Verwendung von folgendem Constructor:
    ObjectList := TObjectList<T>.Create(TComparer<T>.Default);
    dabei wird automatisch der standard TComparer verwendet

Ein Update seitens Embarcadero gibt es bis dato nicht.