Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Funktionsaufruf in mehreren Forms (https://www.delphipraxis.net/196696-funktionsaufruf-mehreren-forms.html)

DomPerle 10. Jun 2018 14:22


Funktionsaufruf in mehreren Forms
 
Ich habe mir die schöne Routine kopiert.
Meine Anwendung besteht aus mehreren Formularen (Form1 bis Form4)
In allen units soll diese Funktion verwendet werden. Ich habe mir nun gedacht, daß ich in der main-Form (Form1) einmal die Funktion erstelle und sie dann im gesamten Projekt an mehreren Stellen aufrufen kann. Das muß doch sicher möglich sein. Das ist doch das Prinzip von Unterprogrammen. Aber glaubt mir ich kriegs nicht hin!!

Hier der Code der unit4
Delphi-Quellcode:
implementation

uses Konvert_Unit1;

{$R *.DFM}
function MyShowMessage(const AMessage: string; AFontSize: Integer): Integer;
var
  dlg: TForm;
begin
  dlg := CreateMessageDialog(AMessage, mtInformation, [mbOK]);
  try
    dlg.Position := poScreenCenter;
    dlg.ScaleBy(AFontSize, dlg.Font.Size);
    Result := dlg.ShowModal;
  finally
    dlg.Free;
  end;
end;

procedure TForm4.Button3Click(Sender: TObject);

var
prog : String;
Datei1, Datei2: String;
begin
   Prog:= Form1.Programm;
   Datei1 := 'C:\hdh\Deckel\'+prog;
   Datei2 := 'C:\DOS_PROG\DDI3\DAT\%P99.dat';
   CopyFile(PChar(Datei1),PChar(Datei2),false);
   MyShowMessage('Übertragung durchgeführt', 12);
end;

KodeZwerg 10. Jun 2018 14:39

AW: Funktionsaufruf in mehreren Forms
 
Erstelle Dir eine Helfer Unit, da machst Du alle Hilfs-Funktionen rein.
Binde in jeder FormUnit diese HelferUnit rein damit die Funktion auch genutzt werden kann.

Ps: Die Helfer-Unit nicht auf Formulare zugreifen lassen, das mach in den Formularen mit der Auswertung der Hilfs Unit.

KodeZwerg 10. Jun 2018 14:57

AW: Funktionsaufruf in mehreren Forms
 
Oder ist Deine Frage = "Wie erstelle ich eine Helfer Unit und binde diese ein?"
Delphi-Quellcode:
unit DomPerleHelfer;

interface

uses
// hier trag alles ein was diese Unit für ihre sub-funktionen benötigt.
// ich habe nicht getestet auf welche Units deine MyShowMessage basiert.

function MyShowMessage(const AMessage: string; AFontSize: Integer): Integer;

implementation

function MyShowMessage(const AMessage: string; AFontSize: Integer): Integer;
var
  dlg: TForm;
begin
  dlg := CreateMessageDialog(AMessage, mtInformation, [mbOK]);
  try
    dlg.Position := poScreenCenter;
    dlg.ScaleBy(AFontSize, dlg.Font.Size);
    Result := dlg.ShowModal;
  finally
    dlg.Free;
  end;
end;

end.
Ergänze hier das Uses !
Binde DomPerleHelfer in jeder Unit mit der Uses Anweisung ein wo Du MyShowMessage() brauchst.
Fertig.

DomPerle 10. Jun 2018 15:08

AW: Funktionsaufruf in mehreren Forms
 
Der Tipp ist gut, ich werde ihn versuchen, leider heute nicht mehr.
Was mich allerdings irritiert ist, die Form1unit1 ist überall schon eingebunden, warum funktioniert es nicht, wenn alle Funktionen in der Form1unit1 definiert werden?

KodeZwerg 10. Jun 2018 15:11

AW: Funktionsaufruf in mehreren Forms
 
Glaskugel sagt: weiß nicht ohne Code zu kennen aber wahrscheinlich ein Benutzerfehler.

zeras 10. Jun 2018 16:17

AW: Funktionsaufruf in mehreren Forms
 
Zitat:

Zitat von DomPerle (Beitrag 1404443)
Der Tipp ist gut, ich werde ihn versuchen, leider heute nicht mehr.
Was mich allerdings irritiert ist, die Form1unit1 ist überall schon eingebunden, warum funktioniert es nicht, wenn alle Funktionen in der Form1unit1 definiert werden?

Weil deine Funktion im Implementation Abschnitt steht. Damit wird sie nicht gefunden, da nicht global sichtbar.

So könnte man das machen, wobei kein guter Programmierstil.

Delphi-Quellcode:
unit Unit21;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button3: TButton;
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    function MyShowMessage(const AMessage: string; AFontSize: Integer): Integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


function TForm1.MyShowMessage(const AMessage: string; AFontSize: Integer): Integer;
var
  dlg: TForm;
begin
  dlg := CreateMessageDialog(AMessage, mtInformation, [mbOK]);
  try
    dlg.Position := poScreenCenter;
    dlg.ScaleBy(AFontSize, dlg.Font.Size);
    Result := dlg.ShowModal;
  finally
    dlg.Free;
  end;
end;
PS: Bitte deinen Code in Delphi Tags einschliessen, da der Code dann besser sichtbar ist.

KodeZwerg 10. Jun 2018 16:59

AW: Funktionsaufruf in mehreren Forms
 
Es ist eine Frage des Geschmacks ob man Hilfsfunktionen kreuz und quer in UnitX.pas dateien verteilt oder an einem Ort sammelt um Hilfsfunktionen lediglich über eine Einheitliche Unit abfragt.
In Form4 würde ich nicht auf die Idee kommen ein "Form1.MyShowMessage()" aufzurufen, bzw *1) würde ich in Form4 auch keine Form1 einbinden, egal, macht wie Ihr wollt solange es für Euch gut ist :thumb:

*1) nur wenn ich tatsächlich Vorhabe mit Form1 etwas anzustellen, ansonsten generell nicht.

HolgerX 11. Jun 2018 04:16

AW: Funktionsaufruf in mehreren Forms
 
Hmm..

Ich würde eine Basis-Form erstellen, welche nur diese für alle verwendbaren Funktionen enthält, und dann alle anderen von dieser ableiten.

Somit hat jedes (abgeleitete) Formular Zugriff auf diese abgeleiteten Funktionen.

DomPerle 12. Jun 2018 11:42

AW: Funktionsaufruf in mehreren Forms
 
Ich habe es jetzt über eine eigene Unit gelöst. Ich glaube, das ist am elegantesten.
Nochmal meinen herzlichsten Dank


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 Uhr.

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