Autor Beitrag
pascalsv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 688

Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 688

Windows 10 Pro 64bit
Sprachen: HTML, PHP, JavaScript, Delphi || IDE: RAD Studio 10.1 Berlin Starter, WeBuilder
BeitragVerfasst: So 12.11.06 10:40 
Guck mal Gausis Weg ;)
Der is glaub ich das, was Du meinst :-)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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...)
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 133

Win XP Prof. SP2 / Windows 7
Visual Studio 2008 / Silverlight 3 / Silverlight 4 Beta
BeitragVerfasst: So 12.11.06 10:50 
Jawohl, das ist es!!

VIEL eleganter als mein *HÜSTEL* "Ansatz"...

Danke!

Pascal