![]() |
Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,
ich habe heute mal schnell ein Programm geschrieben, das die Abhängigkeiten der Units in einem Delphi Programm ermittelt und diese dann darstellt. Das Programm hat 2 Memo Felder. In dem linken Memo werden alle verwendete Units des Projektes aufgelistet. Units, die zu Delphi gehören, werden mit einem vorgestellten * gekennzeichnet. (Die Dateien von Delphi7 im $(DELPHI)\lib Verzeichnis sind in der "DelphiLib.list" Datei aufgelistet, die vom Programm beim Start eingelesen wird.) Units, zu denen kein Quelltext gefunden wurde, werden mit einem vorgestellten # gekennzeichnet. In dem rechten Fenster werden die Abhängigkeiten in folgender Form dargestellt:
Code:
Dieses Format kann auch durch Graphvis (
"Project1.dpr" -> "Unit1.pas";
"Project1.dpr" -> "Unit2.pas"; "Project1.dpr" -> "Unit3.pas"; "Unit1.pas" -> "Unit2.pas"; "Unit1.pas" -> "Unit3.pas"; "Unit2.pas" -> "Unit1.pas"; ![]() ("dot.exe" und einige von dot.exe benötigte dll's liegen dem unitscanner bei.) Anleitung zur Nutzung des Programmes:
Da ich vom 06.06.06 bis 07.07. im Urlaub bin, kann ich erst ab 10.07. antworten. Viel Spaß ReleaseNotes:
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
und wo ist das Programm?
Gruß onlinekater |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
Das Program könnte ich nämlich gut gebrauchen. Gruß Igotcha |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
Ich bekomme leider immer einen Fehler beim Anhängen des Attachments. Das hatte ich schon öfter, aber das sollte morgen früh aber wieder gehen :-) Zitat:
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Nette Software. Gefällt mit gut.
Mfg Tobi |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Hi MaBuSe,
gefällt mir auch gut. Wenn ich alle 3 Optionen anhake bekomme ich aber leider nichts angezeigt bei "call dot", das jpeg wird aber erzeugt. Wenn ich "with no source" ausschalte, ist's OK. Iss zwar kein Fehler von Deinem Prog, aber vielleicht hilft's. |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
(Ein Projekt von mir hatte ca. 100 Units, das jpg war ca 25000 Pixel breit. Die linke obere Ecke ist dann in der Regel weiß :-) ) Versuche mal zu scrollen bzw zu verkleinern. Es freut mich das das Programm Euch gefällt. Wenn ich wieder da bin, erweitere ich das Programm noch etwas. (Es werden im Moment z.B. noch keine include Dateien ausgewertet {$I Datei.inc} ) |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
ich hab jetz au grad alles angehakt wo en Haken dran iss.. des geht ewig mit dem JPEG erstellen... könnte man da nich en Fortschrittsbalken oder so reinmachen, damit man weis ob man schnell en Kaffee trinken gehn kann?(Mein dauert jetzt schon 2 Minuten :? )
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
Falls die weg sein sollte, stimmt was nicht. (evtl ist wegen eines Fehlers kein jpg erzeugt worden.) Ich habe das ganze in einer schnellen "quick and dirty" Methode geschrieben. Ich kann nicht ausschliessen, dass noch Fehler enthalten sind. Einen Fortschrittsbalken kann ich Dir nicht bieten, da ich "nur" ein externes Programm zur Erstellung aufrufe:
Code:
"temp.dot" enhällt den Inhalt des rechten Memos.
dot -Tjpg -otemp.jpg temp.dot
"temp.jpg" wird dann durch "dot.exe" erstellt. Falls "dot.exe" beendet und die "temp.jpg" nicht erstellt wird, wartet das Programm endlos. Deshalb habe ich den Cancel Button eingebaut. ;-) Hier der Quellcode des Buttons:
Delphi-Quellcode:
Ich hoffe diese Infos helden Dir.
...
procedure TForm1.btnDotClick(Sender: TObject); begin if Memo2.Lines.Count = 0 then exit; btnDot.enabled := false; btnCancel.Visible := True; if fileexists('temp.jpg') then begin if not DeleteFile('temp.jpg') then begin MessageDlg('Can''t delete file "temp.jpg".', mtError, [mbCancel], 0); btnDot.Enabled := True; btnCancel.Visible := False; exit; end; end; StatusBar1.SimpleText := ' save temp dot file'; Memo2.Lines.SaveToFile('temp.dot'); StatusBar1.SimpleText := ' create jpg from dot file'; if not fileexists(StartPath+'dot.exe') then begin MessageDlg('Can''t find file "'+StartPath+'dot.exe".', mtError, [mbCancel], 0); btnDot.Enabled := True; btnCancel.Visible := False; exit; end; shellapi.ShellExecute(Form1.Handle, 'open', PChar(StartPath+'dot.exe'), '-Tjpg -otemp.jpg temp.dot', '.', SW_SHOWNORMAL); StatusBar1.SimpleText := ' wait for jpg file'; while not (fileexists('temp.jpg') or myTerminate) do begin Application.ProcessMessages; end; StatusBar1.SimpleText := ' view jpg file'; shellapi.ShellExecute(Form1.Handle, 'open', 'temp.jpg', '', '', SW_SHOWNORMAL); btnDot.Enabled := True; btnCancel.Visible := False; StatusBar1.SimpleText := ' finished'; end; ... procedure TForm1.btnCancelClick(Sender: TObject); begin myTerminate := True; btnCancel.Visible := False; end; Ich werde nach meinem Urlaub noch etwas an dem Code formatieren und dokumentieren. Wenn er dann den Ansprüchen einer Veröffentlichung genügt, werde ich ihn evtl komplett veröffentlichen. |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Vorsichtig frag: Gibt's das auch für Packages?
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
Für Package müsste ich requires und contains auswerten, das sollte auch kein großes Problem darstellen. Das baue ich nach meinem Urlaub ein, das Notebook bleibt zuhause. ;-) |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Kleiner Tip am Rande:
Wie oben im Quelltext zu sehen wird das rechte Memo als temp.dot abgespeichert. Das Memo kann natürlich auch editiert werden ;-) (Units können gruppiert werden (z.B. nach Packages) einzelne Units können farblich gekennzeichnet werden, oder statt Elipse ein Dreieck, oder ... Eine Anleitung zur dot Syntax findet Ihr hier: ![]() Viel Spaß |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
sieht shcon ganz nett aus
ein kleiner bug ist glaub ich, das du teilweise versuchst das JPEG anzuzeigen, und dieses noch nicht ganz fertig erstellt wurde. Bekomme dann ein "Keine Vorschau verfügbar" wenn ich dann aber ein Bild vorklicke (in dem Dir ist nur das eine Bild drinnen) dann zeigt er mirs richtig an. was mir noch abgeht : Das man nen Pfad eingeben kann (oder das prog gleich die Registry von Delphi ausliest) und alle # Sourcen dann in diesem Pfad sucht, damit diese Units dann auch rekursiv durchgearbeitet werden können. und eventuell Units, die nicht gefunden werden (also nur dpr's sind) gleich mal farblich gekennzeichnet werden. |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
![]() Zumal ICARUS nicht nur die Uses-List anguckt, sondern auch in die Files abtaucht und Dir z.B. auch sagen kann: "Hör mal, in Formular xyz steht Unit abc in der Uses list drin, aber Du verwendest nichts davon" (die kann also raus). |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
In einem Vortrag z.B. kommen Bilder viel besser als Listen. Die Bilder geben direkt einen Eindruck von der "vernetzung" der Units untereinander. |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Ai.. naja, dafür bräuchte man dann den Pascal Analyzer, und der kostet wiederum Geld.. alles klar ;-)
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Gefällt mir, auch wenn meine Projekte bislang nicht sooooo groß sind. :zwinker:
:shock: Das zweite Diagramm is' ja mal Ultra.... |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
I hab zwar och sowas (in ganz klein) in der Projektverwaltung drin, aber so graphisch isses och ma was anderes.
Aber warum nimmt sich das Programm bei mir nur die DPR und die zugehörige "Forumlar"-Unit (.PAS) vor? So schön wie bei dem ist es jedenfalls nicht ... alles geht nur von der DPR und der einen PAS aus :cry: Die darin verlinkten Dateien sind ja och nochmal untereinander verlinkt und das wollte ich eigentlich sehn und nicht nur das die Dateien eingebunden sind. Vorallen die kreuzverlinkten Verbindungen wären echt interessant ... also mit Pfeilen dran in welcher Richtung verlinkt ist. Ach ja, alle Dateien sind in einem Verzeichnis, aber es wäre nicht schlecht, wenn das Programm noch die Suchpfade von Borland zum auffinden der Dateien verwenden würde (natürlich bräuchte man dann wieder 'ne Option, wo man bestimmte Pfade wieder ignoriert ^^ [add] Ach ja, hab den Fehler entdeckt, warum manchmal kein Bild angezeigt wird. Das Bild wurde versucht zu laden, bevor die BildDatei fertig war. hier auf dem rechner wurde es im IE geladen und als ich ein paar Sekunden später F5 bemüht hatte war plötzlich was zu sehn :shock: |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
Werden die Dateien mit einem # gekennzeichnet, so hat er nix gefunden. Das lässt sich aber leicht beheben, in dem die Pfade in der *.dpr explizit angegeben werden: Beisp.
Delphi-Quellcode:
(Die Pfadangaben werden dann natürlich im gesammten Projekt verwendet.)
program Project1;
... uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'SubDir\Unit2.pas', Unit3 in '..\shared\Unit3.pas', {Form3} Unit4 in 'c:\temp\test\Unit4.pas' {Form4}; ... Ansonsten sollte er alle Bezieungen (auch untereinander) anzeigen. Es werden alle uses bereiche berücksichtigt (interface und implementation) Das Beispiel im 1. Beitrag (Project1) hat ja auch Abhängigkeiten unter den Units. Zitat:
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Liste der Anhänge anzeigen (Anzahl: 1)
Also gefunden hat er die ja (angeblich), nur scheint er nicht in den weiteren _Units zu suchen
Code:
* Classes
* Controls * ExtCtrls * Forms * Math * PSAPI * StdCtrls * SysUtils * Windows F:\UCC\FNS_Binary.pas F:\UCC\FNS_Consts.pas F:\UCC\FNS_Debug.pas F:\UCC\FNS_Forms.pas F:\UCC\FNS_Init.pas F:\UCC\FNS_Languages.pas F:\UCC\FNS_Log.pas F:\UCC\FNS_MathB.pas F:\UCC\FNS_Memory.pas F:\UCC\FNS_MemoryUT.pas F:\UCC\FNS_Messages.pas F:\UCC\FNS_ReInit.pas F:\UCC\FNS_Security.pas F:\UCC\FNS_Strings.pas F:\UCC\FNS_System.pas F:\UCC\FNS_Thread.pas F:\UCC\FNS_Types.pas F:\UCC\FNS_Unicode.pas F:\UCC\FNS_ValueConvert.pas F:\UCC\MSC_WinError.pas F:\UCC\TestU.pas
Code:
(nur das Häkchen bei delphi lib fehlt)
DiGraph Uses {
// dot file created by unit dependency scanner v1.0 // programmed by MaBuSE, member of [url]www.delphipraxis.net[/url] // [url]http://www.delphipraxis.net/topic84612_freware+programm+zur+ermittlung+von+unitabhaengigkeiten.html[/url] graph [ratio="0.7"]; "Test.dpr" [shape=box, style=filled, color=lightgray]; "Test.dpr" -> "FNS_Init.pas"; "Test.dpr" -> "FNS_ReInit.pas"; "Test.dpr" -> "TestU.pas"; "TestU.pas" -> "FNS_Consts.pas"; "TestU.pas" -> "FNS_Types.pas"; "TestU.pas" -> "FNS_Memory.pas"; "TestU.pas" -> "FNS_System.pas"; "TestU.pas" -> "FNS_Messages.pas"; "TestU.pas" -> "FNS_Languages.pas"; "TestU.pas" -> "FNS_Forms.pas"; "TestU.pas" -> "FNS_MathB.pas"; "TestU.pas" -> "FNS_Log.pas"; "TestU.pas" -> "FNS_Binary.pas"; "TestU.pas" -> "FNS_Debug.pas"; "TestU.pas" -> "FNS_MemoryUT.pas"; "TestU.pas" -> "FNS_Security.pas"; "TestU.pas" -> "FNS_Strings.pas"; "TestU.pas" -> "FNS_Unicode.pas"; "TestU.pas" -> "FNS_ValueConvert.pas"; "TestU.pas" -> "FNS_Thread.pas"; "TestU.pas" -> "MSC_WinError.pas"; } OK, den einen Pfeil entdeckt hab ... man muß sich das nur in Groß ansehn :roll: Aber wie gesagt, alle Dateien im selben Verzeichnis und er durchsucht die nicht. Dafür hab ich aber ein großes Bild mir schönen perfekt geraden Linien (nicht so'n paar krumme Dinger wie bei euch :tongue: ) Ach ja, die test.dot/.jpg ... wenn die schon im Projektverzeichnis landen, dann wäre es eigentlich nett, wenn die wie die getestete Datei heißen (falls es nicht schon eine Datei mit dem Namen gibt) [add] QUOTE in CODE geändert (weniger scrollen) Und dann noch das ... in der TestU.pas steht Folgendes:
Delphi-Quellcode:
Und in den (nicht getesteten) anderen Units auch mal sowas:
Uses Classes, Controls, Forms, StdCtrls, ExtCtrls, Math, PSAPI, Windows, SysUtils,
FNS_Consts, FNS_Types, FNS_Memory, FNS_System, FNS_Messages, FNS_Languages, FNS_Forms, FNS_MathB, FNS_Log, FNS_Binary{, FNS_Colors{, FNS_DateTime}, FNS_Debug{, FNS_Files{, FNS_Hash{, FNS_Hints}, FNS_MemoryUT{, FNS_MemoryUT2}, FNS_Security, FNS_Strings{, FNS_Sys}, FNS_Unicode{, MSC_WinError}, FNS_ValueConvert, FNS_Thread{, FNS_SpeedZip{, FNS_XPStyle}, MSC_WinError;
Delphi-Quellcode:
Uses {$IFDEF UseWindows}Windows,{$ENDIF} FNS_Consts, FNS_Types;
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
Aber warum geht er nicht in die Units rein :gruebel: (Benutz mal die Debug Version vom UnitScanner s. Erster Beitrag) |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Wenn ich mir angucke was in der Liste steht, dann schon :roll:
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
Ist ein Bug in dem Parsing meines Scanners. :wall: Ich verwende in meinen Programmen ausschliesslich { und // als Kommentare. Du verwendest (* ... *) ! Das hatte ich nicht getestet und deswegen funktioniert es auch nicht :mrgreen: Ich habe im Editor Suchen/Ersetzen über alle Dateien (* -> { und *) -> } gemacht und dann ging es. Den Bug fixe ich aber erst nach meinem Urlaub !!! So, ich stehe nun bis 10.07.2006 nicht mehr zur Verfügung. Ihr dürft aber weiterhin posten ;-) Ich werde es dann am 10.07. lesen und beantworten. Viel Spaß |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
Zitat:
Ich hab halt die Kommentare in (* *) und hinter // und dann kommt es mal vor, daß diese dann samt dem QuellCode darum per { } ausgeblendet wird. Es würde also zu Problemchen kommen, wenn du das da auch nur ersetzt :zwinker: (die verschiedenen "KommentarDinger" müssen halt immer einzeln behandelt und in der Abfrage verschachtelt werden) |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Einen Letzen bevor ich nun Heim geh.
Ihr kennt sicherlich alle folgendes Project1.dpr und Unit1.dpr:
Delphi-Quellcode:
program Project1;
uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
Delphi-Quellcode:
Wenn man nun die Unit-Abhänigkeiten der RTL und VCL von Delphi an diesem Beispiel darstellt,
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} end. kann man sehen, wie "viel" eigentlich in so einem "leeren" Delphi Projekt drin steckt. (Und warum die Project1.exe so groß ist und die non-vcl Projekte so klein sind.) (Bild anklicken um die 1027x768 Version zu sehen) Mit dem folgendem Dot File kann sich jeder die "große" Version des Diagramms erzeugen:
Code:
oder
dot -Tjpg -oProject1.jpg Project1.dot
Code:
Hier ist die Project1.dot:
dot -Tpng -oProject1.png Project1.dot
Code:
DiGraph Uses {
// dot file created by unit dependency scanner v1.0 // programmed by MaBuSE, member of [url]www.delphipraxis.net[/url] // [url]http://www.delphipraxis.net/topic84612_freware+programm+zur+ermittlung+von+unitabhaengigkeiten.html[/url] graph [ratio="0.7"]; "Project1.dpr" [shape=box, style=filled, color=lightgray]; "Project1.dpr" -> "Forms.pas"; "Project1.dpr" -> "Unit1.pas"; "Forms.pas" -> "Messages.pas"; "Forms.pas" -> "Windows.pas"; "Forms.pas" -> "SysUtils.pas"; "Forms.pas" -> "Classes.pas"; "Forms.pas" -> "Graphics.pas"; "Forms.pas" -> "Menus.pas"; "Forms.pas" -> "Controls.pas"; "Forms.pas" -> "Imm.pas"; "Forms.pas" -> "ActnList.pas"; "Forms.pas" -> "MultiMon.pas"; "Forms.pas" -> "HelpIntfs.pas"; "Forms.pas" -> "Messages.pas"; "Forms.pas" -> "Windows.pas"; "Forms.pas" -> "SysUtils.pas"; "Forms.pas" -> "Classes.pas"; "Forms.pas" -> "Graphics.pas"; "Forms.pas" -> "Menus.pas"; "Forms.pas" -> "Controls.pas"; "Forms.pas" -> "Imm.pas"; "Forms.pas" -> "ActnList.pas"; "Forms.pas" -> "MultiMon.pas"; "Forms.pas" -> "HelpIntfs.pas"; "Forms.pas" -> "ActiveX.pas"; "Forms.pas" -> "Math.pas"; "Forms.pas" -> "Printers.pas"; "Forms.pas" -> "Consts.pas"; "Forms.pas" -> "RTLConsts.pas"; "Forms.pas" -> "CommCtrl.pas"; "Forms.pas" -> "FlatSB.pas"; "Forms.pas" -> "StdActns.pas"; "Forms.pas" -> "WinHelpViewer.pas"; "Forms.pas" -> "Themes.pas"; "Messages.pas" -> "Windows.pas"; "Windows.pas" -> "Types.pas"; "SysUtils.pas" -> "Windows.pas"; "SysUtils.pas" -> "Types.pas"; "SysUtils.pas" -> "SysConst.pas"; "Graphics.pas" -> "Windows.pas"; "Graphics.pas" -> "Windows.pas"; "Graphics.pas" -> "SysUtils.pas"; "Graphics.pas" -> "Classes.pas"; "Graphics.pas" -> "Windows.pas"; "Graphics.pas" -> "SysUtils.pas"; "Graphics.pas" -> "Classes.pas"; "Menus.pas" -> "Windows.pas"; "Menus.pas" -> "SysUtils.pas"; "Menus.pas" -> "Classes.pas"; "Menus.pas" -> "Contnrs.pas"; "Menus.pas" -> "Messages.pas"; "Menus.pas" -> "Graphics.pas"; "Menus.pas" -> "ImgList.pas"; "Menus.pas" -> "ActnList.pas"; "Menus.pas" -> "Windows.pas"; "Menus.pas" -> "SysUtils.pas"; "Menus.pas" -> "Classes.pas"; "Menus.pas" -> "Contnrs.pas"; "Menus.pas" -> "Messages.pas"; "Menus.pas" -> "Graphics.pas"; "Menus.pas" -> "ImgList.pas"; "Menus.pas" -> "ActnList.pas"; "Menus.pas" -> "Controls.pas"; "Menus.pas" -> "Forms.pas"; "Menus.pas" -> "Consts.pas"; "Menus.pas" -> "Themes.pas"; "Contnrs.pas" -> "SysUtils.pas"; "Contnrs.pas" -> "Classes.pas"; "Contnrs.pas" -> "RTLConsts.pas"; "Contnrs.pas" -> "Math.pas"; "Math.pas" -> "SysUtils.pas"; "Math.pas" -> "Types.pas"; "ImgList.pas" -> "Windows.pas"; "ImgList.pas" -> "Classes.pas"; "ImgList.pas" -> "Graphics.pas"; "ImgList.pas" -> "CommCtrl.pas"; "ImgList.pas" -> "SysUtils.pas"; "ImgList.pas" -> "Consts.pas"; "ImgList.pas" -> "Forms.pas"; "ImgList.pas" -> "ActiveX.pas"; "ActiveX.pas" -> "Messages.pas"; "ActiveX.pas" -> "Windows.pas"; "ActiveX.pas" -> "Messages.pas"; "ActiveX.pas" -> "Types.pas"; "ActiveX.pas" -> "Windows.pas"; "ActnList.pas" -> "Classes.pas"; "ActnList.pas" -> "Messages.pas"; "ActnList.pas" -> "ImgList.pas"; "ActnList.pas" -> "Contnrs.pas"; "ActnList.pas" -> "SysUtils.pas"; "ActnList.pas" -> "Windows.pas"; "ActnList.pas" -> "Forms.pas"; "ActnList.pas" -> "Menus.pas"; "ActnList.pas" -> "Consts.pas"; "ActnList.pas" -> "Graphics.pas"; "ActnList.pas" -> "Controls.pas"; "Themes.pas" -> "Windows.pas"; "Themes.pas" -> "Classes.pas"; "Themes.pas" -> "Messages.pas"; "Themes.pas" -> "Graphics.pas"; "Themes.pas" -> "UxTheme.pas"; "Themes.pas" -> "CommCtrl.pas"; "Themes.pas" -> "Controls.pas"; "Themes.pas" -> "SysUtils.pas"; "Themes.pas" -> "ComCtrls.pas"; "UxTheme.pas" -> "Windows.pas"; "UxTheme.pas" -> "CommCtrl.pas"; "UxTheme.pas" -> "SyncObjs.pas"; "SyncObjs.pas" -> "Windows.pas"; "SyncObjs.pas" -> "Messages.pas"; "SyncObjs.pas" -> "SysUtils.pas"; "SyncObjs.pas" -> "Classes.pas"; "ComCtrls.pas" -> "Messages.pas"; "ComCtrls.pas" -> "Windows.pas"; "ComCtrls.pas" -> "SysUtils.pas"; "ComCtrls.pas" -> "CommCtrl.pas"; "ComCtrls.pas" -> "Classes.pas"; "ComCtrls.pas" -> "Controls.pas"; "ComCtrls.pas" -> "Forms.pas"; "ComCtrls.pas" -> "Menus.pas"; "ComCtrls.pas" -> "Graphics.pas"; "ComCtrls.pas" -> "StdCtrls.pas"; "ComCtrls.pas" -> "RichEdit.pas"; "ComCtrls.pas" -> "ToolWin.pas"; "ComCtrls.pas" -> "ImgList.pas"; "ComCtrls.pas" -> "ExtCtrls.pas"; "ComCtrls.pas" -> "ListActns.pas"; "ComCtrls.pas" -> "ShlObj.pas"; "StdCtrls.pas" -> "Messages.pas"; "StdCtrls.pas" -> "Windows.pas"; "StdCtrls.pas" -> "SysUtils.pas"; "StdCtrls.pas" -> "Classes.pas"; "StdCtrls.pas" -> "Controls.pas"; "StdCtrls.pas" -> "Forms.pas"; "StdCtrls.pas" -> "Menus.pas"; "StdCtrls.pas" -> "Graphics.pas"; "StdCtrls.pas" -> "Consts.pas"; "StdCtrls.pas" -> "RTLConsts.pas"; "StdCtrls.pas" -> "ActnList.pas"; "StdCtrls.pas" -> "Themes.pas"; "RichEdit.pas" -> "Messages.pas"; "RichEdit.pas" -> "Windows.pas"; "ToolWin.pas" -> "Windows.pas"; "ToolWin.pas" -> "Messages.pas"; "ToolWin.pas" -> "Classes.pas"; "ToolWin.pas" -> "Controls.pas"; "ToolWin.pas" -> "Forms.pas"; "ToolWin.pas" -> "SysUtils.pas"; "ExtCtrls.pas" -> "Messages.pas"; "ExtCtrls.pas" -> "Windows.pas"; "ExtCtrls.pas" -> "SysUtils.pas"; "ExtCtrls.pas" -> "Classes.pas"; "ExtCtrls.pas" -> "Controls.pas"; "ExtCtrls.pas" -> "Forms.pas"; "ExtCtrls.pas" -> "Menus.pas"; "ExtCtrls.pas" -> "Graphics.pas"; "ExtCtrls.pas" -> "StdCtrls.pas"; "ExtCtrls.pas" -> "Messages.pas"; "ExtCtrls.pas" -> "Windows.pas"; "ExtCtrls.pas" -> "SysUtils.pas"; "ExtCtrls.pas" -> "Classes.pas"; "ExtCtrls.pas" -> "Controls.pas"; "ExtCtrls.pas" -> "Forms.pas"; "ExtCtrls.pas" -> "Menus.pas"; "ExtCtrls.pas" -> "Graphics.pas"; "ExtCtrls.pas" -> "StdCtrls.pas"; "ExtCtrls.pas" -> "Consts.pas"; "ExtCtrls.pas" -> "Dialogs.pas"; "ExtCtrls.pas" -> "Themes.pas"; "Dialogs.pas" -> "Windows.pas"; "Dialogs.pas" -> "Messages.pas"; "Dialogs.pas" -> "SysUtils.pas"; "Dialogs.pas" -> "CommDlg.pas"; "Dialogs.pas" -> "Printers.pas"; "Dialogs.pas" -> "Classes.pas"; "Dialogs.pas" -> "Graphics.pas"; "Dialogs.pas" -> "Controls.pas"; "Dialogs.pas" -> "Forms.pas"; "Dialogs.pas" -> "StdCtrls.pas"; "Dialogs.pas" -> "Windows.pas"; "Dialogs.pas" -> "Messages.pas"; "Dialogs.pas" -> "SysUtils.pas"; "Dialogs.pas" -> "CommDlg.pas"; "Dialogs.pas" -> "Printers.pas"; "Dialogs.pas" -> "Classes.pas"; "Dialogs.pas" -> "Graphics.pas"; "Dialogs.pas" -> "Controls.pas"; "Dialogs.pas" -> "Forms.pas"; "Dialogs.pas" -> "StdCtrls.pas"; "Dialogs.pas" -> "ExtCtrls.pas"; "Dialogs.pas" -> "Consts.pas"; "Dialogs.pas" -> "Dlgs.pas"; "Dialogs.pas" -> "Math.pas"; "CommDlg.pas" -> "Windows.pas"; "CommDlg.pas" -> "Messages.pas"; "CommDlg.pas" -> "ShlObj.pas"; "ShlObj.pas" -> "Windows.pas"; "ShlObj.pas" -> "ActiveX.pas"; "ShlObj.pas" -> "CommCtrl.pas"; "ShlObj.pas" -> "ShellAPI.pas"; "ShlObj.pas" -> "RegStr.pas"; "ShlObj.pas" -> "Messages.pas"; "ShlObj.pas" -> "WinInet.pas"; "ShlObj.pas" -> "UrlMon.pas"; "ShellAPI.pas" -> "Windows.pas"; "WinInet.pas" -> "Windows.pas"; "UrlMon.pas" -> "Windows.pas"; "UrlMon.pas" -> "ActiveX.pas"; "Printers.pas" -> "Windows.pas"; "Printers.pas" -> "WinSpool.pas"; "Printers.pas" -> "SysUtils.pas"; "Printers.pas" -> "Classes.pas"; "Printers.pas" -> "Graphics.pas"; "Printers.pas" -> "Forms.pas"; "Printers.pas" -> "Consts.pas"; "WinSpool.pas" -> "Windows.pas"; "ListActns.pas" -> "Classes.pas"; "ListActns.pas" -> "Controls.pas"; "ListActns.pas" -> "ActnList.pas"; "ListActns.pas" -> "ImgList.pas"; "ListActns.pas" -> "SysUtils.pas"; "ListActns.pas" -> "ComCtrls.pas"; "ListActns.pas" -> "Consts.pas"; "ListActns.pas" -> "RTLConsts.pas"; "Imm.pas" -> "Windows.pas"; "HelpIntfs.pas" -> "SysUtils.pas"; "HelpIntfs.pas" -> "Classes.pas"; "HelpIntfs.pas" -> "Contnrs.pas"; "HelpIntfs.pas" -> "Windows.pas"; "HelpIntfs.pas" -> "RTLConsts.pas"; "HelpIntfs.pas" -> "Contnrs.pas"; "HelpIntfs.pas" -> "RTLConsts.pas"; "FlatSB.pas" -> "Windows.pas"; "StdActns.pas" -> "SysUtils.pas"; "StdActns.pas" -> "Classes.pas"; "StdActns.pas" -> "ActnList.pas"; "StdActns.pas" -> "StdCtrls.pas"; "StdActns.pas" -> "Forms.pas"; "StdActns.pas" -> "Dialogs.pas"; "StdActns.pas" -> "Windows.pas"; "StdActns.pas" -> "Messages.pas"; "StdActns.pas" -> "Consts.pas"; "StdActns.pas" -> "Clipbrd.pas"; "StdActns.pas" -> "StrUtils.pas"; "StdActns.pas" -> "ShellAPI.pas"; "Clipbrd.pas" -> "Windows.pas"; "Clipbrd.pas" -> "Messages.pas"; "Clipbrd.pas" -> "Classes.pas"; "Clipbrd.pas" -> "Graphics.pas"; "Clipbrd.pas" -> "Windows.pas"; "Clipbrd.pas" -> "Messages.pas"; "Clipbrd.pas" -> "Classes.pas"; "Clipbrd.pas" -> "Graphics.pas"; "Clipbrd.pas" -> "SysUtils.pas"; "Clipbrd.pas" -> "Forms.pas"; "Clipbrd.pas" -> "Consts.pas"; "StrUtils.pas" -> "SysUtils.pas"; "StrUtils.pas" -> "Types.pas"; "StrUtils.pas" -> "Windows.pas"; "WinHelpViewer.pas" -> "Classes.pas"; "WinHelpViewer.pas" -> "HelpIntfs.pas"; "WinHelpViewer.pas" -> "SysUtils.pas"; "WinHelpViewer.pas" -> "Windows.pas"; "WinHelpViewer.pas" -> "HelpIntfs.pas"; "WinHelpViewer.pas" -> "SysUtils.pas"; "Unit1.pas" -> "Windows.pas"; "Unit1.pas" -> "Messages.pas"; "Unit1.pas" -> "SysUtils.pas"; "Unit1.pas" -> "Variants.pas"; "Unit1.pas" -> "Classes.pas"; "Unit1.pas" -> "Graphics.pas"; "Unit1.pas" -> "Controls.pas"; "Unit1.pas" -> "Forms.pas"; "Unit1.pas" -> "Dialogs.pas"; "Variants.pas" -> "Types.pas"; "Variants.pas" -> "SysUtils.pas"; "Variants.pas" -> "Windows.pas"; "Variants.pas" -> "SysConst.pas"; "Variants.pas" -> "VarUtils.pas"; "VarUtils.pas" -> "SysUtils.pas"; "VarUtils.pas" -> "Types.pas"; "VarUtils.pas" -> "SysConst.pas"; "VarUtils.pas" -> "Windows.pas"; } |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
So und nun tschuess... |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Ein Vorschlag für die nächste Version:
Auch die selbst definierten globalen Suchpfade durchsuchen, bevor ein # gesetzt wird. ;) Aber sonst ist es echt klasse, das Programm! :) Grüße Faux |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
Irgendwo gibt's ja ein kleines TestProg von mir, wo man das auch ganz gut sieht. [add] so, da is'es ja ... ![]() Und "schlimm" is'es ja och noch, weil diese ungenutzten Units/Funktionen auch noch zusätzliche DLLs laden ... nicht daß nur die EXE etwas größer wird, im RAM befindet sich och mehr, als nötig ... mal abgesehn von den zusätzlchen Variablen, Objekten... (noch mehr Speicher halt). Das mit den Initialisierungsabschnitten kann man och selber mal test ... einfach einige der standardmäßig eingebundenen Units entfernen (es sind ja nicht alle nötig), neu kompilieren (wenn die "wichtigen" Units mit gelöscht sind, geht das sogar noch) und siehe da, die EXE ist kleiner :shock: |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Könnte man damit auch Projektgruppen scannen? :gruebel:
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
{$I Datei.inc} ein {$INCLUDE Datei.inc} und {$I+} {$I-} sind keine Include-Direktiven :zwinker: Das Nachfolgende bitte ignorieren, wenn Graphvis das nicht kann -.-'' Ist es möglich die Verdungslinien optisch unterschiedlich zu machen? Je nach dem, wo die Unit eingebunden ist (Interface/Implementation) Zitat:
Es muß ja auch nicht immer alles nebeneinander sein ... 2-3 Zeilig wäre ja och zu ertragen ^^ PS: eigentlich wäre es ja nicht nötig, daß im Threadtitel nochmals "Freeware" drinsteht, aber wenn, dann wäre es keine schlechte Idee, wenn es mit 2 "e" geschrieben würde ... dachte schon einen der Gewinnspielschreibfehler entdeckt zu haben :stupid: |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
So.. jetz bist wieder da hab ich gesehn.. wo bleiben die Updates? :firejump:
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
|
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
Folgende Änderungen gibt es:
Bitte testet mal ob alles funktioniert. Danke ps: Der Bug, das das jpg angezeigt wird, obwohl es noch nicht fertig ist, existiert immer noch. ;-( |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
grizzly hat auch ein Programm mit ähnlicher Funktionalizät geschrieben. Er hat das Programm gestern Aben hier in der DP als Freeware veröffentlicht. Beitrag: " ![]() Das Programm sieht auch sehr schön aus. Da sein UnitUsage auch die GraphVis Tools benutzt, sehen die Ergebnisse sehr ähnlich aus. Mein Tool werde ich trotzdem weiterentwickeln. ;-) UnitScanner wird auf jeden Fall noch um diverse Parameter gergänzt um die komplette Funktionalität auch von der Kommandozeile aus nutzen zu können. Ich habe auch noch ein paar andere Ideen ;-) |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
-- Projekt eingestellt -- |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
[Homer Simpsons Voice] Nein! [\Homer Simpsons Voice]
Das kenn' ich irgendwoher. Ich wollte von meinem Tool ja auch den Sourcecode rausgeben - nach einer kleinen Überarbeitung, versteht sich. Aber der Code entpuppte sich als dermaßen häßlich, daß ich nach etlichen Aufräumaktionen jetzt vor einem nicht funktionierenden Trümmerhaufen stehe. Und Zeit finde ich auch keine. Da war es immer beruhigend, daß nochmal wer an so einem Tool arbeitet... Nuja, ein eingestelltes Projekt kann man ja irgendwann mal wiedererwecken - vielleicht ist Dir ja doch noch irgendwann mal langweilig. ;) Grüße Michael |
Re: Freware: Programm zur Ermittlung von Unit-Abhängigkeiten
Zitat:
Da Du aber ja auch noch so ein Projekt hast, habe ich mir keine weiteren Gedanken gemacht ;-) Im Moment arbeite ich (privat, abends, zuhause) an einer ClearCase Integration für Delphi 2006. Also eine Schnittstelle zur Versionsverwaltung. Ich werde das Projekt CC4D definitiv als OpenSource veröffentlichen. Ich achte dann schon beim Programmieren drauf, das es kein Schrott wird. Bei dem Tool zur Ermittlung der Unit Abhängigkeiten habe ich das nicht gemacht. Das ist fürchterlich programmiert. Trotzdem habe ich den Quellcode an jemand weitergegeben. Seit dem redet der nicht mehr mit mir :-( Wenn ich den Code hier in (bzw. für) der Firma produziert hätte, würde ich warscheinlich eine Abmahnung bekommen. Aus dem cc4d Projekt wird auch ein Tutorial entstehen: "Wie klinke ich mich erfolgreich in die IDE ein" ;-) Mit folgenden Themen:
Wenn ich das Thema noch mal aufgreife, dann mach ich es gleich richtig richtig. (universeller Parser, der nicht nur Pascal, sondern dann auch C#, ... kann) Dann wird es aber ein neues Projekt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 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