Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Programmteile in extra Unit auslagern (https://www.delphipraxis.net/42117-programmteile-extra-unit-auslagern.html)

jim_raynor 15. Mär 2005 07:46

Re: Programmteile in extra Unit auslagern
 
Der Prozedurkopf muss auch im Interface-Teil der Unit stehen:

Delphi-Quellcode:
unit Unit_Sprache;

interface

function Addiere(a,b: Integer): Integer;

implementation


var Variablename: integer;

function Addiere(a,b: Integer): Integer;
begin
  result:=a+b;
end;

end.
Nur was im Interface-Teil drin steht, kann auch von aussen genutzt werden. Alles andere ist nur in der Unit verfügbar.

Sharky 15. Mär 2005 07:51

Re: Programmteile in extra Unit auslagern
 
Hai padavan,

hier mal der Code für ein Formular und eine externe Unit (Unit2). Das sollte die depresion verhindern ;-)
Delphi-Quellcode:
unit Unit2;

interface
  // Hier werden die Funktionen nach aussen bekannt gemacht
  function AddZahlen (value1, value2 : Real) : Real;
  procedure MacheEtwas (var ergebniss : Real ; value1, value2 : String);

implementation

uses SysUtils;


function AddZahlen (value1,value2 : Real) : Real;
begin
  result := value1 + value2;
end;

procedure MacheEtwas (var ergebniss : Real ; value1, value2 : String);
var
  r1,
  r2 : Real;
begin
  r1 := StrToFloat(value1);
  r2 := StrToFloat(value2);
  ergebniss := r1 + r2;
end;

end.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses
 Unit2; // Unit mit den Funktionen einbinden

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  test1 : Real;
begin
  test1 := AddZahlen(45.2,6.6);
  ShowMessage (FloatToStr (test1));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  test2 : Real;
begin
  MacheEtwas(test2,'45,2','6,6');
  ShowMessage (FloatToStr (test2));
end;

end.
[Edit] :cry:
Jetzt habe ich so schön getippelt und jim_raynor war schneller.

padavan 15. Mär 2005 09:11

Re: Programmteile in extra Unit auslagern
 
He Sharky, :hi:

trotzdem war´s nicht umsonst, den ein Delphi-Padavan wie ich ist froh über jede Info....!!!

kennt ihr das: man glaubt man hat es und freut sich wie ein Kind und dann......die Ernüchterung.
Denn: dank eurer Hilfe kann ich jetzt die Procedure in der "externen" Unit ansprechen,
ABER: in dieser Procedure ist es nicht möglich an die Form1 zu gelangen:
Delphi-Quellcode:
procedure test;
var Variable: integer;
begin
  Form1.height := 200; //Beispiel
end;
bei Form1. gibt´s gemecker von Delphi, da er die Form1 nicht kennt.
Nun hab ich versucht die Unit1 bei Uses der externen Unit einzubinden, hat aber nicht geholfen.

Es gab die Meldung, "Unit1.dcu nicht gefunden" :wiejetzt:

Sharky 15. Mär 2005 09:24

Re: Programmteile in extra Unit auslagern
 
Hai padavan,

trage die Unit1 mal nach implementation in der Unit2 ein.

Delphi-Quellcode:
Unit Unit2;
.
.
implementation
Uses Unit1;
.
.

himitsu 15. Mär 2005 11:28

Re: Programmteile in extra Unit auslagern
 
Eine ganz "brutale Methode ist {$INCLUDE ...}

Damit kann man einen Teil der Unit direkt in eine andere Datei auslagern. (damit ist es sogar Möglich Teile, die sonst nicht auslagerbar sind, dennoch auszulagern)
Ich hab da ein Programm, mit einigen hundert Ereignisprozeduren, welche ja so nicht auslagerungsfähig sind - aber damit ging es dennoch und ich hatte auch etwas mehr übersicht.

Und da so der ausgelagerte Teil dennoch Teil der Unit ist, gibt es auch keine Probleme mit Veriablen ...


Delphi-Quellcode:
// Unit1.pas

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{$INCLUDE UnitX.inc}

end.
Delphi-Quellcode:
// UnitX.inc

procedure TForm1.Button1Click(Sender: TObject);
begin
  ...
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ...
end;

padavan 15. Mär 2005 12:21

Re: Programmteile in extra Unit auslagern
 
Zitat:

trage die Unit1 mal nach implementation in der Unit2 ein.
Daraufhin kam ja die Fehlermeldung ja erst:

Delphi-Quellcode:
unit Unit_Sprache;

interface

procedure Sprachzuweisung1;

implementation
uses Unit1;  //  Fehler Unit1.dcu nicht gefunden

procedure......
Die Idee von himitsu ist auch interessant werde ich auch mal bei Gelegenheit probieren, allerdings würde ich´s gern erstmal auf "normalem" Wege hinbekommen, da ich die Zusammenhänge noch nicht ganz verinnerlicht habe... :oops:

himitsu 15. Mär 2005 12:48

Re: Programmteile in extra Unit auslagern
 
Klar, der "normale" Weg ist besser, voallem weil man da ja eine "richtige" Unit erhällt, während bei include nur Teile in 'ner Datei rumliegen :)

padavan 16. Mär 2005 06:55

Re: Programmteile in extra Unit auslagern
 
Ach mann, da hab ich mir am Schluss noch selbst ein Ei gelegt, Sharky hatte natürlich recht: Einfach die Unit1 in den Implementation Abschnitt rein und dann funzt´s.

Also nochmal vielen Dank an alle
Padavan
:witch:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz