Autor Beitrag
kiwicht
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Do 06.02.03 18:46 
Hallo...

mein Programm umfasst mittlerweile um die 4500 zeilen, und irgendwann stresst es doch ganz gewaltig immer nach irgendwelchen code-schnipseln zu suchen....
was hab ich für möglichkeiten, ausser dll´s, programm-code, der eigentlich nich mehr gebraucht wird, auszulagern.
am liebsten wär mir ne gaaanze einfach lösung, bei der ich einfach eine platzhalter setzt und delphi dementsprechend vor dem kompilieren den code dort einfügt... geht sowas?

mfg
kiwicht
Jack Falworth
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 222

Win XP Pro, Slackware 10.0
D5 Enterprise, C++, ABAP
BeitragVerfasst: Do 06.02.03 18:55 
Nein außer dlls,
aber du könntest alles was irgendwie initialisiert oder gespeichert wird in Datein lagern. Da spart oft viel code und ist übersichtlicher und einfacher zu benutzen.

MfG

Jack Falworth

_________________
Andere zu kritisieren ist mitunter eine Möglichkeit, sich selbst ins bessere Licht zu setzen.
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Do 06.02.03 19:20 
Wie wär's mit Funktionen und Units?
Manchmal ist es sinnvoll, Programmblöcke einfach nur der Übersichtlichkeit wegen in Prozeduren auszulagern, obowhl man sie gar nicht oft braucht. Das ist zwar erst sinnvoll, wenn dieser Programmblock viele Zeilen enthält, aber das dürfte ja wohl gegeben sein (bei 4000 Zeilen findet man doch bestimmt was, was zusammen gehört). Das ist dann zwar nicht der ursprüngliche Einsatzzweck von Prozeduren, nämlich nicht das Abkürzen wiederholt aufzurufender Prozesse, aber als Strukturierungsmittel ist das das einfachste, mit dem wenigsten Aufwand und ohne große Performanceeinbuße.
Einige Prozeduren würde ich dann wieder gruppieren und in Units auslagern. Zum Beispiel einen speicherprozess. Da werden normalerweise Infos gesammelt (aus TMemo o.Ä.), konvertiert (eigene Header davor, eigenes Dateiformat) und dann die Daten in einen File geschrieben. Das sind mehrere Prozeduren, die man in eine Unit machen könnte (zum Beispiel save.pas).

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Do 06.02.03 19:27 
also das mit den prozeduren hört sich ja ganz lecker an... hast du dazu ein verständliches (also auf newbies zugeschnittenes) tutorial parat?

auszulagern gibts bei mir jedenfalls genug, allein die initalisierung meine 100 edit-felder oder das auslesen von der registry sind alles sachen, die hab ich einmal geschrieben, muss daran aber nie wieder was änder....

mfg & thx

ps. @ Jack Falworth
das mit den dll´s ist mir schon wieder zu overkill, zumal ich das schonmal probiert hab, und jämmerlich versagt habe... :oops:
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 06.02.03 19:46 
kiwicht hat folgendes geschrieben:
also das mit den prozeduren hört sich ja ganz lecker an... hast du dazu ein verständliches (also auf newbies zugeschnittenes) tutorial parat?

Du weißt nicht, wie man Prozeduren schreibt und nutzt? :?

btw: Ein Tutorial zum Optimieren von Quellcode (wenn ich das jetzt richtig verstanden habe) wird´s nicht geben, denn das kommt doch sehr auf das Programm und seinen Zweck an.
Mit Tipps, die man dir evtl. gibt, kannst du möglicherweise gar nichts anfangen, usw.
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Do 06.02.03 20:08 
wie lange programmierst du denn?
Prozeduren müsste man eigentlich kennen.
Oben in der type-Deklaration der Form schreibst du
ausblenden Quelltext
1:
procedure Prozedurname(Parameter);					


Wenn keine Parameter gebraucht werden, einfach weglassen.
Im implementation-Teil kommt dann irgendwo ein
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
procedure FormKlasse.Prozedurname(Parameter);
begin

// irgendwelcher Code

end;

Wäre eigentlich das allererste was man lernt, wenn man eine Programmiersprache lernt...
Und wenn man Projekte mit 4000 Zeilen Code in Angriff nimmt, dachte ich bisher immer,daß man genug Wissen hat, zu wissen was eine Prozedur und eine Funktion und eine Unit ist...
Und das hat Mathias ja auch gemeint, nur hab' ich geschrieben, wie's geht *g*

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Do 06.02.03 20:23 
:lol: ... da muss ich ja ersma schmunzeln... ist aber verständlich das ihr euch wundert... ich bin seit einem halben jahr dabei.. vielleicht hab ich mich auch n bisschen unpassend ausgedrückt...

also das mit den prozeduren, wie ich die erstelle, klar, das krieg ich hin, ich meinte die frage jetzt eher bezogen auf "auslagern" von prozeduren.... aber trotzdem danke für den hinweis.. ;)

mfg
kiwicht

ps:
sieht schon nett aus, wenn jemand n 4000-zeilen progg schreibt, und keine proceduren kennt... ich kann euch gut verstehen... :D :D ....
[/quote]
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 07.02.03 13:15 
hi, vielleicht machste das mit {$INCLUDE filename}. Ist zwar nicht so sauber, aber das hört sich bei deinem code eh hoffnungslos an (ich glaube jeder von uns hat schonmal hoffnungslosen code geschrieben).

Also, einfach den teil, den du nie wieder brauchst in eine .inc datei tun und mit der directive...{$INCLUDE auslager.inc}...liest der compiler in dieser datei weiter.

Wichtig ist nur, das du ganze blöcke auslagerst, dh. du darfst begin und end nicht trennen. Ferner muss dir klar sein, das er bei compiler-fehlern die stelle in dieser datei nicht anzeigt.

viel spass
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Fr 07.02.03 22:40 
kann auch nur auf units und procedure's verweisen...

ich mach auf jeden Fall, wenn der Quelltext ziemlich lang ist für alles was zusammengehört und einigermaßen lang ist eine eigene unit...

mit Proceduren auslagern ist gemeint, dass du Code der in einer anderen Procedure steht, und der zusammengehört in eine neue Procedure geschrieben wird und in der aktuellen Procedure (wos vorher drin war) nur die procedure aufgerufen wird...
dadurch wird der Wuelltext pro Procedure verringert und alles wird übersichtlicher...
des weiteren mache ich es zum Beispiel immer so, dass ich zwischen den Prozeduren immer eine Kommerntarzeile mache, di nur aus "-" oder "#" besteht...
dadurch werden die Proceduren auch optisch voneinander abgegrenzt, denn bei mir sind Comments gelb... :wink:

Fiji-Fighter
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mo 10.02.03 13:06 
jepp.. danke für die tips...
das mit den INCLUDE, das meint ich, mir isses da erstmal auch wurscht.
ob er mir die fehler da dann nicht anzeigt, da es sicht dort hauptsächlich um reine Datenzuweisungen handelt, die einfach nur da sind, aber keine fehler enthalten können....theoretisch

mfg
kiwicht
foxy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 814

Ubuntu, Gentoo
C++, PHP, Java, Ruby, Perl (Eclipse)
BeitragVerfasst: Mo 10.02.03 13:30 
Guden Kiwi
also wenn ich grosse Prjekte habe mach ich das weder mit .dll oder mache das in Units ... das iss dann eigentlich ganz simpel

nur dann wird ab und zu die Uses Liste ganz schön lang :D

_________________
"Only wimps use tape backup: real men just upload their important stuff on ftp, and let the rest of the world mirror it." (Linus Torvalds)
OperatingSystem Laptop (Ubuntu Hardy)
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Do 13.02.03 09:50 
jo, danke, aber ich hab mich gerade mit noch was, wie ich find, besserem angefreundet:
MDI-Forms! :D .... da kann ich schön alles Mögliche an Code und Zeugs was zusammengehört, auslagern, und die Teile zur Laufzeit auch mal schliessen, was den Speicher-Verbrauch extrem mindert!

vielen Dank für eure Mühen!

mfg
kiwicht
hansg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

Win XP Professional SP3, Vista Ultimate 32 SP1
Delphi 6 Professional
BeitragVerfasst: Mi 26.02.03 18:41 
Hallo,
zu diesem Thema hätte ich eine Frage.

Wenn ich Programmcode auslagern möchte z.B. in Speichern.pas
wie rufe ich diesen in einer Anwendung auf bzw. wie und wo muß man was
deklarieren?

_________________
Gruß Hans
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Mi 26.02.03 19:50 
bei uses musst du die andere unit eintragen, bei der die Funktion / Prozedur drinsteht...

und die Funktion muss auch global sein:
du musst sie oben im "Kopf" deklarieren, wo auch immer alles eingetragen wird von den Buttonclick-Procedures...

Wenns nicht klar war, dann frag nochmal nach nem BSP...
hansg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

Win XP Professional SP3, Vista Ultimate 32 SP1
Delphi 6 Professional
BeitragVerfasst: Mi 26.02.03 20:08 
Hallo,
danke für das Angebot mit dem BSP, folgendes habe ich nicht verstanden:
Zitat:

und die Funktion muss auch global sein:
du musst sie oben im "Kopf" deklarieren, wo auch immer alles eingetragen wird von den Buttonclick-Procedures...

_________________
Gruß Hans
kiwicht Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1021

Win 7, MacOS
Delphi x, VBA, PHP, ...
BeitragVerfasst: Mi 26.02.03 20:39 
der "Kopf" ist da, wo ganz am Anfang in deinem ProgrammCode ganz oft untereinander Procedure oder Function steht. Das ist der Teil zwischen Uses und Var... guck mal hier im FAQ-Bereich, ich glaub da gabs einiges zum Thema Aufbau und Struktur von QuellCodes...
hansg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

Win XP Professional SP3, Vista Ultimate 32 SP1
Delphi 6 Professional
BeitragVerfasst: Mi 26.02.03 20:50 
Hallo,

habe in meinem Hauptformular bei uses den Eintrag speichern hinzugefügt.
In der Unit speichern.pas kommt dann meine Procedure, wo und wie genau muß ich diese deklarieren?
Hier der nackte Quelltext aus meiner Unit (speichern.pas)

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
unit speichern;

interface

implementation

end.

_________________
Gruß Hans
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 26.02.03 23:49 
maximus hat folgendes geschrieben:

Also, einfach den teil, den du nie wieder brauchst in eine .inc datei tun und mit der directive...{$INCLUDE auslager.inc}...liest der compiler in dieser datei weiter.

Warum nur Blöcke auslagern, die er nicht mehr braucht? Ich nutze eigentlich Include-Dateien auch für Source, den ich noch brauche.
Zitat:

Wichtig ist nur, das du ganze blöcke auslagerst, dh. du darfst begin und end nicht trennen.

Irgendwie logisch oder? :roll:
Zitat:

Ferner muss dir klar sein, das er bei compiler-fehlern die stelle in dieser datei nicht anzeigt.

Und das ist schlicht und ergreifend falsch. Das einzigste, wa snicht geht ist die Quellcode-Vervollständigung, weil in den Include-Dateien keine Units eingebunden werden.
hansg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 168

Win XP Professional SP3, Vista Ultimate 32 SP1
Delphi 6 Professional
BeitragVerfasst: Do 27.02.03 07:00 
An Luckie,
danke für die Info, ich möchte aber wissen wie ich das mit einer pas Datei
machen muß.
Sprich was und wo genau muß ich in der Unit speichern.pas deklarieren?

_________________
Gruß Hans
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Do 27.02.03 09:46 
hansg hat folgendes geschrieben:
Sprich was und wo genau muß ich in der Unit speichern.pas deklarieren?

Schau Dir mal die Antwort von Tommie-lie an. Die sollte es glaube ich erklären!

Gruß
TINO