Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   kann man alle wichtigen Funktionen auslagern ? (https://www.delphipraxis.net/84233-kann-man-alle-wichtigen-funktionen-auslagern.html)

LingNeu 13. Jan 2007 17:41


kann man alle wichtigen Funktionen auslagern ?
 
Hallo Delphifans,
ist es möglich, die verschiedenen, selbstgeschriebenen Funktionen in einer eigenen Datei unterzubringen?
Habe schon mal in einem Buch gewälzt, da steht aber nichts drin, ausser das man in Units sowas machen kann, leider kein Beispiel.
Gibt es noch eine andere Möglichkeit, seinen Code etwas zu strukturieren.
In der Zwischenzeit hat mein Programm (eine Unit) über 3000 Zeilen und ich wollte einige Funktionen und Proceduren auslagern.
Leider krieg ich das nicht hin - ohne ein Bombardement von Fehlern.
Das Programm funktioniert ja, aber ich bin halt ein bischen ein Perfektionist und da würde ich gerne, die Sache etwas verbessern.
Vielleicht hat einer von euch Profis einen guten Tipp für mich.
Wäre wirklich sehr dankbar für einen Hinweis oder ein kleines Beispiel.
vielen Dank und schöne Grüsse
LingNeu

mkinzler 13. Jan 2007 17:57

Re: kann man alle wichtigen Funktionen auslagern ?
 
Einfach Funktionen in eiegene Unit auslagern und diese dann unter Uses einbinden.
Mit welchen Fehlern wist du bombardiert?

Martin K 13. Jan 2007 18:06

Re: kann man alle wichtigen Funktionen auslagern ?
 
Unit ist genau das richtige Stichwort.
Mal ein Beispiel, wie Du die Prozeduren Test1, Test2 und den Typ TTest in eine Unit schreibst (Name der Unit musst Du noch selbst festlegen, heißt hier als Beispiel: NameDeinerUnit):
Delphi-Quellcode:
unit NameDeinerUnit;

interface

uses
  //alle Units die für diese Unit gebraucht werden

type
  TTest = ...
    ...
  end;

procedure Test1(...);
procedure Test2(...);

implementation

//ggf. kommt hier noch was von TTest hin

procedure Test1(...);
begin
  //hier der Code
end;

procedure Test2(...);
begin
  //hier der Code
end;

end.
Diese Unit (Dateiname: NameDeinerUnit.pas) muss dann in das aktuelle Verzeichnis (wo das Projekt ist, in dem du die Unit nutzen willst), oder in das Verzeichnis C:\Programme\Borland\<DelphiVersion>\Lib, falls du diese Unit in Zukunft immer zur Verfügung haben möchtest, für mehrere Projekte.

Um diese Unit dann in deinem aktuellen Projekt nutzen zu können, musst du sie bei deinem Projekt (dort in der Unit, in der die andere Unit verwendet werden soll) unter uses auflisten, etwa so:
Delphi-Quellcode:
unit Unit1;

interface

uses
  {hier steht schon einiges}, NameDeinerUnit;

{...}
Grüße, Martin

LingNeu 13. Jan 2007 18:17

Re: kann man alle wichtigen Funktionen auslagern ?
 
@mkinzler
Es kommt immer "undefinierter Bezeichner: Dauer"

Delphi-Quellcode:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
var
  Form1: TForm1;
implementation
uses unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
//rest
label3.Caption := Dauer(now);
end;

Delphi-Quellcode:
unit Unit2;

interface
function Dauer(ADate: TDateTime): string;

implementation

function Dauer(ADate: TDateTime): string;
//rest
end;

C.Schoch 13. Jan 2007 19:06

Re: kann man alle wichtigen Funktionen auslagern ?
 
Hi,
Du die Unit2 hier einschreiben
Delphi-Quellcode:
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2; // <-- Hier

LingNeu 13. Jan 2007 19:57

Re: kann man alle wichtigen Funktionen auslagern ?
 
@C.Schoch
danke für Deinen Hinweis. Ich habe unter den uses die Unit2 reingesetzt. Jetzt geht die Sache. Kann man noch was machen, weil noch eine Unbekannte Funktion angemahnt wurde.
Die war in der Funktion Dauer (DecodeDate)
Erst als ich die Zeile Uses mit den Angaben von der Unit1 reingesetzt habe, funktionierte die Sache richtig.
Mein Frage wäre, wie kann ich feststellen, welche uses-Eintragung ich brauche, da ich momentan alle von der Unit1 eingefügt habe. Vermutlich ist die DecodeDate in der SysUtils drin.
Gibt es keine Möglichkeit auf diese Angaben zu verzichten, damit es trotzdem funktiont, auch wenn nur in der Unit1 die Angaben sind. Jetzt sind sozusagen in beiden Units unter uses die gleichen Eintragungen - ist das richtig ?
Besten Dank nochmals

Delphi-Quellcode:
unit Unit2;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
function Dauer(ADate: TDateTime): string;

implementation

function Dauer(ADate: TDateTime): string;
//rest z.B. DecodeDate()
end;

Klaus01 13. Jan 2007 19:59

Re: kann man alle wichtigen Funktionen auslagern ?
 
Du solltest die Unit SysUtils in Dein Unit2 einbinden.
Dann brauchst Du nicht die Unit1 in die Unit2 einbinden.

Grüße
Klaus

Nils_13 13. Jan 2007 21:04

Re: kann man alle wichtigen Funktionen auslagern ?
 
Zu der Uses-Klausel in der eigenen Unit noch ein kleiner Tipp: Wenn du wirklich nicht weißt, in welcher Unit die gesuchte Prozedur oder Funktion steht, kannst du einfach alle Units eines Standardprojekts (solange sie in den Standardunits mit Sicherheit enthalten sind, da muss man halt schauen) in deine Unit reinschreiben (uses-Klausel) und dann knall einfach wieder die nicht benötigten Units raus.

Christoph Frank 20. Mär 2007 11:41

Re: kann man alle wichtigen Funktionen auslagern ?
 
Hallo zusammen,

zu diesem Thema habe ich auch noch eine Frage.
In meiner Anwendung habe ich ein Formular mit unterschiedlichen Komponenten Edit, Button usw. In Abhängigkeit der Verarbeitung müssen die Komponenten enabeld oder disabled werden. Diese Routinen blähen mein Main ziemlich auf und ich möchte sie in eine eigene unit auslagern, wegen der Übersicht.
Wie kann ich in dieser unit die in der Form1 festgelgten Komponenten ansprechen?
Also:
In der Unit1 von Form1 befindet sich ein Edit1-Feld.
In MeinUnit ist die procedure InaktivMachen in der ich Edit1.Enabled := false; setzen möchte.
MeinUnit kennt natürlich das Edit1-Feld aus Form1-Unit1 nicht und da liegt mein Problem.

Für baldige Hilfe bin ich sehr dankbar.

Matze 20. Mär 2007 11:44

Re: kann man alle wichtigen Funktionen auslagern ?
 
Hi,

du musst lediglich in den uses ein Formular (hier: Form1) einbinden und kannst dann mit

Delphi-Quellcode:
Form1.Edit.Enabled := true;
darauf zugreifen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr.
Seite 1 von 2  1 2      

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