Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Aus Unit2 ereignis in Unit1 aktivieren (https://www.delphipraxis.net/133925-aus-unit2-ereignis-unit1-aktivieren.html)

KahPee 12. Mai 2009 09:33


Aus Unit2 ereignis in Unit1 aktivieren
 
Hallo,
ich bin recht neu bei Delphi und habe ein Problem mit einer ziemlichen Banalität, aber ich konnte nirgends eine Lösung für das Problem finden.
Ich habe zwei Formulare mit den dazugehörigen Units. Form2 ist ein Formular welches insgesamt drei Abfragen macht. Nun möchte ich, dass wenn man in Form2 auch einen Button (OK) klickt, wieder zu Form1 gewechselt wird: Das ist soweit kein Problem, da Form1 immer noch offen ist (Form2 wurde mit Showmodal aktiviert), auch habe ich es geschafft, dass Form2 sich selbst beim Klicken auf "OK" schliest (Close;) allerdings schaffe ich es nicht in die zu Form2 gehörende Unit (Unit2) einen Befehl zu schreiben, der beim Klicken auf "OK" (in Form2) ein Ereignis für Form1 (also in Unit1) startet.
Ich hoffe ich habe mich halbwegs verständlich ausgedrückt, sodass man mir helfen kann. Vielen Dank schon mal im Vorraus

KahPee

WIng2005 12. Mai 2009 09:48

Re: Aus Unit2 ereignis in Unit1 aktivieren
 
Hast du die beien Formulare untereinander bekanntgemacht, will heißen die zugehörigen units eingebunden?
Schau dir mal folgendes an:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
uses unit2;
{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.text:='TEST';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
application.CreateForm(TForm2,form2);
form2.Show;
end;

end.
////////////////////////////////////////////////////
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation
uses unit1;  //////////////<-wichtig
{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
form1.Button2.Click;
end;

end.
//Edit: Ach und: Herzlich Willkommen in der DP :dp:

KahPee 12. Mai 2009 09:51

Re: Aus Unit2 ereignis in Unit1 aktivieren
 
Oh das war ja einfach, das mit dem "Uses" habe ich bei beiden drin, wenn ich manuell einen Button in Form1 starte funktioniert das ja auch..
aber im Prinzip muss ich allen Aktionen nur ein "Form1." vorstellen und dann kann ich die programmieren als wenn sie in Unit1 geschrieben werden. Das ist so richtig oder? Funktioniert das mit allen Elementen? auch mit Funktionen und Prozeduren?

Vielen Dank für die Hilfe

Kahpee


Edit: Ich habe das gerade mal versucht.. Wie deklariere ich denn eine Prozedur in Unit1 so, dass sie in Unit2 aufgerufen werden kann. Und wie rufe ich sie in Unit 2 auf?

WIng2005 12. Mai 2009 10:02

Re: Aus Unit2 ereignis in Unit1 aktivieren
 
Du kannst so auf alle öffentlichen Methoden eines anderen Objektes zugreifen. Das Ganze ist auch in einem Block möglich:
Delphi-Quellcode:
with form1 do Begin
button1.click;
edit1.test:='xcvfgb';
//usw.
end;

DeddyH 12. Mai 2009 10:22

Re: Aus Unit2 ereignis in Unit1 aktivieren
 
Und wenn es sich um einfache Routinen (keine Methoden) handelt, kann man das so machen:
Delphi-Quellcode:
unit Unit1;

interface

...

procedure SagHallo(const Name: string); //Definition eines Prototyps im interface-Abschnitt

implementation

procedure SagHallo(const Name: string); //Implementation im implementation-Abschnitt
begin
  ShowMessage(Format('Hallo %s',[Name]));
end;
Nun kannst Du die Prozedur aus Unit2 heraus aufrufen, als ob sie dort deklariert wäre.

KahPee 12. Mai 2009 10:43

Re: Aus Unit2 ereignis in Unit1 aktivieren
 
So das Problem hat nichts mher mit dem Threadtitel zu tun, aber egal.

Ich habe jetzt wie du beschrieben hast eine Prozedur deklariert, allerdings wirft er mir beim Compilieren immer eine Fehlermeldung raus. Hier der Code, die entsprechende Zeile ist markiert:

Delphi-Quellcode:
.
.
.
var a: boolean;

procedure Test;


implementation

Uses Unit2;


{$R *.DFM}

procedure Start;
while a=true Do //[Fehler] Unit1.pas(60): Deklaration erwartet, aber 'WHILE' gefunden
         begin
          Label1.Caption:='hallo';
         end;
end;
.
.
.
Das ist ein Teil des Quelltextes aus Unit 1.

WIng2005 12. Mai 2009 10:45

Re: Aus Unit2 ereignis in Unit1 aktivieren
 
Ein Begin fehlt:

Delphi-Quellcode:
procedure Start;
Begin
while gameon=true Do
         begin
          Label1.Caption:='hallo';
         end;
end;

KahPee 12. Mai 2009 10:49

Re: Aus Unit2 ereignis in Unit1 aktivieren
 
Es ist immer so simpel... Danke. Bin noch nicht so richtig drin...

DeddyH 12. Mai 2009 10:51

Re: Aus Unit2 ereignis in Unit1 aktivieren
 
Das wird wahrscheinlich trotzdem nicht funktionieren, wenn dann mit
Delphi-Quellcode:
Form1.Label1.Caption := 'Hallo';

WIng2005 12. Mai 2009 10:55

Re: Aus Unit2 ereignis in Unit1 aktivieren
 
und: die Procedure-Bezeichnungen sollten übereinstimmen (Test<>Start)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 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