![]() |
Minimieren statt Beenden
Hallo, ich bin's wieder :)
ich moechte in meinem Programm dem User die Moeglichkeit geben, wenn er auf den Beenden-Button des Fensters ([X]-Button rechts oben) klickt, das Fenster nur minimiert wird. Ich hab es jetzt soweit, das das Programm nur beendet werden kann, wenn ein bestimmter Button im Fenster gedrueckt wird. Nebeneffekt ist, das z.B. 'Alt-F4', Beenden im Systemmenu ebenfalls nur zum Minimieren fuehren.. das find ich persoenlich nicht so schlimm, aber was passiert, wenn Windows das Programm schliessen will? Ich hab's bei mir (WinXP) probiert, bei nem Neustart gab's keine Probleme und ueber den Task-Manager abschiessen kann man das Programm auch.. Kann die Funktion so bleiben, oder gibt's da auch was eleganteres? Wenn alles super ist, dann hab ich eben nur ein Beispiel geposted.. :D Exit-Button (der richtige Button im Fenster) OnClick-Event:
Delphi-Quellcode:
der OnCloseQuery_Event vom Hauptfenster
procedure TForm_Main.Button_ExitClick(Sender: TObject);
begin ExitButtonWasClicked := True; // globale Variable (ist bei Programmstart auf False) Close; end;
Delphi-Quellcode:
(minonx ist True, wenn nur minimiert werden soll)
procedure TForm_Main.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var msg: Integer; text: String; askexit: Boolean; begin askexit := True; if (reg_minonx = True) and (ExitButtonWasClicked = False) then askexit := False; if askexit then begin text := 'Wollen Sie wirklich beenden?'; msg := Application.MessageBox(Pointer(text), 'Beenden', MB_YESNO + MB_DEFBUTTON2 + MB_ICONQUESTION); // wenn YES gewählt, dann ist msg = 6 if msg = 6 then CanClose := True else CanClose := False; end else CanClose := False; if (reg_minonx) and (not CanClose) and (not ExitButtonWasClicked) then Application.Minimize; ExitButtonWasClicked := False; end; Mat |
Ich halte es grundsätzlich für sehr unglücklich das standard Verhalten von Windows der art drastisch zu beeinflussen / zu verändern. Wenn ich auf "schließen" in der Titelleiste klicke, dann erwarte ich auch, dass das Fenster zu geht.
Schick es mit den "Minimieren"-Button in die TNA und beeden es ganz normal mit dem "Schließen"-Button. Damit machst du dir wesentlich mehr Freunde, als mit der Konstruktion, die du da jetzt gebastelt hast. Damit spartst dir auch die Option, ob der Benutzer die Funktionsweise des "Schließen"-Buttons so drastisch verändern will. |
Re: Minimieren statt Beenden
Als Ergänzung möchte ich sagen, dass ich dies (bei allem Respekt) für Schwachsinn halte:
Zitat:
Delphi-Quellcode:
Leider wird es wahrscheinlich nie passieren, aber ich würde mir mal wünschen, dass Microsoft diese Konstanten ändert. Borland wäre dann gezwungen, neue Bibliotheken mit den neuen Werten zu veröffentlichen. Ich bräuchte meine Programme nur neu kompilieren, und sie würden wieder funktionieren. Du dagegen müsstest deine Quellcodes durchsuchen und die numerischen Werte von Hand ändern. - Denk mal darüber nach. :)
if msg = IDYES then
|
Hi Leute,
als ich gestern meinen Recher ausmachen wollte, hat das doch tatsaechlich nicht funktioniert!!! :( scheinbar kann ich das doch nicht so machen.. (obwohl ich schwoeren kann, das es bei meinem Test-Neustart noch geklappt hat) jemand eine andere idee? @matthias die rueckgabewerte (6,7, etc.) habe ich alle aus der Online-Hilfe.. hab nicht gewusst, dass das auch anders geht... 'IDYES' gefaellt mir auch besser :) @luckie also Aufwand sparen wuerde ich nicht, weil ja die Option schon eingebaut ist.. :) ich find die Moeglichkeit super, zumal bei Programmen, die die ganze Zeit nur im Systray sitzen. Wenn ich dann das Hauptfenster mal auf habe und wieder weg haben will, klick ich immer auf das [X] (frag nich warum), obwohl ich es ja eigentlich nur minimieren will... und da ja die Moeglichkeit besteht, die Funktion abzuschalten, halte ich das nicht fuer wild. das was ich grad programmiere wird Version 3.0 sein, alle Vorgaenger hatten diese Option drin, da sollte man sich nicht umgewoehnen sollen, denke ich. Mat |
Moin Mat,
Zitat:
(zumindest bei mir) |
Zitat:
|
Hoi Mat,
schau dir mal diesen Beitrag an ... das sollte doch eigentlich helfen: ![]() |
Hallo. Ich weiß jetz nicht, ob du das so gemeint hast, aber ich hab das so verstanden: Wenn der Benutzer eine Checkbox markiert, soll bei einem Klick auf den [x] Button das Programm minimiert werden. Wenn der Benutzer die Checkbox wieder checked := false macht, soll das Prog beendet werden.
Warum machst du das dann nicht so
Delphi-Quellcode:
Bevor das Programm beendet werden kann, wird abgefragt, ob die Variable Beenden auch true is, d.h ob das Programm tatsächlich beendet werden soll, oder nur minimiert.
var Beenden : Boolean = true;
procedure TForm1.btnBeendenClick(Sender: TObject); begin Beenden := true; Close; end; procedure TForm1.chbMinimierenClick(Sender: TObject); begin Beenden := not chbMinimieren.checked; end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin IF Beenden = true THEN CanClose := true ELSE begin CanClose := false; Application.Minimize; end; Beenden := false; end; |
Hoi Stanlay,
dein Code ist vom Prinzip her nichts anderes als der Code von Mat. Das Problem ist, dass das Programm dann auch nicht vom Betriebsystem beendet werden kann, also den Code von meinem Link mit einarbeiten ... dann sollte es funktionieren. |
Aber mein Code is sauberer geschrieben :mrgreen: Nö im Ernst: Also über den Taskmanager kann man es ohne weiteres Beenden, wenn du das meinst. Aber über das SystemMenü. Oder was meinst du genau?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 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