Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prozedur in mehreren Formularen verwenden (https://www.delphipraxis.net/69152-prozedur-mehreren-formularen-verwenden.html)

Sebastian815 10. Mai 2006 23:29


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

Luckie 10. Mai 2006 23:47

Re: Prozedur in mehreren Formularen verwenden
 
Übergib doch einfach eine Variable vom Typ TForm.

Hansa 11. Mai 2006 00:17

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.

Luckie 11. Mai 2006 07:04

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.

fkerber 11. Mai 2006 07:16

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

Sharky 11. Mai 2006 07:30

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:
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.
Das ist die zentrale Procedure und wird dann so in den Forms aufgerufen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  EditClear([Edit1,Edit2,Edit3]);
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  EditClear([Edit1,Edit3]);
end;

Hansa 11. Mai 2006 09:26

Re: Prozedur in mehreren Formularen verwenden
 
Zitat:

Zitat von Luckie
..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.

Eben nicht ! Macht er es so, dann sieht sein Formular lediglich so aus :
Delphi-Quellcode:
TMyClass2 = Class (TMyClass);
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 :

Delphi-Quellcode:
TMyClass4 = Class (TMyClass3);
Die Prozedur ist bereits von TMyClass geerbt und kann zentral dort geändert werden.

Sebastian815 11. Mai 2006 22:34

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

Hansa 11. Mai 2006 23:37

Re: Prozedur in mehreren Formularen verwenden
 
Zitat:

Zitat von Sebastian815
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...

Dann setze es einfach um. Mache möglichst früh alle Einstellungen. Farben, die Ereignis-Prozeduren, die Größen der Form usw. Paßt was nicht, dann eben weg damit, oder erweitern. Der Unterschied liegt nur in : neu -> weitere, Form rauspicken anstatt neu -> Form und alles neu machen.

nat 11. Mai 2006 23:53

Re: Prozedur in mehreren Formularen verwenden
 
Zitat:

Zitat von Sebastian815
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.

Delphi-Quellcode:
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;
die unit in der diese procedure drin steht mußte dann in die deiner forms einbinden
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 00:38 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