Autor |
Beitrag |
hui1991
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: Di 06.06.06 10:07
Wie kann ich testen ob eine Anwendung Minimiert, Maximiert oder geschlossen Wird.
Ich will die Anwendung nicht beim X (Schließen oben Rechts) nicht beenden sondern in den Tray ablegen. Wie kann ich das am besten machen. Muss ja nur wissen wann das ereigniss zum Schließen aufgerufen wird und das Beenden der Anwendung verhindern.
MfG
hui1991
|
|
Fighter#1
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Di 06.06.06 10:12
Also zum schließen :
Im OnCloseQuery ereignis CanClose auf False setzen (Programm kann nicht mehr beendet werden)
In OnClose halt mit den Jedis, oder was du halt hast, in den ray senden.
das andere geht glaubich über Windowstate also ob wsMinimized oder wsMaximized oder halt wsNormal
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
|
|
hui1991 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: Di 06.06.06 10:17
WindowState hab ich schon ausprobiert.
Schon vor dem Thema schreiben.
CanClose finde ich aber nicht.
Ist bei mir irgendwie nicht vorhanden.
Wo kann ich es finden.
In Form1 ist es nicht dabei.
MfG
hui1991
|
|
Fighter#1
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Di 06.06.06 10:23
Im Auf das Formular klicken --> Im Objektinspektor den Reiter Ereignisse wählen --> Doppelklick auf das leere Feld rechts neben OnCloseQuery.
Welches Delphi benutzt du?
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Di 06.06.06 10:25
Wenn die Form minimiert wird, kann man folgendermaßen eine eigene Prozedur ausführen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| Application.OnMinimize := MeineMiniProzedur;
procedure TForm1.MeineMiniProzedur(Sender: TObject); begin showmessage('Sososo, ich soll mich also klein machen...'); end; |
CanClose ist ein Var-Parameter im OnCloseQuery der Form. Setzt man sie in der Prozedur auf False, kann die Form nicht geschlossen werden. Zumindest nicht über das X. Abschießen über den Taskmanager geht selbstverständlich 
_________________ We are, we were and will not be.
|
|
azubi_20
      
Beiträge: 593
WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
|
Verfasst: Di 06.06.06 10:27
CanClose setzen :
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := false; end; |
|
|
Fighter#1
      
Beiträge: 787
Win XP, Ubuntu 8.04
Turbo Delphi 2006, Delphi 2005 Pe, Delphi 5 Pe, Netbeans 6.1, Eclipse, Microsoft VisualC#, Dev C++, PHP, HTML, CSS
|
Verfasst: Di 06.06.06 10:32
Man kann die Form auch noch mit Application.Terminate "beenden" wenn CanClose False ist 
_________________ Wer andere beherrscht ist stark,
wer sich selbst beherrscht ist mächtig. Lao Tse
|
|
hui1991 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: Di 06.06.06 10:42
Blind
Hab OnCloseQuery gefunden hab dann in den Ereignissen gesucht.
Das ist ja aber in OnCloseQuery drin.
Habe Delphi 7 und hab des ja auch gefunden.
Naja Schließen tut es sich nicht und in den Tray will es auch nicht.
Ich teste dann mal rum.
Wenn was schief geht dann melde ich mich wieder.
MfG
hui1991
|
|
bms
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: Di 06.06.06 11:12
Hier die Lösung:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| type TForm1 = class(TForm) private public procedure WMSYSCOMMAND(var Msg: TMessage); Message WM_SYSCOMMAND; end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.WMSYSCOMMAND(var Msg: TMessage); var k: Integer; begin case Msg.wParam of SC_MINIMIZE: begin end; SC_CLOSE: begin end; else inherited; end; end; |
Wie funktioniert das? Zuerst fängst du die Message WM_SYSCOMMAND ab und leitest sie an deine eigene Prozedur weiter. Mit Msg.wParam fragst du den Parameter ab. Ist es z. B. SC_MINIMIZE, dann wurde versucht das Fenster zu minimieren. In dem Block kannst du das programmieren was das Programm in diesem Fall machen soll. Soll es nicht minimiert werden, dann darf inherited nicht ausgeführt werden. Soll das Programm zwar vor dem Minimieren was machen, aber dann doch minimiert werden, dann zum Schluß einfach inherited ausführen. Das gleiche gilt auch für die anderen Parameter.
_________________ VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >
|
|
hui1991 
      
Beiträge: 433
Windows XP, WIndows Vista
Turbo Delphi Explorer| Delphi, PHP,Blitzbasic
|
Verfasst: So 11.06.06 13:21
So jetzt wo ich wieder zeit gefunden habe diesen Beitrag mir durchzulesen schreibe ich mal mein ergebniss.
Der Code von bms funktioniert bei mir wunderbar.
Also Danke an alle die mir versucht haben zu helfen
MfG
hui1991
|
|