AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programmteile in extra Unit auslagern

Ein Thema von padavan · begonnen am 14. Mär 2005 · letzter Beitrag vom 16. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2      
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#1

Programmteile in extra Unit auslagern

  Alt 14. Mär 2005, 08:45
Hallo Leute, habe eine Frage bzgl. Unit - Einbindung.

Ich bin dabei ein Programm zu schreiben, bei dem vom Hauptformular aus auch noch weitere Formulare zur Laufzeit erzeugt werden können und Parameter zwischen diesen Fenstern übergeben werden. So weit so gut, das geht auch.
ABER:
Ich habe es bisher nicht geschafft, einen Programmteil in eine Unit ohne Formular auszulagern. (Der Sinn und Zweck einen Programmteil auszulagern soll einfach darin liegen, dass ich Quelltext aus dem Hauptunit rausbekomme um Übersicht im Programm zu schaffen.)
Ich scheitere aber immer daran, dass in der ausgelagerten Unit die Komponenten des Hauptformulars und/oder auch die Variablen des Hauptformulars nicht definiert sind.
Also hab ich mir versucht in der OH anzuschauen, wo und wie ich die Variablen deklarieren muss, damit das "gesamte Programm" die Variablen kennt. Da stolpert man über den Interface Abschnitt oder über den Public Abschnitt.

Habe
1. die Unit_extern in der Uses-Klausel in der Unit1 eingebunden
2. die Unit1 in der Unit_extern eingebunden
3. Variablen die Global sein sollen in Unit1 unter Public deklariert

Trotzdem geht´s net.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: Programmteile in extra Unit auslagern

  Alt 14. Mär 2005, 09:10
Unit.Variablenname oderForm.Variablenname ...
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#3

Re: Programmteile in extra Unit auslagern

  Alt 14. Mär 2005, 09:22
Hi

Delphi-Quellcode:
unit uMain;
{$I myDebug.pas}

  interface
    uses
      Windows, Messages, Dialogs, SysUtils, Forms, StdCtrls, Classes, Controls, ExtCtrls,
      StShlCtl, SRChkBox, ovcbase, ovcmeter, LEDPaint, dynForm;

    type
      TMain = class(TForm)
......
    end;

    var
      Main : TMain;
      SavCursor : TCursor;

  implementation
    {$R *.dfm}

    uses
      uUtil; <=== das brauchst Du !!!
Dann Aufruf z.B.:
Delphi-Quellcode:
uUtil.Demo := true;

uUtil.machwas(SavCursor);
Willst Du in der ausgelagerten Unit auf Variablen von Main zugreifen, musst Du entweder die Main-Unit in der ausgelagerten als "uses" deklarieren, oder mit
procedure test (var value : irgendwas); arbeiten und die Werte "public" übergeben und zurückholen.
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#4

Re: Programmteile in extra Unit auslagern

  Alt 14. Mär 2005, 10:05
Hi padavan,

wenn du Quellcode aus einer Formular-Unit in eine Extra-Unit auslagerst, dort aber wieder auf Formular-Komponenten aus der ersten Unit zugreifen mußt......dann stimmt irgendwas mit deinem Konzept nicht. Übersichtlicher wird dadurch gar nichts und du bekommst auch noch zirkuläre Referenzen (was zwar compilierbar ist, solange nicht in beiden Units im Interface, aber unsauber). Außerdem ist es dann mit sauberer Objektorientierung vorbei, sobald du nämlich mehr als eine Instanz deines Formulars hast, geht das Ganze in die Hose.

Stattdessen würde ich in die Extra-Unit nur allgemeine Routinen auslagern und entsprechend Variablen im Prozedurkopf deklarieren.

also statt
Delphi-Quellcode:
procedure DoIt;
begin
  MyMainForm.ListBox.Add(.....);
end;
lieber

Delphi-Quellcode:
procedure DoIt(aListBox: TListBox);
begin
  aListBox.Add(.....);
end;

Roderich
  Mit Zitat antworten Zitat
Benutzerbild von DymonD
DymonD

Registriert seit: 12. Mai 2004
Ort: Niederhöchstadt
116 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Programmteile in extra Unit auslagern

  Alt 14. Mär 2005, 10:34
Wenn du nur Funktionen/Prozeduren hast, dann kanst du die doch einfach in eine Unit auslagern, die bindest du dann hier ein:
Delphi-Quellcode:
interface
    uses
      Windows, Messages, ..., DeineUnit;
Vorteil: Du kannst aber auch häufig verwendete Funktionen da mit einbinden, die du normalerweise selbst immer neu hättest coden müssen
Dimitri K.
DymonD & Dimak are Ganxtas Of Paradise
http://www.dymond-online.de/gop
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Programmteile in extra Unit auslagern

  Alt 14. Mär 2005, 10:52
Hallo Roderich,

naja, es ging mir eigentlich darum Quellcode aus der Hauptform rauszunehmen, nicht aus zusätzlichen Formularen, die sind ja dann schon extra und "sauber", allerdings triffts DymonD recht gut mit seinem Vorschlag. Genauso in der Art hätte ich mir das vorgestellt. Eine Procedure welche sehr Textintensiv ist einfach aus der Unit1 rausnehmen --> aus übersichtlichkeit eben.
Diese Variante werde ich gleich mal versuchen umzusetzten...

Vielen Dank für jede Hilfe!!!
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Programmteile in extra Unit auslagern

  Alt 14. Mär 2005, 11:17
Hmm, muss noch mal nerven,

habe jetzt die Procedure in eine andere Unit ausgelagert
Delphi-Quellcode:
unit Unit_Sprache;

interface

implementation


var Variablename: integer;
begin

// Anweisung......

end;

end.
und diese Unit folgendermaßen deklariert
Delphi-Quellcode:
interface


     
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, inifiles, StdCtrls, ExtCtrls, Unit_Sprache;
Aber wie spreche ich nun diese procedure in der ausgelagerten Unit an?
Habe es mit Unit_Sprache.? "und genau das hängts schon" versucht.

Bin für jede Hilfe dankbar.

Padavan
  Mit Zitat antworten Zitat
Benutzerbild von DymonD
DymonD

Registriert seit: 12. Mai 2004
Ort: Niederhöchstadt
116 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Programmteile in extra Unit auslagern

  Alt 14. Mär 2005, 20:58
Du musst das wie jede "normale" Prozedur auch deklarieren:
Delphi-Quellcode:
procedure Addiere(zahl1, zahl2: integer): integer;
begin
  // Mache was...
end;
Das Ganze aufrufen dann mit
c := Addiere(a, b); Eigentlich einfach
Das ist ja in dem Moment genauso, wie
StrToInt(Edit2.Text); Diese Prozedur ist ja nicht anders definiert
Dimitri K.
DymonD & Dimak are Ganxtas Of Paradise
http://www.dymond-online.de/gop
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#9

Re: Programmteile in extra Unit auslagern

  Alt 15. Mär 2005, 01:05
Delphi-Quellcode:
unit Unit_Sprache;

interface

implementation


var Variablename: integer;
begin

// Anweisung......

end;

end.
Zwischen der Variablenvereinbarung "Variablenname" und dem "Begin End" muß "procedure" stehen,
so hier:

Delphi-Quellcode:
var Variablename: integer;
PROCEDURE DeineProzedur;
begin

// Anweisung......
  Variablenname := 1;

end;
schöni
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Programmteile in extra Unit auslagern

  Alt 15. Mär 2005, 06:55
So langsam bin ich depremiert, scheinbar habe ich noch irgendwie ein Verständnisproblem.

Wenn ich die "externe" Unit in die Unit1 einbinde (und das habe ich jeweils im Interface sowohl als auch im Implementation Abschnitt versucht), dann bin ich trotzdem nicht in der Lage, eine Procedure in der "externen" Unit aufzurufen.


Habe die Korrektur von schöni auch schon mit drin.

Dennoch meckert Delphi beim Übersetzen, da es die Procedure von der externen Unit in der Unit1 nicht kennt. Die Variablen aus der Unit1 sind allerdings in der externen Unit bekannt, das klappt wenigstens schonmal.

Was allerdings auch nocht nicht funktioniert ist, wenn ich in der externen Unit auf Komponenten des Hauptformulars zugreifen will, dass er diese dann auch wieder nicht kennt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 Uhr.
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