AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unit mit Funktionen einbinden

Ein Thema von Sugar · begonnen am 17. Nov 2020 · letzter Beitrag vom 21. Nov 2020
Antwort Antwort
Sugar

Registriert seit: 23. Jul 2012
83 Beiträge
 
#1

Unit mit Funktionen einbinden

  Alt 17. Nov 2020, 17:11
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Unit mit Funktionen einbinden

  Alt 17. Nov 2020, 17:15
Die Unit in die Uses des implementation Teils.
Markus Kinzler
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.121 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Unit mit Funktionen einbinden

  Alt 17. Nov 2020, 17:19
hier wäre ein Beispiel : https://www.delphi-treff.de/object-p...rogrammaufbau/

oder ggf. deinen eigenen Code hier posten
  Mit Zitat antworten Zitat
Cronen

Registriert seit: 5. Sep 2003
Ort: Hannover
61 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Unit mit Funktionen einbinden

  Alt 17. Nov 2020, 18:29
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}
  Mit Zitat antworten Zitat
Delfiano

Registriert seit: 13. Jul 2020
61 Beiträge
 
#5

AW: Unit mit Funktionen einbinden

  Alt 19. Nov 2020, 02:37
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;
  Mit Zitat antworten Zitat
Sugar

Registriert seit: 23. Jul 2012
83 Beiträge
 
#6

AW: Unit mit Funktionen einbinden

  Alt 19. Nov 2020, 14:45
Super, vielen Dank. Ich mache mich mal ran und versuche das umzusetzen.

Gruß
Sugar
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.289 Beiträge
 
Delphi 12 Athens
 
#7

AW: Unit mit Funktionen einbinden

  Alt 20. Nov 2020, 05:39
Moin...
Zitat:
Super, vielen Dank. Ich mache mich mal ran und versuche das umzusetzen.
...aber bitte nicht so. @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.
3. Groß/Kleinschreibung ist ja egal aber dann bitteschön konsequent
4. Einrückung konsequent gleich
5. Das Wichtigste: kein WITH. Debugging Probleme u.a.

Besser an den StyleGuide halten, damit auch andere den Code einfach lesen können...
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;
  Mit Zitat antworten Zitat
Delfiano

Registriert seit: 13. Jul 2020
61 Beiträge
 
#8

AW: Unit mit Funktionen einbinden

  Alt 21. Nov 2020, 01:32
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.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.289 Beiträge
 
Delphi 12 Athens
 
#9

AW: Unit mit Funktionen einbinden

  Alt 21. Nov 2020, 05:42
Moin...
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").

Ich bin raus...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 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