Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Unit mit Funktionen einbinden (https://www.delphipraxis.net/206083-unit-mit-funktionen-einbinden.html)

Sugar 17. Nov 2020 17:11

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.

mkinzler 17. Nov 2020 17:15

AW: Unit mit Funktionen einbinden
 
Die Unit in die Uses des implementation Teils.

bernhard_LA 17. Nov 2020 17:19

AW: Unit mit Funktionen einbinden
 
hier wäre ein Beispiel : https://www.delphi-treff.de/object-p...rogrammaufbau/

oder ggf. deinen eigenen Code hier posten

Cronen 17. Nov 2020 18:29

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:
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.
Im Programm muss dann die Unit MeineFunktionen per uses eingebunden werden.

Delphi-Quellcode:
...
uses
  MeineFunktionen;

var
  n : LongInt;
...
  n := BerechneWas(2); {Ergebnis wäre 16}

Delfiano 19. Nov 2020 02:37

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);
VAR
  i: Integer;
BEGIN
  WITH sg DO BEGIN
    FOR i := 0 TO RowCount DO Rows[i].Clear;
    RowCount:=2;
    fixedRows:=1;
  END;
END;
Procedure ClearGrid(sg: TStringGrid); und Aufruf im Hauptprogramm durch

Delphi-Quellcode:
procedure TForm1.ClearGrids;
VAR
  i: BYTE;
begin
  for i:=1 to 7 DO ClearGrid(FindComponent('StringGrid'+IntToStr(i)) as TStringGrid);
end;

Sugar 19. Nov 2020 14:45

AW: Unit mit Funktionen einbinden
 
Super, vielen Dank. Ich mache mich mal ran und versuche das umzusetzen.

Gruß
Sugar

haentschman 20. Nov 2020 05:39

AW: Unit mit Funktionen einbinden
 
Moin...:P
Zitat:

Super, vielen Dank. Ich mache mich mal ran und versuche das umzusetzen.
...aber bitte nicht so. :zwinker: @Delfiano: Sorry.

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:
https://www.delphi-treff.de/object-pascal/styleguide/

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;

Delfiano 21. Nov 2020 01:32

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.

haentschman 21. Nov 2020 05:42

AW: Unit mit Funktionen einbinden
 
Moin...:roll:
Zitat:

Jeder hat seine eigenen Methoden, aber jemanden einfach deshalb zu kritisieren, weil er es anders macht, halte ich für unfair.
Konstruktive Kritik muß man sich gefallen lassen wenn man den Code veröffentlicht. Das Leiden haben alle. Was ist daran unfair? Auch wenn du selbst machen kannst wie du es möchtest, solltest du auch an die Neulinge denken, die hier was lernen sollen/wollen...und die es gleich richtig machen sollen/wollen. :?
Zitat:

Ausserdem habe ich längst aufgegeben, Code sauber zu formatieren oder konsequente Schreibweisen und Einrückungen durchsetzen zu wollen
Ich bin vieleicht zu alt...aber ich empfinde das gegenüber den Anderen, die Helfen wollen, u.a. als respektlos. ("Friss oder stirb"). :roll:

Ich bin raus... :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 Uhr.

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