![]() |
Unit mit Funktionen einbinden
Hallo,
ich würde gerne Funktionen, die ich oft benötige in eine separate Unit auslagern. Leider bekomme ich es nicht hin, dass ich die Funktionen auch aufrufen kann. Beispiel: Ich habe eine Form mit dem Namen "Kunden". In einer globalen Unit mit dem Namen "Tools" soll nun die Funktion XYZ aufgerufen werden. Wie bringe ich die Form mit der Unit so zusammen, dass ich aus dem Form Kunde eine Funktion der Unigt "Tools" aufrufen kann. |
AW: Unit mit Funktionen einbinden
Die Unit in die Uses des implementation Teils.
|
AW: Unit mit Funktionen einbinden
hier wäre ein Beispiel :
![]() oder ggf. deinen eigenen Code hier posten |
AW: Unit mit Funktionen einbinden
Die Unit muss einen Interface und einen Implementationsteil haben.
Im Interface-Abschnitt kommen die Proceduren/Funktionen mit ihrem Aufruf-Syntax und müssen dann im Implementations-Abschnitt definiert werden:
Delphi-Quellcode:
Im Programm muss dann die Unit MeineFunktionen per uses eingebunden werden.
unit MeineFunktionen;
interface uses WinApi.Windows; {nur als Beispiel} const {diese const/procedure/function sind nach von aussen aufrufbar} VersionsNr : string = '5.4.334'; procedure Machirgendwas(Zahl : Integer); function BerechneWas : longInt; implementation function Verdopple(Zahl : Integer) : Integer; { -> diese function klappt nur innerhalb der Unit, da nicht im Interface-Abschnitt} begin resulte := Zahl*2; end; procedure Machirgendwas(Zahl : Integer); begin {hier Verarbeitungs-Code} end; function BerechneWas(Zahl : longInt) : longInt; var n : longInt; begin n := Verdopple(Zahl)*4; result := n; end; end.
Delphi-Quellcode:
...
uses MeineFunktionen; var n : LongInt; ... n := BerechneWas(2); {Ergebnis wäre 16} |
AW: Unit mit Funktionen einbinden
Der einfachste Weg bei nicht grafischen Elementen wäre eigentlich ohne Interface und dafür mit include zu arbeiten, wenn es nur um einfache Funktionen und Prozeduren geht.
Bei komplexeren Sachen mit grafischen Komponenten (und nötigem Inferface) lassen sich Funktionen und Prozeduren auch universell in Units auslagern, die vom Mainform des Hauptprogramms unabhängig sind. Die jeweiligen Kompontenten werden dann einfach als Parameter übergeben. Nurmal als Beispiel:
Delphi-Quellcode:
Procedure ClearGrid(sg: TStringGrid); und Aufruf im Hauptprogramm durch
Procedure ClearGrid(sg: TStringGrid);
VAR i: Integer; BEGIN WITH sg DO BEGIN FOR i := 0 TO RowCount DO Rows[i].Clear; RowCount:=2; fixedRows:=1; END; END;
Delphi-Quellcode:
procedure TForm1.ClearGrids;
VAR i: BYTE; begin for i:=1 to 7 DO ClearGrid(FindComponent('StringGrid'+IntToStr(i)) as TStringGrid); end; |
AW: Unit mit Funktionen einbinden
Super, vielen Dank. Ich mache mich mal ran und versuche das umzusetzen.
Gruß Sugar |
AW: Unit mit Funktionen einbinden
Moin...:P
Zitat:
1. vernünftige Namen - kein Form1 2. keine Abkürzungen für Namen sg -> GridProperties z.B. ...in 3 Monaten kannst du mit vielen Abkürzungen nichts mehr anfangen. :zwinker: 3. Groß/Kleinschreibung ist ja egal aber dann bitteschön konsequent 4. Einrückung konsequent gleich 5. Das Wichtigste: kein WITH. :warn: Debugging Probleme u.a. Besser an den StyleGuide halten, damit auch andere den Code einfach lesen können...:wink: ![]()
Delphi-Quellcode:
procedure ClearGrid(GridProperties: TStringGrid);
var I: Integer; begin for I := 0 to GridProperties.RowCount - 1 do begin GridProperties.Rows[I].Clear; end; GridProperties.RowCount := 2; GridProperties.FixedRows := 1; end; procedure TfoMain.ClearGrids; var I: Integer; begin for I := 1 to 7 do begin ClearGrid(FindComponent('StringGrid'+IntToStr(I)) as TStringGrid); end; end; |
AW: Unit mit Funktionen einbinden
Meinetwegen, aber mir ging es ums Beispiel an sich.
Mit "GridProperties" könnte ich allerdings absolut NICHTS anfangen, sondern müsste mich dauernd fragen, was das sein soll, während "sg" als Kürzel für StringGrid jedem sofort einleuchten müsste. Warum hätte ich in meinen Beispiel denn meinen wirklichen Form-Namen angebnen sollen, wenn doch die Vorgabe beim Erstellen eines Programms eben genau "Form1" ist? Mit "with" habe ich absolut nie Probleme gehabt, wohl aber mit dem Debugger und den Ergänzungsvorschlägen, wenn ich Code schreibe. Beides stört mich enorm dabei, Fehler zu finden und Code so zu gestalten, wie ich es vorhabe. Jeder hat seine eigenen Methoden, aber jemanden einfach deshalb zu kritisieren, weil er es anders macht, halte ich für unfair. Ausserdem habe ich längst aufgegeben, Code sauber zu formatieren oder konsequente Schreibweisen und Einrückungen durchsetzen zu wollen. Sobald man was ergänzt, kommen doch wieder Delphis Standardschreibweisen durch und sobald man fremden Code integriert, passt auch alles nicht mehr. Früher hab ich sowas mal versucht, sobald mir ein Programm fertig zu sein schien. Sobald man dann aber beim EIGENEN Debugging (also Situationen simuliert, die es nie geben dürfte) merkt, was es zu korrigieren gibt ... Ach was soll's? Jedem das Seine. |
AW: Unit mit Funktionen einbinden
Moin...:roll:
Zitat:
Zitat:
Ich bin raus... :? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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