Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism minimieren in den systemtray (https://www.delphipraxis.net/44443-minimieren-den-systemtray.html)

MathiasSimmack 23. Apr 2005 20:55

Re: minimieren in den systemtray
 
Ich schon. Ist aber keine saubere .NET-Lösung. Aber solange deine Programme nur auf Windows laufen sollen, mag´s gehen:
Code:
private const int WM_SIZE       = 0x0005;
private const int SIZE_MINIMIZED = 1;

protected override void WndProc(ref Message m)
{
   if(m.Msg == WM_SIZE && (int)m.WParam == SIZE_MINIMIZED) {
      notifyIcon1.Visible = true;
      this.ShowInTaskbar = false;
   }

   base.WndProc(ref m);
}

void MainFormClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
   notifyIcon1.Visible = false;
}

#region NotifyIcon
void MenuItem1Click(object sender, System.EventArgs e)
{
   if(this.WindowState == FormWindowState.Minimized)
      this.WindowState = FormWindowState.Normal;

   this.Activate();
   notifyIcon1.Visible = false;
   this.ShowInTaskbar = true;
}
      
void MenuItem2Click(object sender, System.EventArgs e)
{
   this.Close();
}
#endregion

Prym 23. Apr 2005 22:07

Re: minimieren in den systemtray
 
sauber für net sollte es vieleicht schon sein

aber ich teste das mal das sieht schon gut aus

aber binn weiter offen für alles^^

MathiasSimmack 23. Apr 2005 22:44

Re: minimieren in den systemtray
 
Zitat:

Zitat von Prym
sauber für net sollte es vieleicht schon sein

Na ja, irgendwas solltest du auch zu deinem Problem beitragen. Finde ich jedenfalls :stupid:

Zitat:

aber binn weiter offen für alles^^
Ich bin mal nicht so:
Code:
// Closing-Event der Form
void MainFormClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
   notifyIcon1.Visible = false;
}

// SizeChanged-Event der Form
void MainFormSizeChanged(object sender, System.EventArgs e)
{
   if(this.WindowState == FormWindowState.Minimized) {
      this.ShowInTaskbar = false;
      notifyIcon1.Visible = true;
   }
}

// ContextMenu für NotifyIcon
void MenuItem1Click(object sender, System.EventArgs e)
{
   if(this.WindowState == FormWindowState.Minimized)
      this.WindowState = FormWindowState.Normal;

   this.Activate();
   notifyIcon1.Visible = false;
   this.ShowInTaskbar  = true;
}
      
void MenuItem2Click(object sender, System.EventArgs e)
{
   this.Close();
}
:)

Prym 24. Apr 2005 14:51

Re: minimieren in den systemtray
 
öh ist das nicht c#?
ich brauch aber delphi.net.....

MathiasSimmack 24. Apr 2005 15:05

Re: minimieren in den systemtray
 
Du hättest damit deine eigene Intelligenz unter Beweis stellen können, denn für deine WinForms-Anwendung spielt die Sprache keine Rolle. Und da die Eigenschaften in dem Fall aus dem .NET Framework kommen, heißen sie auch in Delphi "Closing" und "SizeChanged". Es ändert sich nur die Syntax.

Versuch´s einfach mal. ;)

Prym 24. Apr 2005 15:20

Re: minimieren in den systemtray
 
du bist lusstig das habe ich schon etwas gemacht und sowas mit intiligenz und so ist nicht sehr nett

MathiasSimmack 24. Apr 2005 15:24

Re: minimieren in den systemtray
 
:mrgreen: Woran scheitert es denn?

Prym 24. Apr 2005 15:46

Re: minimieren in den systemtray
 
das habe ich bis jetzt
---------------------------------------------------------
Delphi-Quellcode:
procedure TWinForm.NotifyIcon1_MouseDown(sender: System.Object; e: System.Windows.Forms.MouseEventArgs);
begin
     if(WindowState = FormWindowState.Minimized)then
     begin
      WindowState := FormWindowState.Normal;
     end;
   Activate();
   notifyIcon1.Visible := false;
   ShowInTaskbar  := true;
end;

procedure TWinForm.TWinForm_SizeChanged(sender: System.Object; e: System.EventArgs);
begin
     if(WindowState = FormWindowState.Minimized)then
     begin
      ShowInTaskbar := false;
      notifyIcon1.Visible := true;
     end;
end;

procedure TWinForm.TWinForm_Closing(sender: System.Object; e: System.ComponentModel.CancelEventArgs);
begin
  notifyIcon1.Visible := false;
end;
-------------------------------------------------------------------------------------------


das habe ich jetzt so gemacht aber das geht nicht also es wird nicht im tray angezeigt
und das
--------
Delphi-Quellcode:
procedure TWinForm.NotifyIcon1_MouseDown(sender: System.Object; e: System.Windows.Forms.MouseEventArgs);
begin
     if(WindowState = FormWindowState.Minimized)then
     begin
      WindowState := FormWindowState.Normal;
     end;
   Activate();
   notifyIcon1.Visible := false;
   ShowInTaskbar  := true;
end;
--------
soll ja eigentlich da rein
------
ContextMenu
-------

aber wie greif ich darauf zu bei mir steht da none und ich kann da nix machen

und was soll das?
----------
Delphi-Quellcode:
void MenuItem2Click(object sender, System.EventArgs e)

   this.Close();
}
----------

MathiasSimmack 24. Apr 2005 16:50

Re: minimieren in den systemtray
 
Das NotifyIcon hat ein zugewiesenes ContextMenu mit zwei Einträgen. Der erste zeigt die Anwendung wieder an, der zweite beendet das Programm. In Delphi also
Delphi-Quellcode:
self.Close;
Für so ein Menü suchst du in der Komponentenpalette nach ContextMenu und ziehst es in dein Projekt. Wie der Menüeditor bei Delphi ist, weiß ich nicht. Bei #d erscheint das Menü quasi auf der Form, und man kann die Einträge direkt angeben. Sobald das Menü im Projekt ist, kannst du es in NotifyIcon auch auswählen.

Noch ein PS: Bei mir hat sich das Icon erst gezeigt, nachdem ich eins im Objektinspektor zugewiesen habe. Ich habe mich mit NotifyIcon bisher nicht weiter beschäftigt, daher weiß ich im Augenblick nicht, wie man das Programmsymbol selbst zuweist. Aber es wird sicher gehen. Fürs Erste probier´s mal mit einem separaten Symbol.

Aha, in #d geht es so mit dem Programmsymbol
Code:
public MainForm()
{
   //
   // The InitializeComponent() call is required for Windows Forms designer support.
   //
   InitializeComponent();
         
   //
   // TODO: Add constructor code after the InitializeComponent() call.
   //
   notifyIcon1.Icon = this.Icon;
}
Dann brauche ich vorher keins zuweisen. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:00 Uhr.
Seite 3 von 3     123   

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 by Thomas Breitkreuz