![]() |
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 |
Re: Arbeit mit Units
trag im Implementation-Abschnitt
Delphi-Quellcode:
ein und schon kannst du drauf zugreifen
Uses Unit1;
|
Re: Arbeit mit Units
macht das der comipler nciht selbst?
|
Re: Arbeit mit Units
nein
Der trägt die neu erstellten Units nur im Projekt (der .dpr) automatisch ein, aber nicht in andere Units. |
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? |
Re: Arbeit mit Units
Button1Click muss eine Methode sein. Und diese muss dann mit dem onClick-Event des Buttons verbunden werden.
|
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:
So bleibt die Formularunit schön schlank, und die Berechnung kann man vielleicht noch anderweitig gebrauchen.
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. Trenne Darstellung (Eingabe/Ausgabe) von Bearbeitung, aber nicht: verteile Ein/Ausgabe auf verschiedene Module. Gruss |
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? |
Re: Arbeit mit Units
Zitat:
|
Re: Arbeit mit Units
Zitat:
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 10:55 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