![]() |
Prozedur in mehreren Formularen verwenden
Hallo,
habe folgendes Problem: Ich habe ein Hauptformular, von dem ich auf drei verschiendene Formulare (Form1 bis Form3) über Buttons zugreife. In diesen 3 Formularen benötige ich eine identische Prozedur. In den Prozeduren werden auch Edit-Felder angesprochen, die in allen Formularen den gleichen Namen haben (z.B. Edit1). Um diese Prozedur nicht 3x schreiben zu müsse, würde ich sie gerne in allen Formularen verwenden können und sie im Hauptformular hinterlegen (Eintrag in der uses-Liste ist vorhanden). Habe jetzt allerdings das Problem, dass ich die Felder mit dem Formularnamen ansprechen muss: (Form1.Edit1.Text; Form2.Edit1.Text; usw.) Durch die Angabe des Formulars geht leider die "Allgemeingültigkeit" verloren. Gibt es eine Möglichkeit den Formularnamen als Parameter zu übergeben oder dies ganz zu umgehen?? Ich hoffe ihr könnt mir helfen. Gruß Sebastian |
Re: Prozedur in mehreren Formularen verwenden
Übergib doch einfach eine Variable vom Typ TForm.
|
Re: Prozedur in mehreren Formularen verwenden
Das nimmt Dir Delphi alles ab. Rechter Mausklick -> Objektablage. Von diesem Formulat ableiten, so ähnlich wie Luckie sagt. Prozedur vorher definieren und fertig. Die ist dann bereits vorhanden.
|
Re: Prozedur in mehreren Formularen verwenden
Was hat das jetzt mit der Objektablage zu tun wenn cih ene Prozedur für drei Formulare verallgemeinern will? Benutzt er so wie du vorschlägst die Objektablage hat er die Prozedur doch wieder dreimal im Programm drinne, nämlich in der Unit zu jedem Formular. Und gerade diese Redundanz will er vermeiden.
|
Re: Prozedur in mehreren Formularen verwenden
Hi!
Eigentlich kannst du die Angabe des Formnamens auch weglassen, da du ja nicht das Form direkt ansprechen willst, sondern nur Edits. IMHO wäre es also sinnvoller, ihm die Edits zu übergeben, anstatt ihm ein Formular zu geben, auf dem du dann Edit1 ansprichst...
Delphi-Quellcode:
procedure machwas(E1, E2: TEdit);
//Aufruf Machwas(Form1.Edit1, Form1.Edit2); //oder Machwas(Form2.Edit1, Form2.Edit2); Ciao Frederic |
Re: Prozedur in mehreren Formularen verwenden
Hai Sebastian,
ersteinmal: "Herzlich Willkommen in der Delphi-PRAXiS" :hi: Wie fkerber schon sagte kann es besser sein wenn Du die Edits als Parameter übergibst. Wenn Du das ganze dann noch als Array of TEdit machst kannst Du auch eine unterschiedliche Anzahl übergeben. Aber genau kann man das nur sagen wenn man weiss was Du machen möchtest ;-) Hier mal ein Stück code als Beispiel:
Delphi-Quellcode:
Das ist die zentrale Procedure und wird dann so in den Forms aufgerufen:
unit U_Global;
interface uses Forms, StdCtrls; procedure EditClear(aEdits: array of TEdit); implementation procedure EditClear(aEdits: array of TEdit); var ndx: Integer; begin for ndx := Low(aEdits) to High(aEdits) do begin aEdits[ndx].Clear; end; end; end.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin EditClear([Edit1,Edit2,Edit3]); end; procedure TForm2.Button1Click(Sender: TObject); begin EditClear([Edit1,Edit3]); end; |
Re: Prozedur in mehreren Formularen verwenden
Zitat:
Delphi-Quellcode:
Alles was für die Form TMyClass definiert ist, das gilt für alle Abkömmlinge genauso. Egal ob Prozedur oder ein visuelles Steuerelement. Braucht er für TMyClass3 aufwärts noch einen Button dann soll er ihn da drauflegen. Dann sieht so aus :
TMyClass2 = Class (TMyClass);
Delphi-Quellcode:
Die Prozedur ist bereits von TMyClass geerbt und kann zentral dort geändert werden.
TMyClass4 = Class (TMyClass3);
|
Re: Prozedur in mehreren Formularen verwenden
Hallo zusammen,
erst einmal danke für die vielen Reaktionen. Eine Varianble vom Typ TForm zu übergeben, habe ich bereits versucht, bin aber dran gescheitert. Vielleicht kann ja jemand ein Stück Code posten, wie ich das aufbauen muss. Die Edits zu übergeben, find ich für meinen Fall nicht ganz so praktisch, da es sich um ca. 50 Felder handelt, was dann auch nicht wirklich übersichtlich ist. Der Tipp mit der Objektanlage und der Vererbung des Formulars gefällt mir eigentlich ganz gut. Meine Formulare weisen jedoch ein paar Unterschiede auf. (Logisch, sonst würde eins reichen...) Daher müsste ich ein 4. Formular anlegen, dass lediglich die Gemeinsamkeiten der anderen 3 Formulare beeinhaltet. Mir würde eine Möglichkeit reichen einzelne Prozeduren zu vererben, falls es so etwas gibt. Damit wären wir wahrscheinlich wieder bei der Übergabe einer Variablen vom Typ TForm... Wär schön, wenn euch noch gute Ideen einfallen. Ich werd morgen mal die Methode mit der Vererbung probieren. Wisst ihr, ob die Vererbung mit QuickReports auch möglich ist?? Gruß Sebastian |
Re: Prozedur in mehreren Formularen verwenden
Zitat:
|
Re: Prozedur in mehreren Formularen verwenden
Zitat:
Delphi-Quellcode:
die unit in der diese procedure drin steht mußte dann in die deiner forms einbinden
procedure MyEditProc(frm: TForm);
var i: integer; c: TComponent; begin for i:=1 to 2 do begin c := frm.FindComponent('Edit'+IntToStr(i)); if (c <> nil) and (c is TEdit) then TEdit(c).Clear; end; end; und dann rufste die einfach so auf
Delphi-Quellcode:
//in Form1
MyEditProc(Form1); //in Form2 MyEditProc(Form2); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 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