Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Code Splitten
uranop - Di 14.07.09 07:07
Titel: Code Splitten
argh es is früh am morgen und ich habe bestimmt Kaffemangel,
wie immer halt xD
eehm Frage ....
Wenn ich nen Code der fix und fertig ist in z.b. php gebastelt habe dann schneide ich den raus und mach den mit include wieder in das projekt rein.
hier mit delphi tut das ja über units funzen wenn ich den aufbau so verstanden habe.
was ich nun nicht so wirklich raffe, ist...
warum ich nicht einfach nen codeblock nehmen kann, diesesn in block.pas als unit speicher und als uses einbinden kan ...
immer gibts gemecker und gemaule seitens der etw umgebung ...
Gibt mir mal bitte einer nen tritt wo hin und sacht wie das eben für doofe funzt : P
Danke
<< Kaffe machen geht
BenBE - Di 14.07.09 08:08
.5OT: Units von Delphi und Includes von PHP sind nicht identisch. Was unter Delphi äquivalent wäre, wäre die Compiler-Direktive
{$I}; dann darf die eingebundene Datei aber keine Unit sein.
Beispiel: Bei Aufruf der index.php wäre folgendes:
hello.php
1:
| <?= "Hello World!\n"; ?> |
include
1: 2: 3: 4: 5:
| <?php include "hello.php"; echo "Ich bin hier!\n"; include "hello.php"; ?> |
in Delphi (in etwa; gibt da in Delphi paar Einschränkungen) zu diesem hier äquivalent:
hello.inc
1:
| WriteLn('Hello World!'); |
index.dpr
1: 2: 3: 4: 5: 6: 7: 8: 9:
| program index;
{$APPTYPE CONSOLE}
begin {$I 'hello.inc'} WriteLn('Ich bin hier'); {$I 'hello.inc'} end. |
(Die Einschränkung liegt bei Delphi darin, dass jede eingebundene Datei einen für sich abgeschlossenen Block bildet und in der übergeordneten Datei keinen Block unterbrechen darf.)
Ein adequates Projekt mit Units wäre:
hello.pas
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Unit Hello;
interface
procedure SayHello;
implementation
Procedure SayHello; begin WriteLn('Hello World!'); end;
end. |
index.dpr
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| program index;
{$APPTYPE CONSOLE}
uses Hello;
begin SayHello; WriteLn('Ich bin hier'); SayHello; end. |
uranop - Di 14.07.09 08:13
Allright,
demzufolge muss ich nun also hergehen und die unzähligen labels buttons checkboxen etc aus der main.pas raus kopieren in eine neue. wenn ich das so richtigverstanden habe.
incl natuerlich der im main pas eingebundenen anderen units .
na mal sehen ob das was wird
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
ene - Di 14.07.09 08:24
Ähm watt? Die Steuerlemente gehören auch in die Unit des Formulars. Wenn du dich in einer anderen Unit darauf beziehen willst, kannst du die Formunit im Uses einbinden und dich dann über den Alias der Klasse drauf beziehen.
Oder du übergibst der Funktion(?) in der neuen Unit die Inhalte als Variable und weißt den Rückgabewert dem entsprechenden Steuerelement zu.
uranop - Di 14.07.09 08:28
naach .. BenBE hat mir das richtige aufgezeigt.
nach dem ich ganz in sich funktionierende Blöcke "outsource" klappt das wunderbar mit mit den include datein.
Danke vielmals das hat geholfen.
....
Und hierdrin sind schoen fein saeuberlich aufgeteilt ca 2200 Zeilen verschwunden
Funktioniert einwandfrei
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| {$I 'pcstuff.inc'} {$I 'allg.inc'} {$I 'services.inc'} {$I 'environment.inc'} {$I 'sms.inc'} {$I 'rud4all.inc'} |
BenBE - Di 14.07.09 10:00
Und das ist genau das, was man in Delphi NICHT tun sollte ;-)
Schreib Dir aus diesen Include-Files am besten UNABHÄNGIGE Units, die die Funktionen unabhängig von irgendwelchen Formularelementen kapseln (Model --> Control --> View) und binde dann diese separaten Units ein. Daher auch in meinem vorigen Post der Hinweis 0.5OT --> Off Topic ;-)
uranop - Di 14.07.09 10:46
ja meister : )
wenn ich dazu komme. ich musste nun erstmal Platz schaffen. die Fleißarbeit muss ich eh daheim machen.
Dazu kommt man hier in der Arbeit nicht.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!