Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Uses; brauche mal Euren Rat (https://www.delphipraxis.net/998-uses%3B-brauche-mal-euren-rat.html)

Daniel B 5. Okt 2002 21:16


Uses; brauche mal Euren Rat
 
Hallöchen Jungs,

also, ich habe ein Programm mit sehr vielen Funktionen und Einstellmöglichkeit. Ich sag jetzt mal etwa 80% wie bei Outlook Express.
Nicht gerade wenig.
Wenn ich nun Uses rausschmeissen möchte, wie kann ich am besten rausfinden, welche ich nicht mehr brauche, ohne jede Funktion meiner WeichWare ausprobieren zu müssen.
Mein Programm bewegt sich so langsam auf 1,4MB zu.
Es soll aber auf jeden Fall auf eine Diskette passen. Es ist nur die .exe.
Kommentare rausschmeissen wird nichts bringen.
Es sind doch recht viele. Aber damit holt man nichts raus.
Bis ich fertig bin kommen noch 2 Formulare dazu. Dann wird es eng. :roll:
Wenn ich 200-300Kb sparen kann, wäre ich zufrieden.
Irgend welche Tips?
Vielen Dank

Grüsse, Daniel :hi:

Christian Seehase 5. Okt 2002 21:29

Moin Daniel B,

also was mir so spontan dazu einfällt:
Die Units unter Uses komplett auskommentieren (geht am Besten, wenn sie in einzelnen Zeilen stehen), und einen Syntaxcheck laufen lassen.
Günstigstenfalls läuft der jetzt glatt durch.
Wird gemeckert, müsstest Du, durch einzelnes wieder aufnehmen der Units, nach und nach rausbekommen, welche Unit eingebunden sein muss, damit kein Fehler mehr angezeigt wird. Das musst Du dann solange Fortsetzen, bis keine Fehler mehr angezeigt werden. Die Units die dann noch auskommentiert sind kannst Du wohl offensichtlich weglassen.
Das musst Du dann mit jeder einzelnen Unit in Deinem Programm machen.

So liesse sich relativ schnell und einfach ermitteln, welche Unit nicht eingebunden werden muss.

Da Du D6 benutzt vermute ich mal, dass Du auf jeden Fall die Unit Variants weglassen kannst. Die wird bei D6 ja immer automatisch mit eingebunden, aber längst nicht immer gebraucht.

RomanK 5. Okt 2002 21:36

Also ist zwar nicht die Antwort auf deine Frage aber ich würde es noch UPXen

Daniel B 5. Okt 2002 21:42

Hi,

Christian, das mit dem Check hab ich nicht verstanden.
Wie macht man das?
Im Anhang, sind meine jetzigen zu sehen.

Grüsse, Daniel :hi:

Nachtrag: Die Variants hab ich raus, gebracht hat es allerdings nichts.

Christian Seehase 5. Okt 2002 21:57

Moin Daniel B,

ich versuch's mal mit einem kleinen Beispiel (Standardvorgabe bei D5)

Code:
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
Schritt 1 Alle untereinander und auskommentieren:
Code:
//uses
//  Windows,
//  Messages,
//  SysUtils,
//  Classes,
//  Graphics,
//  Controls,
//  Forms,
//  Dialogs;
Jetzt Strg-F9 um zu kompilieren. Dabei wird mit Sicherheit ein Fehler auftreten, denn ganz ohne eingebundene Unit kommmt man selten aus.

Schritt 2 Eine Unit wieder zulassen:
Code:
uses
  Windows;
//  Messages,
//  SysUtils,
//  Classes,
//  Graphics,
//  Controls,
//  Forms,
//  Dialogs;
Erneut kompilieren. Tritt jetzt der gleiche Fehler auf wie vorher, die Unit wieder auskommentieren, und die // bei der nächsten wegnehmen, bis der erste Fehler nicht mehr auftritt. Die erste Unit die das Programm wirklich braucht ist dann gefunden.

Dieses jetzt solange wiederholen, bis kein Fehler mehr auftritt. Mit ein bisschen Glück werden dann ein paar Units auskommentiert sein.

Units, von denen Du genau weisst, dass Du sie auf jeden Fall brauchst, brauchst Du natürlich nicht zu berücksichtigen. Da kommt bei Dir wohl, z.B. die ShellAPI in Frage.

Ich hoffe, dass das jetzt verständlicher war, wenn nicht versuch' ich's nochmal deutlicher.

Wie schon gesagt, auf Variants wirst Du wohl verzichten können.
Bei kleinen Änderungen im Code wohl auch auf Messages und Dialogs. Du müsstest halt nur die API MessageBox statt MessageDlg/ShowMessage verwenden, sowie die zugehörigen Konstanten. Die befinden sich in der Unit Windows.

Daniel B 5. Okt 2002 22:01

Hallo Christian,

ja natürlich. Stand jetzt auf dem Schlauch. Ich dachte das ich was übers Menü machen müsste, irgend eine option o.ä.
Werd ich mal machen.

Grüsse, Daniel :hi:

Daniel B 5. Okt 2002 22:11

Hallo Christian,

das hab ich jetzt mal gemacht.
Sobald ich eins ausklammere, wird die Uni beim Kompilieren Autom. wieder eingefügt. Nur auf die ShellApi kann ich verzichten.
Nur ersparnis hab ich davon nicht. Naja.

Grüsse, Daniel :hi:

Christian Seehase 5. Okt 2002 22:53

Moin Daniel B,

bei einigen Units passiert das leider. Auf die kann dann wohl meist auch nicht verzichtet werden.
Lustig, dass Du gerade auf die ShellAPI verzichten kannst. Die musst schliesslich manuell hinzugefügt haben. ;-)

Ich hab's mal eben ausprobiert, und ausser der Unit Forms braucht D6, natürlich bei einem leeren Formular, nichts weiter. Je nachdem was draufkommt ändert sich das natürlich.

Da fällt mir gerade ein:
Hast Du jetzt nur neu kompiliert, oder bist Du über Projekt/Projekt erzeugen gegangen?

In ersterem Falle werden die Units nicht unbedingt neu erzeugt, so dass Du keinen Unterschied sehen kannst.

Ausserdem musst Du das natürlich bei jeder Unit machen, die Dein Programm umfasst.

Daniel B 5. Okt 2002 22:58

Hallo Christian,

die ShellApi hab ich schon ergänzt. Ich weiss aber nicht mehr was ich mal damit ausprobiert habe.
Ich habe natürlich neu erzeugt und dann Kompiliert.
Soweit habe ich das schon auf die Reihe gekriegt. ;)
Ich hab schon in der Dateiinfo nachgeschaut, mit welchem Datum und welcher Uhrzeit die .exe erzeugt wurde.
Bei den anderen Formularen hab ich "noch" ncihts gemacht, da nur die Standard sachen drin sind. Die Variants hab ich allerdings bei allen raus.

Grüsse, Daniel :hi:

R.Meyrat 7. Okt 2002 07:21

Hallo Daniel,

vermutlich ist dein Problemchen schon gelöst, aber trotzdem..
Den Tip mit dem auskommentieren, mache ich auch immer. aber
die D6 IDE hat so seine macken, welche nicht immer nach zu vollziehen sind.
Wenn ich diesbezüglich Probleme habe, muss ich manchmal das ganze zuerst sichern und anschliessend die *.DCUs manuell löschen, und eben das ganze Projekt neu erzeugen. Die IDE überschreibt vermutlich unter gewissen Umständen nicht immer die DCUs.
Dies ist bei mir immer der Fall, wenn ich die Debugg infos etc ein- oder ausschalte (Projekt/Optionen/Compiler)

Wenn du das fertigen Projekt ohne Debugg-infos compilierst, kannst du auch noch einige KB sparen.


Gruss Roger


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz