Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Rechner fährt nicht mehr herunter (https://www.delphipraxis.net/73935-rechner-faehrt-nicht-mehr-herunter.html)

meg91 25. Jul 2006 20:25


Rechner fährt nicht mehr herunter
 
Hallo
ich habe ein Programm geschrieben, welches beim minimieren oder schließen in die TNA wandert.
Es startet automatisch beim Systemstart.
Nach einem Testlauf habe ich bemerkt, dass mein Rechner nicht mehr runterfährt, wenn mein Prog läuft (ich klick auf Start -> Ausschalten und dann in dem kleinen blauen Fenster wieder Ausschalten, dann verschwiendet es wieder und der nomale Dektop kommt wieder)
wenn ich das Programm beende und ihn wieder ausschalte fährt mein PC wieder ganz normal runter

ich geh mal davon aus, das sich mein Prog beim schließen immer minimiert und sich nur über das Kontextmenü über dem TNA Icon schließen lässt
kann mir jemand nen Rat geben wie ich mein Problem lösen könnte

Gruß
Markus

mkinzler 25. Jul 2006 20:27

Re: Rechner fährt nicht mehr herunter
 
Dein Programm scheint die höfliche Bitte des Betriebssytem sich zu Beenden nicht nachzukommen.

faux 25. Jul 2006 20:27

Re: Rechner fährt nicht mehr herunter
 
Hallo!

Hast du das Event OnClose oder OnCloseQuery benutzt? Wenn ja, kann es sein, dass dein Programm da drinnen hängen bleibt und das Timout fürs killen von hängengebliebenen Applikationen beim herunterfahren sehr hoch gesetzt ist, im Windows.

Grüße
Faux

EDatabaseError 25. Jul 2006 20:28

Re: Rechner fährt nicht mehr herunter
 
:gruebel: Windows sollte es doch fertig bringen dein Programm auszubekommen. Das schafft es ja auch bei Norton ;-)

Du könntest den Shutdown abfangen und dann dein Programm beenden

HuxXx 25. Jul 2006 20:29

Re: Rechner fährt nicht mehr herunter
 
Hi...

vllt könnte dir das helfen:

Dein Programm reagiert ja drauf, wenn der Rechner runterfährt, also einfach das hier in die WMQUERYSESSION Procedur einfügen.

Delphi-Quellcode:
procedure TMainForm.WMQUERYENDSESSION(var msg: TMessage);
begin
// In die TNA minimieren.
  msg.Result := true;


// bzw. das Ding beenden.
Halt;
end;
Greetz by Hux

// Edit: arrrgh, das [b] funktioniert im CodeTeil ja garnicht -.-

faux 25. Jul 2006 20:34

Re: Rechner fährt nicht mehr herunter
 
@HuxXx: Es muss doch auch ohne zusätzlichen Code zu lösen sein. Zuerst sollte man mal feststellen, wieso das Probelm überhaupt auftritt. Einfach so, mal irgendeinen Code in die Applikation zu packen, hat noch keinen Sinn, wenn man nichtmal weiß, wieso der Fehler auftritt.

Grüße
Faux

meg91 25. Jul 2006 20:35

Re: Rechner fährt nicht mehr herunter
 
ich hab unter CloseQuery folgendes rein geschriben
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := False;
  Form1.Hide;
end;

faux 25. Jul 2006 21:05

Re: Rechner fährt nicht mehr herunter
 
Zitat:

Zitat von meg91
ich hab unter CloseQuery folgendes rein geschriben
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := False;
  Form1.Hide;
end;

Jup! Daran liegts. ;)

Beim herunterfahren fordert Windows deine Applikation auf, sich zu beenden, deine Applikation sagt aber nur: Nein. ;)
Das liegt daran, dass du CanClose auf False setzt.
Das OnCloseQuery Event ist dazu da, Abfragen vor dem Schließen zu realisieren, zum Beispiel "Wollen Sie wirklich beenden" oder "Wollen Sie Speichern?" oder so. Du "missbrauchst" dieses Event zum Minimieren in den Tray. ;)

Grüße
Faux

meg91 25. Jul 2006 21:09

Re: Rechner fährt nicht mehr herunter
 
Und wie kann ich das dann richtig machen?

richie 26. Jul 2006 13:50

Re: Rechner fährt nicht mehr herunter
 
Event weglassen. :zwinker:

ManuMF 26. Jul 2006 14:35

Re: Rechner fährt nicht mehr herunter
 
Oder: Das hier übernehmen:
Delphi-Quellcode:
var CloseReally: Boolean = false;

// Dann deinen Code...

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := CloseReally;
  Form1.Hide;
end;

// und den von HuxXx

procedure TMainForm.WMQUERYENDSESSION(var msg: TMessage);
begin
  msg.Result := 1;
  CloseReally := true;
end;
Das sollte funktionieren.

meg91 26. Jul 2006 19:30

Re: Rechner fährt nicht mehr herunter
 
ich hab das mal so ausprobiert und es hat nix genracht
habt ihr vllt noch ne Idee

DGL-luke 26. Jul 2006 20:30

Re: Rechner fährt nicht mehr herunter
 
hast du die zweite prozedur auch als botschaftsmethode gebaut?

Du musst sie dann in der klassendeklaration der form so deklarieren:

Delphi-Quellcode:
procedure OnWMQueryEndSession(var Msg: TMsg); message WM_QUERYENDSESSION;

meg91 27. Jul 2006 17:07

Re: Rechner fährt nicht mehr herunter
 
kannst du mir vielleicht nochmal den ganzen Source aufschreiben
ich check des net mit den botschaftsmethoden nich so ganz
bei mir kommen da immer Fehler

ManuMF 27. Jul 2006 19:16

Re: Rechner fährt nicht mehr herunter
 
Was denn für Fehler? Sorry, der Wahrsager von Nebenan ist gerade im Urlaub...:roll:

meg91 27. Jul 2006 21:31

Re: Rechner fährt nicht mehr herunter
 
bei mir kommt immer folgendes wenn ich mein Prog compilieren will:
Delphi-Quellcode:
[Fehler] Unit1.pas(2023): E2003 Undefinierter Bezeichner: 'Result'

mkinzler 27. Jul 2006 21:32

Re: Rechner fährt nicht mehr herunter
 
Ist das ne Function, in der der fehler auftritt?

ManuMF 28. Jul 2006 11:36

Re: Rechner fährt nicht mehr herunter
 
Hmm, ich denke, du hast was vergessen. Liegt wohl daran, dass du mehrere Code-Teile von hier einfach eingefügt hast, ohne sie für deinen Fall anzupassen.

Überprüfe folgendes: In der Unit ziemlich weit oben steht
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    // Hier steht jede Menge Zeug ;-)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
In der Zeile nach dem { Private-Deklarationen } sollte das hier stehen:
Delphi-Quellcode:
procedure WMQueryEndSession(var Msg: TMessage); message WM_QUERYENDSESSION;
und irgendwo unten im Code dann
Delphi-Quellcode:
procedure TForm1.WMQueryEndSession(var Msg: TMessage);
begin
  Msg.Result := 1;
  CloseReally := true;
end;
Dabei ist wichtig, dass du den Namen deines Formulars anpasst, also wenn es nicht Form1 heißt, musst du es für den unteren Code-Teil in meinem Beitrag ändern.

meg91 28. Jul 2006 12:05

Re: Rechner fährt nicht mehr herunter
 
super es funzt jetzt!
ich hatte die prozedur unter public und nicht unter private eingetragen :thumb:

danke für euer schnelles Feedback


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