Delphi-PRAXiS

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)

Prym 19. Apr 2005 16:28


minimieren in den systemtray
 
jop da ich ein eifrieger bin möchte ich auch noch das wissen^^
naja ganz so ist es nicht es interessiert noch jemanden anders

aber zu frage: winform für delphi.net

ich möschte mit einem butten 'Minimieren' das projekt in den systemtray minimieren

aber bei net habe ich garkeine ahnung wie man das macht und in delphi32 braucht man ja die api soweit ich weiß

Prym 19. Apr 2005 20:45

Re: minimieren in den systemtray
 
erstmal nach oben schieb hoffe das ist ok
weil mir das wichtig ist
hoffe mir kann jemand helfen

Luckie 19. Apr 2005 20:49

Re: minimieren in den systemtray
 
Zitat:

Zitat von Prym
erstmal nach oben schieb hoffe das ist ok
weil mir das wichtig ist

Jeden ist sein Problem wichtig. Und pushen ist vor 24 Stunden unerwünscht. Danke.

Prym 19. Apr 2005 20:50

Re: minimieren in den systemtray
 
oh hab ich nicht gewusst sorry

BenjaminH 19. Apr 2005 20:54

Re: minimieren in den systemtray
 
Wenn du die Property "ShowInTaskbar" veränderst, wird deine Form schonmal nicht in deer Taskbar angezeigt...
Zumindest ein Anfang

Prym 20. Apr 2005 20:54

Re: minimieren in den systemtray
 
so nun ists erlaubt

hoffe jetzt kann einer helfen

Generalissimo 20. Apr 2005 21:31

Re: minimieren in den systemtray
 
Das macht die Komponente NotifyIcon

Matze 20. Apr 2005 21:31

Re: minimieren in den systemtray
 
Zitat:

Zitat von Generalissimo
Das macht die Komponente NotifyIcon

Auch unter .NET? :gruebel:

Das ist, soweit ich weiß, eine Win32-Komponente ...

MathiasSimmack 20. Apr 2005 23:35

Re: minimieren in den systemtray
 
Zitat:

Zitat von Matze
Auch unter .NET? :gruebel:

Ja.

Zitat:

Das ist, soweit ich weiß, eine Win32-Komponente ...
Es gibt auch eine für .NET (WinForms).

Prym 21. Apr 2005 15:51

Re: minimieren in den systemtray
 
wie die komponente könnte mir das jemand genauer erklären

MathiasSimmack 21. Apr 2005 20:25

Re: minimieren in den systemtray
 
Da ich aus deinem Satz nicht ganz erkennen kann, was du erklärt haben willst (Gott schütze die Satzzeichen! :stupid:), rate ich einfach mal --

Guck dich mal in der Komponentenpalette um. Da gibt´s eine WinForms- ... äh ... na ja, nennen wir sie: Komponente namens "NotifyIcon". Die kannst du in deinem Programm schon mal nutzen um das TNA-Icon zu erzeugen. Ein Direktzugriff auf die entsprechenden API-Funktionen ist damit nicht erforderlich.

Prym 21. Apr 2005 21:40

Re: minimieren in den systemtray
 
ähm den post habe ich ach nicht ganz verstanden weil api gibt es in net doch nicht?

und was sollte das mit meiner frage, im zusammenhang mit allen meinen post denke ich ist schon klar wobei ich hoffe ihr mir helfen könnt nämlich wie minimiere ich ein prog in den tray mit allem drum und dran (verschwinden aus der taskleiste/erscheinen im tray/ und per doppelklick wird das programm wieder geöffnet)

malo 21. Apr 2005 21:50

Re: minimieren in den systemtray
 
Zitat:

Zitat von Prym
ähm den post habe ich ach nicht ganz verstanden weil api gibt es in net doch nicht?

Geben tut es die WinAPI in .NET, .NET soll jedoch die WinAPI komplett ersetzen. Das ist nur noch nicht ganz gelungen ;)

MathiasSimmack 22. Apr 2005 09:44

Re: minimieren in den systemtray
 
Zitat:

Zitat von Prym
und was sollte das mit meiner frage, im zusammenhang mit allen meinen post denke ich ist schon klar

Ach, das sollte ´ne Frage sein? Weißt du, es ließe sich mit diesem Zeichen -> ? <- besser als solche erkennen. Ab und zu ein Komma würde auch helfen die Lesbarkeit zu verbessern. Oder glaubst du es ist einfach einen riesigen langen Satz in dem ich ab und zu auch mal das Thema wechsle wirklich einwandfrei in einem Zusammenhang zu erkennen wenn ich in der ganzen zeit absolut kein komma setze und vielleicht auch mal vergesse bestimmte Worte groß zu schreiben und wenn dann noch das Fragezeichen fehlt dann weißt du nicht mal, dass das eben eine Frage war. :stupid:

Zitat:

Zitat von malo
Geben tut es die WinAPI in .NET, .NET soll jedoch die WinAPI komplett ersetzen. Das ist nur noch nicht ganz gelungen ;)

:roll: Anders herum wird ein Schuh daraus: .NET gibt es auf WinAPI-Systemen, weil es noch keine .NET basierenden Systeme gibt. .NET soll zwar das API ersetzen, aber nicht unter Windows 2000 oder XP, sondern in einem künftigen Betriebssystem.

Prym 22. Apr 2005 18:14

Re: minimieren in den systemtray
 
ähm ja das denke ich weil wenn du das thema gelesen hast weißt du doch das ich nur das minimiren gern würde

und ich weiß immernoch nicht was ich genau machen muss

BenjaminH 22. Apr 2005 18:26

Re: minimieren in den systemtray
 
OK, du musst nur die Komponente TNotifyIcon auf die Form ziehen, damit kannst du dann sowas regeln.

Prym 22. Apr 2005 19:18

Re: minimieren in den systemtray
 
ja das weiß ich das teil ist drin doch ich kann nicht in den tray minimieren oO

@all
bitte was muss ich einstellen oder was brauche ich für einen code oder Prozedur oder ähnliches um mein Prog in den Tray zu bekommen?

Prym 23. Apr 2005 19:20

Re: minimieren in den systemtray
 
push
----------
ja das weiß ich das teil ist drin doch ich kann nicht in den tray minimieren oO

@all
bitte was muss ich einstellen oder was brauche ich für einen code oder Prozedur oder ähnliches um mein Prog in den Tray zu bekommen?

MathiasSimmack 23. Apr 2005 19:31

Re: minimieren in den systemtray
 
Schau mal bitte nach, ob die Form eine Art "OnMinimize"-Ereignis hat. Oder mach dich mal im Framework SDK über das Minimieren (bzw. evtl. Ereignisse dabei) schlau.

Prym 23. Apr 2005 20:15

Re: minimieren in den systemtray
 
also sowas wie on Minimize habe ich noch nicht gefunden

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 09:23 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 by Thomas Breitkreuz