Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi anwendung über tna schließen, bei formclose minimieren (https://www.delphipraxis.net/58453-anwendung-ueber-tna-schliessen-bei-formclose-minimieren.html)

inriz 7. Dez 2005 10:07


anwendung über tna schließen, bei formclose minimieren
 
hallo,

meine taskbar anwendung sollte nur über ein popupmenu geschlossen, welches über das icon in der tna erreicht werden kann.
das schließen über das allgemein bekannte X in der anwendung sollte verhindert werden und stattdessen die anwendung in die tna minimieren. das forum hab ich schon durchsucht und bin auf closequery gestossen.
eine lösung habe ich auch schon implementiert, jedoch bin ich damit noch nicht zufrieden.

zur struktur der anwendung:
es besteht die möglichkeit über 3 verschiedene komponente die anwendung zu schließen.
1. X in der anwendung
2. schließen im popupmenu im tna
3. datei->beenden

1, 2 und 3 rufen alle die prozedur close auf.
nun soll closequery überprüfen ob das X in der anwendung gedrückt wurde wenn ja soll die anwendung minimiert werden
ANSONSTEN wird die anwendung geschlossen.

mein hintergedanke ist: sollte eine weitere komponente 4 hinzukommen mit der ich anwendung schließen kann, möchte ich einfach nur die prozedur close aufrufen und das programm wird beendet. ich möchte keine werte für eine globale variable setzen um sie dann später in closequery abzufragen.

wie stelle ich das an?
kann man über sender herausfinden, ob das X gedrückt wurde?

gruß inriz

Viktorii 10. Jul 2009 10:35

Re: anwendung über tna schließen, bei formclose minimieren
 
Zitat:

Zitat von inriz
das schließen über das allgemein bekannte X in der anwendung sollte verhindert werden und stattdessen die anwendung in die tna minimieren.

Hat da mittlerweile jemand eine Lösung für?

aaaaaaaaaa_10 10. Jul 2009 10:40

Re: anwendung über tna schließen, bei formclose minimieren
 
Du könntest sonst einfach den ganzen Rand verschwinden lassen:
MainForm.BorderSytle:=bsNone

Muetze1 10. Jul 2009 10:45

Re: anwendung über tna schließen, bei formclose minimieren
 
1. ruft nur Close auf, wenn du nicht die Botschaft WM_SYSCOMMAND behandelst und dort das Command SC_CLOSE. Dort könntest du entsprechend deinen Wünschen ein Minimieren auslösen und dann diese Botschaft nicht weiterleiten zu deiner App (kein Inherited, wenn WM_SYSCOMMAND und SC_CLOSE).

Sherlock 10. Jul 2009 10:52

Re: anwendung über tna schließen, bei formclose minimieren
 
Wird nicht das Ereignis OnFormCloseQuery ausgelöst?

Dart kannst Du ja dann CanClose auf False setzen und die App minimieren. Beim Schließen über TNA kannst Du ja eine entsprechendes Kennzeichen setzen, daß im oben genannten Event dafür sorgt, daß CanClose dann eben auf True gesetzt wird.

Sherlock

DSCHUCH 10. Jul 2009 10:54

Re: anwendung über tna schließen, bei formclose minimieren
 
oder einfach im FormClose

minimize
und
abort

das sollte auch klappen.

daniel.

Muetze1 10. Jul 2009 11:02

Re: anwendung über tna schließen, bei formclose minimieren
 
Zitat:

Zitat von Sherlock
Wird nicht das Ereignis OnFormCloseQuery ausgelöst?

Bei meinem Vorschlag nicht mehr.

Zitat:

Zitat von Sherlock
Dart kannst Du ja dann CanClose auf False setzen und die App minimieren. Beim Schließen über TNA kannst Du ja eine entsprechendes Kennzeichen setzen, daß im oben genannten Event dafür sorgt, daß CanClose dann eben auf True gesetzt wird.

Widerspricht seiner Forderung:

Zitat:

Zitat von inriz
ich möchte keine werte für eine globale variable setzen um sie dann später in closequery abzufragen.

Zitat:

Zitat von DSCHUCH
oder einfach im FormClose

minimize
und
abort

das sollte auch klappen.

Einfach den von Windows angefragten und im FormClose nun schon von der App zugestimmten Schliessen des Fensters nicht nachzukommen ist schon sehr böse. Dann noch mit Abort den Nachrichten Thread er Anwendung hart verlassen ist schon mutwillige Zerstörung des Programmablaufs. Wenn du das Schliessen des Formulars verhindern willst, dann nutze die dafür vorgesehene Stelle: OnCloseQuery. Windows fragt schliesslich nicht umsonst nach.

Das ist ja dann schon kein programmieren mehr sondern hacken...

Viktorii 10. Jul 2009 11:06

Re: anwendung über tna schließen, bei formclose minimieren
 
Zitat:

Zitat von Muetze1
1. ruft nur Close auf, wenn du nicht die Botschaft WM_SYSCOMMAND behandelst und dort das Command SC_CLOSE. Dort könntest du entsprechend deinen Wünschen ein Minimieren auslösen und dann diese Botschaft nicht weiterleiten zu deiner App (kein Inherited, wenn WM_SYSCOMMAND und SC_CLOSE).

Das Abfangen klappt bei mir. Nur das Auslösen des Minimierens nicht :(

Müsste es so nicht klappen?

Delphi-Quellcode:
  if (Message.Msg = WM_SYSCOMMAND) and (Message.WParam = SC_CLOSE) then
    Message.WParam := SC_MINIMIZE;

  inherited;
SC_MAXIMIZE funktioniert :gruebel:

Satty67 10. Jul 2009 11:09

Re: anwendung über tna schließen, bei formclose minimieren
 
Also eine private Variable im Formular sollte schon drin sein. Man darf auch nicht vergessen, das Windows mal runtergefahren wird, da ist ein einfaches verbieten des Close auch nicht so nett.

Ich hab' mal ein Copy&Paste aus einem meiner Programme, das je nach Einstellung beim "X" schließt, minimiert oder versteckt.
Delphi-Quellcode:
{TForm1}
private
  procedure WMQueryEndSession (var M: TWMQueryEndSession); message WM_QUERYENDSESSION;
  ShootDown : Boolean


procedure TForm1.WMQueryEndSession (var M: TWMQueryEndSession);
begin
  inherited;
  ShootDown := TRUE;
end;


procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  // Wenn ShootDown, dann beenden
  if ShootDown then begin
    CanClose := TRUE;

  // Kein ShootDown, nur minimieren eingestellt?
  end else begin
    if CBoxMinimize.Checked then begin
      if CBoxNotifyIcon.Checked then AppShowHide(False) else Application.Minimize;
      CanClose := FALSE;
    end else begin
      CanClose := TRUE;
    end;
  end;
end;
Zum Beenden mit einem anderen Button, wird einfach ebenfalls ShootDown vorm Close auf True gesetzt.

Muetze1 10. Jul 2009 11:38

Re: anwendung über tna schließen, bei formclose minimieren
 
@Viktorii: Du kannst in deiner lokalen Kopie des Message Records soviel ändern wie du willst das bekommt Windows nicht mit.

@Satty67: Mitglied im Schießclub oder warum schiesst du dein Windows immer runter (shoot) anstatt herunter zu fahren (shutdown)? :stupid:


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