Autor |
Beitrag |
pascalsv
      
Beiträge: 133
Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
|
Verfasst: So 12.11.06 10:10
Hallo zusammen,
da einige meiner Forms zu viele Funktionen beinhalten, möchte ich diese in eine eigene Unit auslagern. Nun gibt es den Weg, alle Funktionen in einer Klasse zu definieren. Dadurch könnte man von jedem anderen Form aus auf diese Funktionen zugreifen. Dieser Ansatz hat jedoch den Nachteil, dass ich immer ein Objekt der Klasse erzeugen und referenzieren muss, wenn ich auf eine Funktion zugreifen möchte.
Gibt es einen anderen, einfacheren, Weg, um Funktionen auszulagern? Wie macht ihr das?
Danke & Gruß,
Pascal
|
|
Danny87
      
Beiträge: 688
Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
|
Verfasst: So 12.11.06 10:34
Hi,
wenn ich Funktionen oder Prozeduren auslagern will/muss, dann mach ich das meistens mit DLLs.
Im Forum gibts auch noch irgendwo en gutes Tutorial zu DLLs.
Gruss
Daniel
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 12.11.06 10:38
Wenn ich Funktionen auslagern möchte, dann schreib ich die einfach in eine andere Unit, schreibe die Funktionsköpfe auch in den Deklarationsteil, binde die neue Unit in die erste ein und fertig.
_________________ We are, we were and will not be.
|
|
pascalsv 
      
Beiträge: 133
Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
|
Verfasst: So 12.11.06 10:39
OK, per dll sind die Funktionen auch von anderen Anwendungen nutzbar.
Gehe jetzt aber bitte mal davon aus, dass Du die Funktionen nur in Deinem Projekt nutzen möchtest - wie gehtst Du dann vor?
Gausi, ch habe das so gelöst:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| unit uFunktionen;
interface
uses SysUtils, Classes, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, UserSessionUnit, uDatenmodul;
type TUser = (tyAdmin, tyUser, tyUnknown, tyInactive, tyError);
type TFunktionen = class(TComponent) function CheckAllowed(const s: string): Boolean; private UserSession : TIWUserSession; end;
implementation
function TFunktionen.CheckAllowed(const s: string): Boolean; var i : Integer; begin Result:= false; for i:= 1 to Length(s) do if not (s[i] in ['a'..'z', 'A'..'Z', '0'..'9', '_', '-', '.', '@']) then Exit; Result:= true; end; |
Diesen Weg finde ich sehr umständlich, da ich in einer anderen Form immer ein Objekt von TFunktionen erstellen muss.
Wie machst Du das?
Pascal
Zuletzt bearbeitet von pascalsv am So 12.11.06 10:45, insgesamt 1-mal bearbeitet
|
|
Danny87
      
Beiträge: 688
Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
|
Verfasst: So 12.11.06 10:40
Guck mal Gausis Weg
Der is glaub ich das, was Du meinst 
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.11.06 10:47
Also so, um auch mal ein Beispiel zu bringen:
(Das schreibe ich auch, weil du dir angewöhnen solltest, alles korrekt einzurücken tatt es in eine Zeile zu schreiben, ich habs mal etwas lesbarer geschrieben... Falls du es sonst tust, ok, ich wollte es nur mal gesagt haben  , denn bei größeren Projekten verstehst du sonst deinen eigenen Code nicht...)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| unit uFunktionen;
interface
uses SysUtils, Classes, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP, UserSessionUnit, uDatenmodul;
type TUser = (tyAdmin, tyUser, tyUnknown, tyInactive, tyError);
function CheckAllowed(const s: string): Boolean;
implementation
function CheckAllowed(const s: string): Boolean; var i: Integer; begin Result := false; for i := 1 to Length(s) do if not (s[i] in ['a'..'z', 'A'..'Z', '0'..'9', '_', '-', '.', '@']) then Exit; Result := true; end; |
In anderen Units bindest du die einfach nur in die Uses-Klausel ein und kannst die Funktion einfach nutzen.
Zuletzt bearbeitet von jaenicke am So 12.11.06 10:51, insgesamt 1-mal bearbeitet
|
|
pascalsv 
      
Beiträge: 133
Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
|
Verfasst: So 12.11.06 10:50
Jawohl, das ist es!!
VIEL eleganter als mein *HÜSTEL* "Ansatz"...
Danke!
Pascal
|
|
|