Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Assistent-Probleme (https://www.delphipraxis.net/158390-assistent-probleme.html)

Dunkelbunt27 15. Feb 2011 17:27

Assistent-Probleme
 
Hallo Delphi-PRAXIS,

zu meinem Programm gibt es einen Assistenten, der als erste Unit fungiert.
Man startet also den Assistenten, dann kann man Einstellungen vornehmen und "Fortsetzen" oder Schließen(Rotes X oben rechts).
Das Problem ist nun, wenn ich Fortsetzen klicke, soll der Assistent verschwinden und das Hauptprogramm gestartet werden.
Das Problem ist, wenn der Assistent geschlossen wird, wird alles geshclossen, auch das Hauptprogramm.
Wenn der Assistent alleine geschlossen wird, also bevor man auf "Fortsetzen" klickt und das Hauptprogramm noch gar nicht gezeigt wird, ist das gut so.
Es reicht ja leider nicht aus nur den Assistenten unsichtbar zu machen, da er nach Programmschluss immernoch läuft...

Hat jemand eine Idee, wie ich beides unabhängig voneinander zeigen (Hauptprogramm.show;) und schließen (...?) kann, bzw. wie man auf die Einstellungen für das Rote X zugreifen kann?

FG Dunkelbunt

WM_CLOSE 15. Feb 2011 17:53

AW: Assistent-Probleme
 
Ich hätte folgenden Vorschlag:
Öffne den Quelltext des Projektes: Projekt->Quelltext anzeigen

Jetzt trage vor dem
Delphi-Quellcode:
CreateForm
-Aufruf deines Hauptformulares folgendes ein:
Delphi-Quellcode:
  DeinAssistent:=TDeinAssistent.Create(Application);
  try
    DeinAssistent.Parent:=Application;//<--Die Zeile ist vielleicht Murks - wenn ja dann entfernen
    DeinAssistent.ShowModal;//showModal liefert zurück mit welchem ModalResult dein Formular geschlossen wurde.
  finally
    DeinAssistent.Free;
  end;
Dann gehst du in die OnClick-Methode des "Fortsetzen-Buttons".
Dort trägst du am Ende folgendes ein:
Delphi-Quellcode:
self.ModalResult:=mrOk;//du könntest das abfragen s.oben // im abbrechen button ModalResult:=mrCancel
self.Close;

Dunkelbunt27 15. Feb 2011 18:03

AW: Assistent-Probleme
 
Leider kommt mit dem Vorschlag: "'Hauptprogramm.exe' kann nicht erstellt werden"...

Ich denke du bist davon ausgegangen, dass ich das Ganze in das Hauptprogramm reinschreibe, nicht?
Also praktisch vor dem Hauptprogramm dadurch den Assistenten aufrufe, richtig?

Ich starte jedenfalls erst den Assistenten.exe der starten dann auf Druck von "Fortsetzen" das Hauptprogramm.exe also Hauptprogramm.show, dann sehen ich beide Programme hintereinander.
...
Wenn ich es also in den Assistenten eintrage kommt der besagte Fehler, ich bin noch gar nicht bis zu dme Button vorgedrungen...

EDIT1: Ich konnte jetzt eine detailliertere Fehlermeldung bekommen:
"Diese Form des Methodenaufrufs ist nur für Klassennmethoden erlaubt..."
Delphi-Quellcode:
Assistent:=TAssistent.Create(Application); // muss ich Application ersetzen?
  try
    TAssistent.ShowModal;
  finally
    TAssistent.Free;
  end;

WM_CLOSE 15. Feb 2011 18:07

AW: Assistent-Probleme
 
OK: ich glaube ich habe dich falsch verstanden. Du hast also 2 Exen?
Dann Rate ich dir mal nach "Programm starten und auf beenden warten" zu suchen.

Ich dachte, du hättest 2 Formulare in einer Anwendung, sorry.

Oder soll der Assistent das Hauptprogramm starten? Dann schau dir MSDN-Library durchsuchenShellExecute oder MSDN-Library durchsuchenCreateProcess an

Dunkelbunt27 15. Feb 2011 18:08

AW: Assistent-Probleme
 
Danke, ich suche, kein Problem =D

EDIT1:
Ich habe nun doch nur 1ne Exe, kann also dienen Vorschlag probieren,..... Zum Glück, das andere klang etwas komplizierter...

WM_CLOSE 15. Feb 2011 18:12

AW: Assistent-Probleme
 
[ot]
Das mit dem Bearbeiten hat offensichtlich keinen Sinn
[/ot]

Zitat:

Assistent:=TAssistent.Create(Application); // muss ich Application ersetzen?
try
TAssistent.ShowModal;
finally
TAssistent.Free;
end;
Du solltest

Delphi-Quellcode:
TAssistent.ShowModal;
durch
Delphi-Quellcode:
Assistent.ShowModal
ersetzen, denn du willst ja die Instanz (Assistent)und nicht die Klasse (TAssistent)

Dunkelbunt27 15. Feb 2011 18:40

AW: Assistent-Probleme
 
Okay, momentan sieht es so aus:

Projekt-Quelltext
Delphi-Quellcode:
  Application.Initialize;
  Application.MainFormOnTaskbar := True;

  Assistent:=TAssistent.Create(Application);
  try
  Assistent.ShowModal;
  finally
  Assistent.Free;
  end;

  Application.CreateForm(TAssistent, Assistent);
  Application.CreateForm(THauptprogramm, Hauptprogramm);
  Application.Run;
Fortsetzen Button
Delphi-Quellcode:
 self.ModalResult:=mrOk;
  self.Close;

Abbrechen-Button
Delphi-Quellcode:
ModalResult:=mrCancel
Es startet ohne Fehler, aber wnen ich auf Fortsetzen klicke, dann schließt sich der Assistent und öffnet sich erneut...
wie kann ich statt 2x dem Assistenten das Hauptprogramm starten?

himitsu 15. Feb 2011 18:49

AW: Assistent-Probleme
 
Zitat:

Zitat von Dunkelbunt27 (Beitrag 1081965)
aber wnen ich auf Fortsetzen klicke, dann schließt sich der Assistent und öffnet sich erneut...
wie kann ich statt 2x dem Assistenten das Hauptprogramm starten?

Zitat:

Delphi-Quellcode:
Application.CreateForm(TAssistent, Assistent);

Du startest den Zweiten doch selber. Also beschwer dich blos nicht darüber. :wink:

Dunkelbunt27 15. Feb 2011 18:59

AW: Assistent-Probleme
 
Ihr seid genial!
:dp:

für alle dies interessiert:
Delphi-Quellcode:
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Assistent:=TAssistent.Create(Application);
  try
  Assistent.ShowModal;
  finally
  Assistent.Free;
  end;
  //Application.CreateForm(TAssistent, Assistent);
  Application.CreateForm(TSchreibmaschine, Schreibmaschine);
  Application.Run;
Danke!

Edit:
Bei der Gelegenheit würde ich gerne noch verstehen, was ich eigentlich mache:

Es wird also nach dem Initalisieren der Assistent manuel gestartet und dann mit ShowModal gesendet, wenn er geschlossen wird, oder?
Löst deshalb
Delphi-Quellcode:
Application.CreateForm(THauptprogramm, Hauptprogramm);
erst nach dem Weiterklicken aus?
Das:
Delphi-Quellcode:
  self.ModalResult:= mrOk;
  self.Close;
bewirkt was?
Delphi-Quellcode:
ModalResult:=mrCancel;
und was das?

Wäre nett wenn jemand das kurz erläutern könnte =D Danke

DeddyH 16. Feb 2011 07:36

AW: Assistent-Probleme
 
Die Hilfe kann das ja wohl am Besten: http://docwiki.embarcadero.com/VCL/d...Form.ShowModal. Da siehst Du auch, dass das Close nach der Zuweisung von mrCancel nichts bringt, da das Formular sowieso geschlossen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr.
Seite 1 von 2  1 2      

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