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/)
-   -   Delphi Arbeit mit Units (https://www.delphipraxis.net/135605-arbeit-mit-units.html)

foerster7892 14. Jun 2009 07:42


Arbeit mit Units
 
Ich wollte mit mehreren Units auf der selben Oberfläche arbeiten und wollte fragen ob man mit der 2.Unit auch auf Elemente der Oberfläche zugreifen kann also einem Button das ich die normale "procedure TForm1.Button2Click(Sender:TObject)" nutzen kann oder eine Ausgabe auf ein Label, ne Listbox etc. und wenn nicht kann man irgendwie nen Unterprogramm aus Unit2 in Unit1 aufrufen.
(wie ihr merkt hab ich kein Plan von der Arbeit mit Units vllt. könnt ihr mir auch gleich noch nen link zu nem Turtorial geben)

Hoffe ihr könnt mir weiterhelfen
thx before
foerster7892

himitsu 14. Jun 2009 08:08

Re: Arbeit mit Units
 
trag im Implementation-Abschnitt
Delphi-Quellcode:
Uses Unit1;
ein und schon kannst du drauf zugreifen

SimStar001 14. Jun 2009 09:02

Re: Arbeit mit Units
 
macht das der comipler nciht selbst?

himitsu 14. Jun 2009 09:05

Re: Arbeit mit Units
 
nein

Der trägt die neu erstellten Units nur im Projekt (der .dpr) automatisch ein, aber nicht in andere Units.

foerster7892 14. Jun 2009 10:11

Re: Arbeit mit Units
 
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm4 = class(TForm)
      Button1: TButton;
      Label1: TLabel;
    private
      { Private-Deklarationen }
    public
      { Public-Deklarationen }

    end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

end.
---------------------------------------------------------------------------------------------------------------------------
Delphi-Quellcode:
unit Anzeigen;

interface

uses Unit1;

procedure Button1Click(Sender: TObject);

implementation



procedure Button1Click(Sender: TObject);
var a:string;
begin
  Form1.Label1.caption:='hallo';
end;

end.

mit diesem Beispiel wollte ich es probieren aber er startet und wenn ich auf den button klicke macht er nichts. Wieso?

mkinzler 14. Jun 2009 10:22

Re: Arbeit mit Units
 
Button1Click muss eine Methode sein. Und diese muss dann mit dem onClick-Event des Buttons verbunden werden.

thkerkmann 14. Jun 2009 10:32

Re: Arbeit mit Units
 
Hi,

also ich finden deinen Ansatz eher unglücklich.

Ziel der Unit mit dem Formular ist doch, alle Aktionen hier auflaufen zu lassen.
Es macht dann schon eher Sinn, aus den entsprechenden "OnClick" Methoden die Arbeit in einer anderen Unit stattfinden zu lassen, die Ergebnisse sollten dann aber wieder in der Formular-Unit auf das Formular gebracht werden.
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm4 = class(TForm)
      Button1: TButton;
      Label1: TLabel;
      procedure Button1OnClick(Sender:TObject);
    private
      { Private-Deklarationen }
    public
      { Public-Deklarationen }

    end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1OnClick(Sender:tObject);
begin
  Ergebnis := unit2.BerechneIrgendwas (); // <<<< Berechnung ausgelagert
  Label1.Caption := FormatierteAusgabe (Ergebnis); // <<<< das ist nur ein Beispiel
end;

end.
So bleibt die Formularunit schön schlank, und die Berechnung kann man vielleicht noch anderweitig gebrauchen.

Trenne Darstellung (Eingabe/Ausgabe) von Bearbeitung, aber nicht: verteile Ein/Ausgabe auf verschiedene Module.

Gruss

jfheins 14. Jun 2009 10:33

Re: Arbeit mit Units
 
afaik unterstützt Delphi noch keine partial classes sodass man die Klasse TForm1 in einer Unit vollständig implementieren muss.

Also nichts mit "procedure TForm1.Button2Click(Sender:TObject)" in Unit2 ;)

2 mögliche Workarounds:
:arrow: In Unit2 eine eigene Klasse definieren, die dann die Mezhoden implementiert. Problem: Es wird evtl. eine nicht unerhebliche Menge an Schnittstellenfunktionen nötig werden oder alles wir public gemacht.

:arrow: In Unit2 nur den Code auslagern, in normale Funktionen. In Unit1 dann nur Eventhandler, die legendlich die Funktionen aus Unit2 aufrufen.

Mich würde erstmal interessieren: Warum möchtest du das Formular in 2 Units aufteilen?

mkinzler 14. Jun 2009 10:34

Re: Arbeit mit Units
 
Zitat:

Ziel der Unit mit dem Formular ist doch, alle Aktionen hier auflaufen zu lassen.
wenn man an MVC denkt eher nicht

thkerkmann 14. Jun 2009 10:38

Re: Arbeit mit Units
 
Zitat:

Zitat von mkinzler
Zitat:

Ziel der Unit mit dem Formular ist doch, alle Aktionen hier auflaufen zu lassen.
wenn man an MVC denkt eher nicht

Das kann man jetzt philosophisch ausarbeiten, und trotzdem würde ich dir nicht zustimmen.
MVC bedeutet in keiner Weise, dass ich M, V und C in verschieden Module auslagern muss.
Es kommt drauf an wie ich es implementiere. Und Delphi bietet mit seinem Ansatz durchaus die Möglichkeit diesem Paradigma gerecht zu werden, ohne alles in Stücke zu hauen. :lol:
Es wird unseren Threadersteller auch jetzt nicht weiterhelfen, er befindet sich noch auf einem anderen Level denke ich...
(ohne im jetzt zu nahe treten zu wollen)

Gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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