Miniertes Fenster unter KDE wieder herstellen.[gelöst]

Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Miniertes Fenster unter KDE wieder herstellen.[gelöst]

Beitrag von corpsman »

Guten morgen,

Ich versuche gerade meine Anwendung, welche durch den Benutzer minimiert wurde, wieder her zu stellen.

Das besondere, wenn die Anwendung minimiert wird, verstecke ich sie aus der Taskleiste und zeige stattdessen einen Trayicon an

Code: Alles auswählen

Procedure TForm1.FormWindowStateChange(Sender: TObject);
Begin
  // Beim Minimize zeigen wir das Trayicon an
  Trayicon1.visible := True;
  Trayicon1.ShowIcon := True;
  Application.ProcessMessages;
  sleep(10);
  // Und der Eintrag in der Taskleiste wird deaktiviert
  form1.Visible := false;
End;     


Macht nun der User nen Doppelclick auf das trayicon, oder klickt das "zeigen" im Popupmenü soll die Anwendung wieder her gestellt werden, dazu habe ich diverse versuche, alle klappen leider nicht :

Code: Alles auswählen

 
Procedure TForm1.MenuItem1Click(Sender: TObject);
Begin
  //   Fenster wieder Sichtbar machen.
  //   das geht aber leider nicht :(
 
  form1.Visible := true;
  Application.ProcessMessages;
  sleep(10);
  Application.Restore;
  Application.BringToFront;
  form1.show;
  form1.WindowState := wsNormal;
  application.IntfAppRestore;
End;
 



Im Dateinanhang habe ich noch ein Minimalsample zusammengebastelt.

Weihnachtliche grüße
Corpsman

Verwendet wird :
Lazarus SVN 39672.
KDE 4.9.2
fpc 2.6.0-6
Kernel 3.5.0-18-generic
Dateianhänge
problem.zip
Demo Programm zum Thema "restore from Trayicon"
(126.93 KiB) 71-mal heruntergeladen
Zuletzt geändert von corpsman am Sa 29. Dez 2012, 20:28, insgesamt 1-mal geändert.
--
Just try it

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Miniertes Fenster unter KDE wieder herstellen.

Beitrag von theo »

Naja, auch hier hilft nachdenken weiter. :wink:

Wenn du das in OnWindowStateChange machst, dann macht er das halt immer, wenn der Window State sich ändert.
Net so schlau, oder?

Mach einfach das ganze Trayicon1.visible := True; Zeug im Button1Click

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Miniertes Fenster unter KDE wieder herstellen.

Beitrag von corpsman »

Hi theo,

ich habe nachgedacht, und auch den Debugger darauf angesetzt. Hast du mein Sampel ausprobiert ?

Der

Code: Alles auswählen

Procedure TForm1.FormWindowStateChange(Sender: TObject);
event kommt beim wiederherstellen nicht. Er wird nur aufgerufen, wenn ich den Button drücke oder das symbol Rechts oben auf der Form zum Minimieren (würde ich den code teil in den Button verschieben, dann würde ein klick auf das minimier Icon rechts oben nicht mehr funktionieren)

Ursprünglich hatte ich auch einen Code in dem Event der prüfte, welcher Formstate gerade ist und dann entsprechend den visible := false teil übersprang, auch das funktioniert nicht.

Gruß

Corpsman
--
Just try it

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Miniertes Fenster unter KDE wieder herstellen.

Beitrag von theo »

corpsman hat geschrieben:Hi theo,
ich habe nachgedacht, und auch den Debugger darauf angesetzt. Hast du mein Sampel ausprobiert ?


Ja, habe ich. Bei mir geht das, mit diesem Code:


Code: Alles auswählen

Procedure TForm1.MenuItem1Click(Sender: TObject);
Begin
  form1.show;
  form1.WindowState := wsNormal;
  Trayicon1.visible := False;
End;
 
Procedure TForm1.FormWindowStateChange(Sender: TObject);
Begin
 
End;
 
Procedure TForm1.Button1Click(Sender: TObject);
Begin
  // Anwendung via Button, oder Minimize Icon Minimieren
  Application.Minimize;
   // Beim Minimize zeigen wir das Trayicon an
  Trayicon1.visible := True;
  Trayicon1.ShowIcon := True;
  // Und der Eintrag in der Taskleiste wird deaktiviert
  form1.Visible := false;
End;
 

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Miniertes Fenster unter KDE wieder herstellen.

Beitrag von corpsman »

also,

Ich gebe dir recht, wenn man es macht wie du's beschrieben hast gehts mit dem TButton ( den hatte ich allerdings nur zu Demo zwecken hinzugefügt), was ich eigentlich haben will, ist dass es auch geht, wenn man den button im screenshot benutzt. Evtl. hab ich mich da falsch ausgedrückt. Sry.
Dateianhänge
Button zum minimieren..
Button zum minimieren..
Problem.png (5.55 KiB) 1235 mal betrachtet
--
Just try it

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Miniertes Fenster unter KDE wieder herstellen.

Beitrag von theo »

corpsman hat geschrieben:wenn man den button im screenshot benutzt. Evtl. hab ich mich da falsch ausgedrückt. Sry.


Ja, da weiss ich auch nicht was da genau läuft. Immer schwierig mit dem Window Manager.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Miniertes Fenster unter KDE wieder herstellen.

Beitrag von theo »

Aber es liegt doch an diesem Event. Knifflig. Probier mal so

Code: Alles auswählen

var amin:integer;
 
....
 
Procedure TForm1.MenuItem1Click(Sender: TObject);
var i:integer;
Begin
 Form1.Show;
 Trayicon1.visible := False;
 for i:=1 to 5 do
 begin
   Application.ProcessMessages;
   sleep(100);
 end;
 amin:=false;
End;
 
Procedure TForm1.FormWindowStateChange(Sender: TObject);
Begin
  if (Form1.WindowState = wsMinimized) and (not amin) then begin
     amin:=true;
     form1.WindowState := wsNormal;
     form1.Hide;
     Form1.ShowInTaskBar := stNever;
     Trayicon1.visible := True;
  end;
End;
 

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Miniertes Fenster unter KDE wieder herstellen.

Beitrag von corpsman »

Aber es liegt doch an diesem Event. Knifflig. Probier mal so

Ich bin ja so froh, dass ich es endlich geschafft habe eine nicht triviale Frage zu stellen ;)

Mit den folgenden Änderungen funktioniert es bei mir auch. Danke Theo

Code: Alles auswählen

 
var   amin: Boolean;
 
Procedure TForm1.MenuItem1Click(Sender: TObject);
Var
  i: integer;
Begin
  Form1.Show;
  Trayicon1.visible := False;
  For i := 1 To 5 Do Begin
    Application.ProcessMessages;
    sleep(100);
  End;
  amin := false;
  Application.BringToFront; // <-- sonst kommt das fenster nicht in den Vordergrund.
End;
--
Just try it

Antworten