![]() |
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 |
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:
//Edit: Ach und: Herzlich Willkommen in der DP :dp:
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. |
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? |
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; |
Re: Aus Unit2 ereignis in Unit1 aktivieren
Und wenn es sich um einfache Routinen (keine Methoden) handelt, kann man das so machen:
Delphi-Quellcode:
Nun kannst Du die Prozedur aus Unit2 heraus aufrufen, als ob sie dort deklariert wäre.
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; |
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:
Das ist ein Teil des Quelltextes aus Unit 1.
.
. . 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; . . . |
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; |
Re: Aus Unit2 ereignis in Unit1 aktivieren
Es ist immer so simpel... Danke. Bin noch nicht so richtig drin...
|
Re: Aus Unit2 ereignis in Unit1 aktivieren
Das wird wahrscheinlich trotzdem nicht funktionieren, wenn dann mit
Delphi-Quellcode:
Form1.Label1.Caption := 'Hallo';
|
Re: Aus Unit2 ereignis in Unit1 aktivieren
und: die Procedure-Bezeichnungen sollten übereinstimmen (Test<>Start)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 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 by Thomas Breitkreuz