![]() |
Re: Programmteile in extra Unit auslagern
Der Prozedurkopf muss auch im Interface-Teil der Unit stehen:
Delphi-Quellcode:
Nur was im Interface-Teil drin steht, kann auch von aussen genutzt werden. Alles andere ist nur in der Unit verfügbar.
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. |
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:
[Edit] :cry:
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. Jetzt habe ich so schön getippelt und jim_raynor war schneller. |
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:
bei Form1. gibt´s gemecker von Delphi, da er die Form1 nicht kennt.
procedure test;
var Variable: integer; begin Form1.height := 200; //Beispiel end; 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: |
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; . . |
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; |
Re: Programmteile in extra Unit auslagern
Zitat:
Delphi-Quellcode:
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:
unit Unit_Sprache;
interface procedure Sprachzuweisung1; implementation uses Unit1; // Fehler Unit1.dcu nicht gefunden procedure...... |
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 :)
|
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. |
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