Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Unit deaktivieren (https://www.delphipraxis.net/141302-unit-deaktivieren.html)

Schwedenbitter 6. Okt 2009 20:33


Unit deaktivieren
 
Hallo,

ich habe TurboDelphi (intern wohl Version 10) und komme mit dem Editor nicht klar. Ich habe in meinem Quellcode bislang TStringList benutzt, die in der Unit Classes definiert ist. Da aber unter anderem diese sehr groß ist, will ich sie raushaben. Mir ist klar, dass ich dann Teile des Codes neu/anders machen muss. Das ist nicht mein Problem. Mein Problem ist:

Wenn ich nun auf "Speichern", "Erstellen" oder ausführen klicke, wird Uses immer wieder um Classes ergänzt. So ist es sehr mühselig, den Code zu bereinigen. Mir wäre es lieber, wenn Classes raus wäre und mir der Compiler einen Fehler melden würde. Dasselbe Problem habe ich mit der Unit Dialogs ...

Wie kann ich es verhindern, dass Untis gegen meinen Willen ergänzt werden?

Gruß, Alex

mkinzler 6. Okt 2009 20:37

Re: Unit deaktivieren
 
Es scheint etwas davon benötigt zu werden. Zudem werden nur die Teile eingebunden, welche benötigt werden

Bernhard Geyer 6. Okt 2009 20:56

Re: Unit deaktivieren
 
Verwendest du Formulare (TForm)?

Schwedenbitter 6. Okt 2009 21:29

Re: Unit deaktivieren
 
Zitat:

Zitat von mkinzler
Es scheint etwas davon benötigt zu werden. Zudem werden nur die Teile eingebunden, welche benötigt werden

Da gab es mal irgendwo einen Thread wo stand, dass genau das nicht der Fall wäre. Ich weiß es auch nicht besser. Aber meine Erfahrung mit großen exe-Dateien lehrt mich ebenfalls, dass es so nicht sein dürfte.

Ich habe - vermutlich - den Übeltäter gefunden. Ich habe in der Tat Formulare und daher Forms mit drin. Aber es liegt offenbar an einem TTimer. Wenn der weg ist, dann erscheint Classes auch nicht mehr. Es liegt scheinbar nur an dieser einzigen Deklaration:
Delphi-Quellcode:
  TNotifyEvent = procedure(Sender: TObject) of object;
Dass man die eine Zeile nicht in ExtCrtls nicht mit reingeschrieben hat ... Muss ich also auf den Timer auch verzichten :smile2:, obwohl das bei der Größe von Forms wohl auch keine Rolle mehr spielt!

Aber es muss doch trotzdem eine Möglichkeit geben, diese Bevormundung wegzumachen, oder? Ich will doch auch mal Fehler machen.

Gruß, Alex

Bernhard Geyer 6. Okt 2009 21:46

Re: Unit deaktivieren
 
Zitat:

Zitat von Schwedenbitter
Ich habe in der Tat Formulare und daher Forms mit drin.

Dann vergiss jedliche Exe-Größe-Optimierung. Forms.pas wird genügend der "ungewollten" Units verwenden.

Medium 6. Okt 2009 22:16

Re: Unit deaktivieren
 
Die standardmäßig eingebundene, aber von vorne herein nicht gebrauchte Unit ist übrigens Variants. Und deine einzige Chance wirklich einen Unterschied zu erreichen wäre wie schon erwähnt gänzlich auf alles aus der VCL zu verzichten, so dass du quasi mit den Units System und Windows auskommst (ein paar mehr gibt's schon, aber verabschiede dich von TForm, TButton und Konsorten, wie auch vom Formulardesigner). Eben das berüchtigte non-VCL Programmieren, wie damals unter C ohne MFC o.ä., pure WinAPI.

himitsu 6. Okt 2009 22:29

Re: Unit deaktivieren
 
Das Problem bei Units wie Klasses ist eigentlich sowas
Delphi-Quellcode:
initialization
  InitThreadSynchronization;
  AddModuleUnloadProc(ModuleUnload);
  GlobalNameSpace := TMultiReadExclusiveWriteSynchronizer.Create;
  RegGroups := TRegGroups.Create;
  IntConstList := TThreadList.Create;
  GlobalFixupList := TThreadList.Create;
da wird soviel über die Fnitialization/Finalization eingebunden

es wird also nicht wirklich nur das Eingebunden, was gebraucht wird, sondern viel mehr

Schwedenbitter 6. Okt 2009 22:36

Re: Unit deaktivieren
 
Es gibt von meinem Programm 2 Varianten: Eine mit dem ganzen VCL-Zeugs und eine andere ohne das alles. Ich bin nur auf VCL zurückgekommen, weil ich mit dem "Warten" Probleme habe/hatte. In VCL mache ich das mit dem TTimer. Im nonVCL habe ich mit
Delphi-Quellcode:
Repeat
   Sleep(250);
   Application.Processmessages;
Until ...;
gewartet. Das lastet mir aber den Prozessor zu sehr aus. Dann kam TThread, damit Classes und damit ein Schwergewicht in Spiel. Und daher habe ich dann wieder TTimer genommen, weil es dann auch nicht mehr darauf ankam.

Im Grunde ist mir die Größe der exe-Datei auch egal. Mir käme es eher darauf an, dass die Programme zur Laufzeit möglichst schmal sind. Ich habe aber gesehen, dass auch meine 46-KB-nonVCL-exe genau wie das 170-KB-VCL-Pendant ca. 4 MB RAM einnimmt. Deshalb habe ich damit aufgehört, auf Teufel komm raus die Functionen der Units selbst zu schreiben.

Medium 6. Okt 2009 22:45

Re: Unit deaktivieren
 
Wäre da nicht MSDN-Library durchsuchenSetTimer() etwas für dich? (Intern macht's der VCL Timer auch nicht anders.)

himitsu 6. Okt 2009 22:55

Re: Unit deaktivieren
 
das mit dem Timer wurde grad gesagt.

Zitat:

Delphi-Quellcode:
Repeat
   Sleep(250);
   Application.Processmessages;
Until ...;

Das sollte die CPU aber eigentlich nicht viel Auslasten :gruebel:
es sei denn du läßt in einer der Messages massig viel rechnen oder ein paralleler Thread ist daran schuld. (ich hab in vielen Programmen schon solche Schleifen eingesetzt und das mit weit kürzeren Zeiten ... z.B. 20 ms und nichtmal 1% Belastung)

Außerdem gehört Application eigentlich mit zur VCL und hat demnach nicht viel mit NonVCL zu tun.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr.
Seite 1 von 2  1 2      

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