![]() |
Procedure mit TForm1 in extra Unit?
Hallo!
Ich habe eine kurze Frage, irgendwie bin ich grade zu deppert dafür. Ich habe z.B. folgenden Aufbau: TMainForm:
Delphi-Quellcode:
Nun habe ich eine Unit, wie folgt:
unit Mainform;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics [...]; type TMainFrm = class(TForm) [...] private [...] public [...] end; var MainFrm: TMainFrm; implementation uses UnitXYZ, [...]; {$R *.dfm}
Delphi-Quellcode:
Die Procedure wird aus verschiedenen anderen Forms ausgeführt. Allerdings hätte ich gerne das "with MainForm do begin ... end;" weg; die gesamte Procedure soll sich eben auf "TMainForm" beziehen. Ich bekomme es nur nicht hin... :(
unit UnitXYZ;
interface procedure TuDas(NehmeDenString: String;); implementation uses MainForm [...]; procedure TuDas(NehmeDenString: String;); begin with MainFrm do begin [...] end; end; Kann mir jemand einen Tipp geben? Ich weiß, dass die Procedur irgendwie so aussehen muss:
Delphi-Quellcode:
Aber ich bekomm es eben nicht zum laufen, da die Procedure ja irgendwo nochmal deklariert werden muss... :(
procedure TMainFrm.TuDas(NehmeDenString: String;);
begin [...] end; |
Re: Procedure mit TForm1 in extra Unit?
Übergib doch die Form als Parameter
|
Re: Procedure mit TForm1 in extra Unit?
Hi,
versuch es doch mal mit
Delphi-Quellcode:
cu
with MainFrm do
Oliver |
Re: Procedure mit TForm1 in extra Unit?
Zitat:
Zitat:
|
Re: Procedure mit TForm1 in extra Unit?
Ich wollte nur damit sagen, dass das so nicht funktioniert, bzw. so definiert überflüssig ist ...
Zitat:
|
Re: Procedure mit TForm1 in extra Unit?
Doch tut es. ;)
Delphi-Quellcode:
...lässt nur eine Codezeile zu, die sich auf's MainForm bezieht...
with MainFrm do
Delphi-Quellcode:
...bezieht sich auf den gesamten Block zwischen begin und end... ;)
with MainFrm do begin [...] end;
Ich weiß, es ist sinnfrei, eine gesamte Procedure so "einzumauern", aber genau das versuche ich ja grade zu lösen^^ |
Re: Procedure mit TForm1 in extra Unit?
Zitat:
|
Re: Procedure mit TForm1 in extra Unit?
Zitat:
Was ist denn der tiefere Sinn dafür? Entweder ich habe ein proc oder func, die direkt mit einem Formular verknüpft ist, dann nehme ich die in die Klasse direkt mit auf, oder die ist generisch, dann meinetwegen in eine eigene Unit und dann das Formular als Parameter mit. Und trotzdem wirst du dann mit with ... do arbeiten werden wollen (nicht müssen). cu Oliver |
Re: Procedure mit TForm1 in extra Unit?
Zitat:
Zitat:
Wenn ich eine eigene Funktion direkt in MainForm eingebe, reicht es, wenn ich die Procedure nochmals im "private" deklariere. *denk* |
Re: Procedure mit TForm1 in extra Unit?
Ja, reicht.
|
Re: Procedure mit TForm1 in extra Unit?
Zitat:
|
Re: Procedure mit TForm1 in extra Unit?
Achso, Du willst eine Methode von MainForm (in Mainform.pas) in Unit2.pas reinstecken? Das geht nicht. :zwinker:
|
Re: Procedure mit TForm1 in extra Unit?
Ja, wie gesagt: Ich habe in der Unit "UnitXYZ" eben eine Procedure. Zum Bleistift:
Delphi-Quellcode:
Wie man sieht, beziehen sich alle Befehle in der Prozedur auf Komponenten/Dinge aus der Unit MainForm (bzw. dem Form MainFrm). Die Procedure wird eben in den unterschiedlichsten Units aufgerufen. Bei unzähligen Prozeduren, die alle ein "with...end" enthalten, kommen da einige Zeilen zusammen.
procedure TuDies(NehmeString: String);
begin with MainFrm do begin Button1.Caption := NehmeString; Label1.Caption := NehmeString; Caption:= NehmeString; end; end; Deswegen wollte ich eben eine Funktion basteln, die ohne den "with ... end"-Part auskommt... |
Re: Procedure mit TForm1 in extra Unit?
Das geht nur, wenn Du die Procedure zur Methode der Klasse machst und damit muss es wieder in der Unit von der MainForm stehen.
|
Re: Procedure mit TForm1 in extra Unit?
Wie schon gesagt,
wenn du für dein Formular - und zwar aussschließlich für dieses Formular und niemals ein anderes Formular - eine function oder procedure haben möchtest, dann gehören die in die Klassendefinition dieses einen Formulars und damit auch in die gleiche Unit wie dieses selbige oben genannte Formular. Als kleine Frage: Warum möchte man so etwas denn trennen? |
Re: Procedure mit TForm1 in extra Unit?
Delphi-Quellcode:
...und schon hast Du 2 Zeilen gespart, aber trotzdem mehr getippt.
procedure TuDies(NehmeString: String);
begin MainFrm.Button1.Caption := NehmeString; MainFrm.Label1.Caption := NehmeString; MainFrm.Caption:= NehmeString; end; Das was Du möchtest, geht nicht mit Delphi. |
Re: Procedure mit TForm1 in extra Unit?
Zitat:
Ist irgendwie für nix gut ... cu Oliver |
Re: Procedure mit TForm1 in extra Unit?
Zitat:
Zitat:
Ich habe recht viele Funktionen, die sich auf Komponenten auf dem Hauptform beziehen - alle mit unterschiedlichen Aufgaben"gebieten". Darum eben diese Auslagerung - 50++ Prozeduren und Funktionen in einer Unit sind eben etwas unübersichtlich. ;) |
Re: Procedure mit TForm1 in extra Unit?
Zitat:
Ein Programm gliedert sich wie folgt - Eingabe (interaktiv mit dem User) - Verarbeitung (gedaddel mit den schönen Platten, etc.) - Ausgabe (wieder mit dem User) Eingabe und Ausgabe ist die Aufgabe der Forms Verarbeitung eine Sache von Units (s. z.B. DatenModul in Delphi) cu Oliver |
Re: Procedure mit TForm1 in extra Unit?
Hmm, Logik sollte sowieso von der Oberfläche getrennt werden und nicht eine Trennung nach Funktion.
|
Re: Procedure mit TForm1 in extra Unit?
Zitat:
Das ist mal das verdeutlicht, was Oliver bzw. Manu geschrieben haben. |
Re: Procedure mit TForm1 in extra Unit?
Zitat:
|
Re: Procedure mit TForm1 in extra Unit?
Zitat:
Delphi-Quellcode:
oder meinetwegen
funtion TuWasUndGibEsZurück( var Daten : TDaten ) : boolean;
begin {Hier tue ich was mit den Daten} end;
Delphi-Quellcode:
oder
funtion TuWasUndGibEsZurück( Daten : TDaten; var Ergebnis : TErgebnis ) : boolean;
begin {Hier tue ich was mit den Daten und pack das in Ergebnis} end;
Delphi-Quellcode:
cu
funtion TuWasUndGibEsZurück( var Daten : TDaten ) : TErgebnis;
begin {Hier tue ich was mit den Daten und dann} RESULT := { das Ergebnis zurückliefern } end; Oliver |
Re: Procedure mit TForm1 in extra Unit?
Nur damit verdreifacht (oder noch mehr) sich ja die Anzahl der Funktionen... Wenn ich z.B. Name, Vorname und PLZ auslesen will, muss ich ja a) für jedes Feld eine Function schreiben und b) für jedes Feld die Funktion gesondert aufrufen...
|
Re: Procedure mit TForm1 in extra Unit?
ja, oder du schreibst eine entsprechende Klasse:
Delphi-Quellcode:
und die lässt du dir zurückgeben.
TDaten = record
Vorname : string; Nachname : string; PLZ : string; Ort : string; end; Wie ich schon sagte, mit entsprechenden und _geeigneten_ Schnittstellen cu Oliver |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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-2025 by Thomas Breitkreuz