Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi OnCreate aus weiterer Form heraus benutzen (https://www.delphipraxis.net/97372-oncreate-aus-weiterer-form-heraus-benutzen.html)

Svenkan 9. Aug 2007 13:25


OnCreate aus weiterer Form heraus benutzen
 
Folgendes: Ich habe einmal die THauptform, in der ein OnCreate-Ereignis festgelegt ist.
Nun möchte ich, sobald in TGrundeinstellungen das Fenster per Klick auf den 'OK'-Button geschlossen wird, dass das OnCreate-Ereignis aus der THauptform ausgelöst wird.
Ist dies möglich?

Muetze1 9. Aug 2007 13:29

Re: OnCreate aus weiterer Form heraus benutzen
 
Da du anscheinend nur erreichen willst den Code aus dem OnCreate erneut auszuführen:

Lege dir eine Methode an der den Code aus OnCreate enthält. Diese Methode rufst du nun einmal im OnCreate auf und einmal wenn der Dialog mit ok verlassen wurde/wird.

Svenkan 9. Aug 2007 13:36

Re: OnCreate aus weiterer Form heraus benutzen
 
Und wie erreiche ich, dass es sich dann auch auf THauptform auswirkt?
Wenn ich das Ganze in das OnClick-Ereignis schreibe, bezieht es sich doch auf TGrundeinstellungen..

oki 9. Aug 2007 14:08

Re: OnCreate aus weiterer Form heraus benutzen
 
Hi,

falsch verstanden.
Delphi-Quellcode:
procedure TForm1.MakeChanges;
begin
  // hier alles was zu tun ist
end;

procedure TForm1.FormCreate;
begin
  MakeChanges;
end;

procedure TForm1.Buttonclick;
begin
  Makechanges;
end;
oder an jeder anderen gewünschten stelle deines Codes.

Gruß oki

Svenkan 9. Aug 2007 14:17

Re: OnCreate aus weiterer Form heraus benutzen
 
Ah!
Also der Code bleibt in THauptform, dann bindet man diese in TGrundeinstellungen ein und lässt das dann im OnClick-Event ausführen??

/edit: In der Hauptform fuktionierts prima, nur sobald ich diese in TGrundeinstellungen einbeziehen will, sagt er mir, dass er 'GetInfos' nicht kennt..:(

oki 9. Aug 2007 19:08

Re: OnCreate aus weiterer Form heraus benutzen
 
Hi Svenkan.

Um es strukturiert zu machen ist der Ansatz schon mal richtig. Der Code für die Änderungen wird wie gezeigt in eine eigene Procedure deines Hauptfensters ausgelagert. Der Aufruf im FormCreate erfolgt wie gezeigt.

Ich gehe mal davon aus, dass dein Einstellungsfenster modal angezeigt wird. In der Ereignisbehandlung des Buttons zum Öffnen deines Einstellungsfensters machst du folgendes:
Delphi-Quellcode:
procedure THauptform.EinstellungButtonClick(Sender : TObject);
begin
  Grundeinstellungen.ShowModal; // Fenster grundeinstellungen öffnen
  IF Grundeinstellungen.ModalResult = mrOK then
    MakeChanges;
end;
In deinem Fenster Grundeinstellungen nimmst du in die Ereignisbehandlung deines OK-Buttons folgendes mit auf:
Delphi-Quellcode:
  ModalResult := mrOK;
Wenn du möchtest, dann kannst du für den Abbrechen-Button mrCancel zuweisen. Grundsätzlich geht es darum, dass Du ModalResult als öffentliche Eigenschaft je nach Aktion den passenden Wert zu weist. Öffentliche Eigenschaften deines Einstellungsfensters kannst du dann abrufen und auswerten (siehe Bsp.).

Gruß Oki

Svenkan 10. Aug 2007 12:38

Re: OnCreate aus weiterer Form heraus benutzen
 
Hey Oki!
Danke für deinen Tipp!
Leider funktioniert es nicht, sprich: Beim Schließen per Klick auf OK, führt er es nicht aus. :(

Muetze1 10. Aug 2007 12:45

Re: OnCreate aus weiterer Form heraus benutzen
 
Zitat:

Zitat von Svenkan
Leider funktioniert es nicht, sprich: Beim Schließen per Klick auf OK, führt er es nicht aus. :(

Mit dem Debugger mal im OnClick des Buttons gestanden und geschaut ob er diese Zuweisung von ModalResult (wie oben angegeben) ausführt?

Svenkan 10. Aug 2007 13:22

Re: OnCreate aus weiterer Form heraus benutzen
 
Zitat:

Zitat von Muetze1
Zitat:

Zitat von Svenkan
Leider funktioniert es nicht, sprich: Beim Schließen per Klick auf OK, führt er es nicht aus. :(

Mit dem Debugger mal im OnClick des Buttons gestanden und geschaut ob er diese Zuweisung von ModalResult (wie oben angegeben) ausführt?

Zumindestens geht er drüber, ohne einen Fehler auszugeben.

oki 10. Aug 2007 13:34

Re: OnCreate aus weiterer Form heraus benutzen
 
Poste mal den Code aus deinem OK-button.

Svenkan 10. Aug 2007 13:39

Re: OnCreate aus weiterer Form heraus benutzen
 
Ist aber nicht ganz aufgeräumt. ^^

Da mein Öffnungs-Code etwas abweicht:

Delphi-Quellcode:
procedure THauptform.Grundeinstellungen1Click(Sender: TObject);
begin
 ShowGeneralSettings;
   if Grundeinstellungen.ModalResult = mrOK then
    Datenneuladen1.OnClick(Datenneuladen1);
end;
Und hier OK-Button:

Delphi-Quellcode:
procedure TGrundeinstellungen.BitBtn2Click(Sender: TObject);
var  Ini: TIniFile;
      sj: String;
begin
  if CbSchuljahr.ItemIndex=0 then sj:='06_07.dbf'
  else if CbSchuljahr.ItemIndex=1 then sj:='07_08.dbf'
  else if CbSchuljahr.ItemIndex=2 then sj:='08_09.dbf';

  try
   Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'conf.ini');
   Ini.WriteString('Grundeinstellungen','sVP-Pfad',EdPath.text);
   Ini.WriteString('Grundeinstellungen','sVP-Schuljahr',sj);
   Ini.WriteBool('Grundeinstellungen','HTML-Plan übertragen',CBHTML.Checked);
   if RB1.Checked=TRUE then Ini.WriteInteger('Grundeinstellungen','Zeitraum HTML-Übertragung',900)
   else if RB2.Checked=TRUE then Ini.WriteInteger('Grundeinstellungen','Zeitraum HTML-Übertragung',3600)
   else if RB3.Checked=TRUE then Ini.WriteInteger('Grundeinstellungen','Zeitraum HTML-Übertragung',(StrToInt(Edit1.Text)*60));
   Ini.WriteBool('Grundeinstellungen','Tageskopie erstellen',CBCopy.Checked);
   Ini.WriteBool('Grundeinstellungen','Lehrerplan hochladen',CBLehrerplan.Checked);
   if RBSortOrder1.Checked=TRUE then Ini.WriteString('Sortierung','HTML-Plan','S')
   else Ini.WriteString('Sortierung','HTML-Plan','KLASSEN');
   Ini.WriteBool('Grundeinstellungen','höher als Build 3',RBV4.Checked);
   Ini.WriteBool('Grundeinstellungen','Klassenbänder',RBAll.Checked);
  finally
    Ini.Free;
  end;

  ModalResult := mrOK;
 //ShowMessage('Bitte starten Sie das Programm neu, damit die Änderungen wirksam werden!');
end;

Svenkan 12. Aug 2007 14:14

Re: OnCreate aus weiterer Form heraus benutzen
 
Keiner 'ne Idee?

Muetze1 12. Aug 2007 14:24

Re: OnCreate aus weiterer Form heraus benutzen
 
Zitat:

Zitat von Svenkan
Da mein Öffnungs-Code etwas abweicht:

Delphi-Quellcode:
procedure THauptform.Grundeinstellungen1Click(Sender: TObject);
begin
 ShowGeneralSettings;
   if Grundeinstellungen.ModalResult = mrOK then
    Datenneuladen1.OnClick(Datenneuladen1);
end;

Warum weicht er denn ab? Und warum hast du ihn abweichend gemacht? So rufst du schliesslich den Dialog nicht modal auf. Also: Schmeiss deine Show und Hide/Close Aufrufe bei Grundeinstellungen raus und rufe in der Routine wie oben geschrieben ShowModal auf und vergleiche das auf mrOk.

Svenkan 12. Aug 2007 14:29

Re: OnCreate aus weiterer Form heraus benutzen
 
/edit: OK, nu funktionierts!
Danke. ;)


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