Subscribe to RSS feed



Exe-Verkleinern, ohne sie zu komprimieren

25. August 2008
exe-verkleinern-ohne-sie-zu-komprimieren

Falls Ihr auch schonmal den Fall hattet, dass eure Exe einfach zu groß ist und Ihr diese verkleinern möchtet, damit sie z.B. auf eine Diskette passt, dann habe ich hier ein paar Tipps für euch:

1.) Mit Icarus kann man bei Delphi-Projekten nach ungenutzen Units suchen und diese anschließend entfernen, um dadurch die Exe zu verkleinern:

http://www.peganza.com/products_icarus.htm

2.) Eine weitere Möglichkeit ist die Relocation-Tabelle aus einer Exe zu löschen, die in den meisten Projekten nicht benötigen wird. Delphi packt diese immer in die Exe rein.
Hierfür kann man z.B. StripReloc benutzen:

http://www.innosetup.com/striprlc.php

3.) Natürlich kann man auch die BPL-Dateien auslagern.
Diese werden dann beim Start des Projekts geladen und sind nicht in der Exe-Datei mit reingepackt.
Vor allem, wenn man mit vielen verschiedenen Komponentensammlungen arbeitet, ist dies eine gute Möglichkeit die Exe-Datei kleiner zu bekommen.

4.) Image-Dateien extern auslagern und erst in den Speicher laden, sobald sie angezeigt werden sollen.

Eine von uns bisher eingesetzte Methode, die ich allerdings inzwischen nicht mehr empfehle, wäre Exe-Packer wie ASPack oder UPX zu verwenden.
Dies ist zwar sehr effektiv um die Exe-Datei kleiner zu bekommen, bringt aber auch Nachteile ( gefunden bei dem Link von StripReloc ):

  • Upon startup of a compressed EXE/DLL, all of the code is decompressed from the disk image into memory in one pass, which can cause disk thrashing if the system is low on memory and is forced to access the swap file.
    In contrast, with uncompressed EXE/DLLs, the OS allocates memory for code pages on demand (i.e. when they are executed).
  • Multiple instances of a compressed EXE/DLL create multiple instances of the code in memory.
    If you have a compressed EXE that contains 1 MB of code (before compression) and the user starts 5 instances of it, approximately 4 MB of memory is wasted.
    Likewise, if you have a DLL that is 1 MB and it is used by 5 running applications, approximately 4 MB of memory is wasted.
    With uncompressed EXE/DLLs, code is only stored in memory once and is shared between instances.
  • Facebook
  • Twitter
  • Technorati
  • del.icio.us
  • Digg
  • Google Bookmarks
  • MisterWong
  • DZone
  • Live
  • Mixx
  • MySpace
  • email
  • PDF
  • Print

Tiburon: 10 minütiges Video zur kommenden Delphi – Entwicklungsumgebung

5. August 2008
tiburon-10-minuetiges-video-zur-kommenden-delphi-entwicklungsumgebung

Tiburon soll die neuste Entwicklungsumgebung aus dem Hause Codegear lauten.
In einer ersten Preview werden die ersten Neuerungen, in diesem Fall neue Komponenten, vorgestellt.

Hier gelangt Ihr zum Sneak Peek Video mit David I:

http://dn.codegear.com/article/38383

  • Facebook
  • Twitter
  • Technorati
  • del.icio.us
  • Digg
  • Google Bookmarks
  • MisterWong
  • DZone
  • Live
  • Mixx
  • MySpace
  • email
  • PDF
  • Print

Delphi Applikationen mit Laufzeit-Bibliotheken

29. Juli 2008
delphi-applikationen-mit-laufzeit-bibliotheken

Bei Delphi gibt es die Möglichkeit Programm mit Laufzeitbibliotheken (BPL) zu veröffentlichen.

Dies lohnt sich, dann wenn man mehre Applikationen hat, die dieselben Komponenten verwenden,
da die Anwendung dann viel kleiner wird.

Wichtig ist dabei, dann man nicht nur die Dateien mit der Endung .bpl sondern auch die Sprachdatei mit der Endung .de zur Applikation packt, sondern kann es passieren, dass z.B. Standard Dialoge beim Button “Ja” plötzlich “Yes” schreiben.

Bei Packages von Fremdherstellern kann das allerdings schwierig werden :-(

Wenn man wissen möchte, welche Dateien von einer Applikation verwendet werden, kann man das Tool Dependency Walker verwenden.

http://dependencywalker.com/

  • Facebook
  • Twitter
  • Technorati
  • del.icio.us
  • Digg
  • Google Bookmarks
  • MisterWong
  • DZone
  • Live
  • Mixx
  • MySpace
  • email
  • PDF
  • Print

Priorität des Hauptprozesses ändern

8. Juli 2008
prioritaet-des-hauptprozesses-aendern

Ab und an ist es nötig die Prozesspriorität der eigenen Anwendung zu ändern.

var
  hdlMyApp : THandle;
 
  hdlMyApp := GetCurrentThread;
  SetThreadPriority( hdlMyApp , THREAD_PRIORITY_IDLE );
  • Facebook
  • Twitter
  • Technorati
  • del.icio.us
  • Digg
  • Google Bookmarks
  • MisterWong
  • DZone
  • Live
  • Mixx
  • MySpace
  • email
  • PDF
  • Print

Objekte serealisieren und deserialisieren

22. Juni 2008
objekte-serealisieren-und-deserialisieren

Schönen guten Tag liebe Delphi Gemeinde!
Was in vielen “modernen” Sprachen bereits gang und gäbe ist und zum guten Ton gehört haben wir nicht zur Verfügung, das serealisieren und deserialisieren von Objekten. Mit hilfe der RTTI (Run Time Type Info) und einigen Einschränkungen gibt es jedoch auch für uns die Möglichkeit derartige Mechanismen zu schaffen. Im folgendem möchte ich gerne meinen Lösungsansatz vorstellen, der mir und vielleicht sogar dem ein oder anderem Arbeit erspart oder zumindest Hilfestellung gibt.

Den ganzen Beitrag lesen …

  • Facebook
  • Twitter
  • Technorati
  • del.icio.us
  • Digg
  • Google Bookmarks
  • MisterWong
  • DZone
  • Live
  • Mixx
  • MySpace
  • email
  • PDF
  • Print

Excel-Zugriff per Ole-Objekt

8. Februar 2008
excel-zugriff-per-ole-objekt

Um mit Delphi eine Exceldatei zu editieren, kann man das ganze z.B. über ein Ole-Objekt lösen.

Bei meinem Beispiel gehe ich davon aus, dass bereits eine Excel-Datei existiert, die wir auslesen oder bearbeiten wollen.

Hier ein Codeschnipsel zu Öffnen und Auslesen der Datei:

Excel := CreateOleObject('excel.application');
Excel.Visible := false;  //Macht das Excel-Fenster sichtbar
Excel.Workbooks.Open('C:\daten\testexcel.xls');
strFeldA1 := Excel.ActiveSheet.Cells[1,1].Value; // Ließt das Feld A1
Excel.DisplayAlerts := false;  //Deaktiviert Nachfrage beim Beenden
Excel.quit;  //Beendet Excel (Wichtig sonst bleibt es immer offen im Hintergrund)

Um ein Feld zu ändern erweitern wir das ganze ein wenig:

Excel := CreateOleObject('excel.application');
Excel.Visible := false;   //Macht das Excel-Fenster sichtbar
Excel.Workbooks.Open('C:\daten\testexcel.xls');
Excel.ActiveSheet.Cells[1,1].Value := 'Test'; // Beschreibt das Feld A1
Excel.DisplayAlerts := false;    //Deaktiviert Nachfrage beim Beenden
Excel.ActiveWorkbook.SaveAs('C:\daten\testexcel2.xls');
Excel.quit;   //Beendet Excel (Wichtig sonst bleibt es immer offen im Hintergrund)

Wichtig ist allerdings, dass Excel auf dem jeweiligen Rechner installiert ist, damit diese Lösung funktioniert.

Das Objekt “Excel” ist dabei eine Variable vom Typ Variant und als zusätzliche Unit muss ComObj eingebunden werden.

  • Facebook
  • Twitter
  • Technorati
  • del.icio.us
  • Digg
  • Google Bookmarks
  • MisterWong
  • DZone
  • Live
  • Mixx
  • MySpace
  • email
  • PDF
  • Print

Applikationsicon ändern zur Laufzeit

15. Oktober 2007
applikationsicon-aendern-zur-laufzeit

Das Applikationsicon zu ändern ist unter Delphi sehr einfach. Allerdings benötigt man hierfür zu aller erst eine entsprechende Resource-Datei und damit einen Resource-Editor. Da ich bei meiner Delphi 2007-Installation kein Borland Bildeditor mehr finden konnte, mit dem man prinzipiell so eine Resource-Datei erstellen konnte, bin ich nach kurzer Suche auf einen sehr brauchbaren Resource-Editor gestoßen:

Delphi Resource-Editor

In meinem Beispiel habe ich 2 Icons in die Resourcedatei hinzugefügt, wodurch mein Resultat schlussendlich folgendermaßen aussieht:

Delphi Resource-Editor

Wichtig ist hierbei, dass es ein Icon mit der Bezeichnung “MAINICON” gibt. Dieses wird als Standard-Icon der Applikation verwendet.

Als nächstes speichert man die Resource als z.B. “Test.res” in das Projektverzeichnis der Applikation.

Um die Resourcedatei in das Programm einzubinden genügt:

{$R Test.res}

Schlussendlich genügt dann folgender Code (bei meinem Beispiel) um das Icon zu ändern:

  Icon.Handle := LoadIcon(HInstance, 'ICON2');

Um das Standardicon wieder herzustellen reicht demnach:

  Icon.Handle := LoadIcon(HInstance, 'MAINICON');
  • Facebook
  • Twitter
  • Technorati
  • del.icio.us
  • Digg
  • Google Bookmarks
  • MisterWong
  • DZone
  • Live
  • Mixx
  • MySpace
  • email
  • PDF
  • Print

Delphi online Handbuch

20. September 2007
delphi-online-handbuch

Ein recht gelungenes Delphi/ObjectPascal Handbuch findet man online unter unter http://de.wikibooks.org/wiki/Delphi

Weitere Bücher zu IT Themen findet man ebenfalls unter http://de.wikibooks.org/wiki/Regal:Programmierung

  • Facebook
  • Twitter
  • Technorati
  • del.icio.us
  • Digg
  • Google Bookmarks
  • MisterWong
  • DZone
  • Live
  • Mixx
  • MySpace
  • email
  • PDF
  • Print

Objekte sicher freigeben mit Delphi

18. September 2007
objekte-sicher-freigeben-mit-delphi

Jedem Entwickler, der mit Delphi anfängt, unterläuft häufig folgender Fehler:

Man öffnet ein Formular mit “frmBeispiel.Show;” und schließt es mit “frmBeispiel.Close;”.

Dabei geht man davon aus, dass der Speicher wieder freigegeben wird. Irrtum!

Gleiches gilt für alle Objekte!

Deshalb mit “FreeAndNil(objekt);” freigeben.

Dynamische Arrays gibt man mit “SetLength(array,0);” frei.

  • Facebook
  • Twitter
  • Technorati
  • del.icio.us
  • Digg
  • Google Bookmarks
  • MisterWong
  • DZone
  • Live
  • Mixx
  • MySpace
  • email
  • PDF
  • Print

Umschreiben eines CLX-Projektes zu einer normalen Win32-Anwendung

18. September 2007
umschreiben-eines-clx-projektes-zu-einer-normalen-win32-anwendung

Nachdem wir Anfangs auf der CLX-Schiene einige Projekte umgesetzt hatten, aber nun feststellen mussten, dass uns dies langfristig gesehen keine Vorteile gebracht hat, werden nun zunehmend die damals erstellten CLX-Projekte zu gewöhnlichen Win32-Applikationen umgeschrieben.

Falls jemand vor dem gleichen Problem steht, beschreibe ich meinen Weg, mit dem ich die Applikationen in kürzester Zeit umgeschrieben hatte (Voraussetzung hierfür ist, dass keine linuxspezifischen Befehle verwendet wurden):

1. Schritt:
Schließen Sie das Projekt, falls Sie es gerade offen haben. Für die Konvertierung wird Delphi nicht benötigt.

2. Schritt:
Benennen Sie Ihre *.xfm-Dateien in *.dfm um.

3. Schritt:
Öffnen Sie alle *.pas-Dateien ihres Projektes und ändern Sie: {$R *.xfm} in {$R *.dfm}

4. Schritt:
Bei den geöffneten *.pas-Dateien müssen Sie die uses durchgehen und prüfen, ob Sie CLX-Units verwenden. Diese beginnen immer mit einem großen Q. Entfernen Sie einfach das große Q, also z.B. QForms zu Forms.
Sollten Sie QTypes eingebunden haben, so müssen Sie diesen Verweis komplett entfernen.

5. Schritt:
Insofern Sie Forms verwendet haben, müssen Sie auch in der *.dpr-Datei die uses bearbeiten. Hier sollte auch QForms existieren. Ändern Sie es auf Forms ab.

6. Schritt:
Öffnen Sie nun Ihr Projekt und kontrollieren Sie die formatierungen Ihrer Objekte. Bei mir hatten einzelne Objekt als Color eine blaue Farbe. Desweiteren wird beim öffnen des Projektes vermutlich die Meldung erscheinen, dass Ihr Formular die Eigenschaft “TextWidth” nicht beinhaltet. Diese Meldung können Sie ignorieren.

Nun sollte alles geschafft sein. Erstellen Sie nun Ihr Projekt neu.

  • Facebook
  • Twitter
  • Technorati
  • del.icio.us
  • Digg
  • Google Bookmarks
  • MisterWong
  • DZone
  • Live
  • Mixx
  • MySpace
  • email
  • PDF
  • Print