AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ausgliedern von Functionen in externe Unit
Thema durchsuchen
Ansicht
Themen-Optionen

Ausgliedern von Functionen in externe Unit

Ein Thema von Jens Hartmann · begonnen am 19. Feb 2010 · letzter Beitrag vom 20. Feb 2010
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

Ausgliedern von Functionen in externe Unit

  Alt 19. Feb 2010, 07:05
Guten Morgen zusammen,

ich hab mal ne Frage zum ausgliedern von Funktionen in eigene Units. Ich habe einige Funktionen (ca. 20 Stck) die für das versenden von E-Mails zuständig sind. Diese Funktionen greifen allerdings auch auf Komponenten meiner Hauptform zu.

Mach es Sinn, oder besser gesagt wie gehe ich das an, diese Funktionen in einen eigene Unit zu packen, um in meinem Hauptformular mal wieder etwas mehr Ordnung zu bekommen.

Ist es OK, wenn ich in dieser Unit dann z.B. schreiben würde...

TForm1.Caption Oder ist es dann besser den Wert z.B. als Var. der Funktion oder als proberty zu übergeben.
function(var Caption : String) : Boolean oder so ähnlich.

Danke schon mal für Eure antworten

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Ausgliedern von Functionen in externe Unit

  Alt 19. Feb 2010, 07:24
Hi,

da kommt es meines Erachtens immer auf die genaue Funktion an.

Dein Beispiel wirkt ein bisschen konstruiert. Eine Funktion zur Änderung der Caption würde ich jetzt nicht unbedingt auslagern. Gerade diese Funktionalität gehört doch zum Formular und sollte durch eine Funktion des Formulars bereitgestellt werden

Gruß
angos
Ansgar
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Ausgliedern von Functionen in externe Unit

  Alt 19. Feb 2010, 08:24
Ich würde so etwas in drei Teile gliedern, wenn es konsequent sein soll.

1. Das Formular:
...enthält keinen "echten" SourceCode
...nur das Formular, also Aussehen und Anordnung betreffender Code steht hier

2. Funktion/Klassen
...in diesen Dateien sind Funktionen/Klassen, die allgemein ein Aufgabe verrichten
...diese Funktionen/Klassen kennen denjenigen, von dem sie genutzt werden gar nicht

3. Verbindung
...hier werden das Formular und die Funktionen/Klassen benutzt
...diese Klasse verbindet die Funktionalität mit dem Formular
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Ausgliedern von Functionen in externe Unit

  Alt 19. Feb 2010, 09:11
Zitat von Tyrael Y.:
3. Verbindung
...hier werden das Formular und die Funktionen/Klassen benutzt
...diese Klasse verbindet die Funktionalität mit dem Formular
Das ist zur Zeit mein Verständnisproblem. Wie mach ich sowas?

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Ausgliedern von Functionen in externe Unit

  Alt 19. Feb 2010, 09:18
Delphi-Quellcode:

unit SuperFunktionen...

  function HoleBetreffzeileVonEMail(): string;

end.


unit VerbinderKlasse
uses
 ...meinTollesFormularUnit, SuperFunktionen...
...
type
  TVerbinderKlasse = class
  ...
   meinFormular: TMeinFormular;
  ...
    procedure SetzeEMailBetreffZeile();

implementation

procedure TVerbinderKlasse.Create()
begin
..
  meinFormular = TMeinFormular.Craete(..
..
end;


procedure SetzeEMailBetreffZeile();
begin
  meinFormular.Betreffzeile := HoleBetreffzeileVonEMail();
end;
...
ein Beispiel...hoffe es ist verständlich
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Ausgliedern von Functionen in externe Unit

  Alt 19. Feb 2010, 09:20
Ahhhh,

danke. Das werde ich mal durcharbeiten. Kennst Du eventuell ein Tutorial, wo sowas beschrieben ist.

Danke schon mal und

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Ausgliedern von Functionen in externe Unit

  Alt 19. Feb 2010, 09:41
Ne sorry, leider kenn ich kein Tutorial zu diesem Thema.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Ausgliedern von Functionen in externe Unit

  Alt 19. Feb 2010, 09:55
Zitat von Jens Hartmann:
Diese Funktionen greifen allerdings auch auf Komponenten meiner Hauptform zu.
Welche Komponenten sind das denn so alles?

z.B. die Indy zur Komunikation:
Diese würde ich dann lokal/manuell in der Unit erzeugen
und nicht die nehmen, welche auf einer Form liegen.

Bei TLabel, gäbe es 2-3 grundsätzliche Möglichkeiten

1) der Text wird in der Unit gespeichert und die Form fragt von sich aus abundzu diesen Text ab und zeigt ihn dann an.
z.B. über eine Funktion ala "GibMirDenStatusText"

2) man übergibt die Insanz zu dem Label an die Unit
z.B. bei Start des Verarbeitung
funktion LadeEMails(status: TLabel): Boolean; 3) oder man übergibt (was ich für besser halte) eine Callback-Prozedur
Delphi-Quellcode:
type TCallback = procedure(text: String) of object;
funktion LadeEMails(status: TCallback ): Boolean;
so wären die Funktionen in der externen Unit komplett von der GUI getrennt und es hängt jetzt von der GUI ab, was sie im Callback mit diesem Text macht.
Sowas kennst du vorallem von den vielen OnIrgendwas-Ereignissen der VCL.
Die Funktion/Komponente brauch nicht zu wissen, wie der Rückgabewert angezeigt/verarbeitet wird und der Programmierer hat dann alle Möglichkeiten offen


Eventuell macht es sich auch nicht schlecht, wenn du deine Prozeduren in einer Klasse kapselst.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Ausgliedern von Functionen in externe Unit

  Alt 19. Feb 2010, 11:15
Vielleicht sollte man dann aber auch zu einer Klasse greifen oder nicht?

Also sowas wie:
Delphi-Quellcode:
type
  TEMailHandler = class
  private
    FOnLEM : TLoadEmailNotify;
  public
    property OnLoadEmail : TLoadEmailNotify read FOnLEM write FOnLEM;

    procedure LoadEmails;
  end;
Natürlich nicht nur mit den Bruchstücken, sondern mit mehr Content. Ich selber kenne ja kaum die Struktur deiner Klasse/Unit die du auslagern willst. Ansonsten mache ich das auch einfach so, dass ein paar Sachen (um auf die Form zuzugreifen) halt übergeben werden.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Ausgliedern von Functionen in externe Unit

  Alt 20. Feb 2010, 09:55
Hallo zusammen,

also erstmal besten Dank für die vielen antworten. Ich denke den Sinn habe ich verstanden, allerdings die Ausführung noch nicht so ganz. Ich nehme jetzt mal ein für mich aktuelles Beispiel. Ich möchte verschiedene Werte aus einer Datenbank habe. Hier z.B. jetzt die Uhzeit wann das nächste Mal eine E-Mail automatisch versendet wird. Diese Funktion brauche ich mehrmals, da ich mehrer Timer habe, die dieses machen sollen.

Code:
Timer 1 - E-Mail senden an Gruppe 1
Timer 2 - E-Mail senden an Gruppe 2
...
Timer n - E-Mail....
usw.
das heißt...
Delphi-Quellcode:
function SetTimer1IntervalEMailStart : Boolean;
var
  TimeNow : String;
  TimeSend : String;
const
  HalfDay = 43200000;
begin
  TimeNow := TimeToStr(Now);//Aktuelle Zeit ist ja soweit kein Problem
  TimeSend := '22:57:00';//Nächste Startzeit soll jetzt je nach Timer aus DB gelesen werden
Da ich ja jetzt je nach Timer eine andere Startzeit aus der DB brauch, denke ich müsste die function noch einen Übergabeparameter besitzen welcher Timer, also evtl. so..

function SetTimer1IntervalEMailStart(var Timer : integer) : Boolean; Um dann jetzt den Wert lesen zu können, müsste ich momentan sowas machen..

Delphi-Quellcode:
  TForm1.Qry_TimerRead.SQL.Text := 'SELECT * FROM EMAIL
' WHERE ID = :Id';
TForm1.Qry_TimerRead.ParamByName(
'Id').Value := Timer;
TForm1.Qry_TimerRead.Open;
TimeSend := TimeToStr(TForm1.Qry_TimerRead.FieldbyName(
'TIME').AsTime);
Jetzt wäre halt die Frage, wie ich sowas auslagern würde ohne immer noch das Form1 etc. zu nutzen.

Ich hoffe ich konnte so ungefähr beschreiben was ich meine

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 21:56 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