Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Form erscheint nicht in der Taskbar


jasocul - Fr 19.07.13 11:47
Titel: Form erscheint nicht in der Taskbar
Ich verwende folgenden Code:

Delphi-Quelltext
1:
2:
3:
    Application.MainForm.Hide;
    frmXYZ.ShowModal;
    Application.MainForm.Show;

Wenn ich die sichtbare Form jetzt minimiere, erscheint sie links unten auf dem Desktop, wie in einer MDI-Anwendung. Außerdem erscheint nichts in der Taskbar, sobald das MainForm.Hide durchgeführt wurde.

Ziel soll eigentlich sein, dass der Anwender nur ein Fenster der Anwendung sehen kann. Natürlich kann er andere Anwendungen daneben verwenden und ist durch die Arbeit sicher auch mal gezwungen diese Beispiel-Anwendung zu minimieren. Es soll sich aber das übliche Verhalten unter Windows nicht ändern.

Hat jemand einen Tipp, woran das liegt oder was ich anders machen sollte?


jaenicke - Fr 19.07.13 14:17

Bei Delphi 2005 (laut Profil) gab es noch keine eingebaute Möglichkeit die weiteren Fenster auf der Taskleiste anzeigen zu lassen. Sprich da wirst du das selbst machen müssen:
http://delphi.about.com/od/formsdialogs/l/aa073101b.htm

(Ab Delphi 2007 gibt es Application.ShowMainFormOnTaskbar.)


jasocul - Fr 19.07.13 14:36

Ich verwende D2005 und XE2. Das Problem will ich in XE2 lösen. (Stehen auch beide im Profil :wink: )
Application.ShowMainFormOnTaskbar kennt der Compiler nicht. Zumindest mault er rum, dass er es nicht kennt. :?

Ich komme leider erst Montag wieder dazu, dass im Detail zu prüfen. Trotzdem schonmal Danke für den Ansatz.


Hidden - Fr 19.07.13 15:00

Hallo,

Es ist keine Methode, sondern eine Property: Application.MainFormOnTaskbar := true;.
Bei meinem Minesweeper [http://www.entwickler-ecke.de/viewtopic.php?t=111763] habe ich das gleiche Problem, allerdings wird das ShowModal-Formular bereits im OnFormShow-Ereignis zum ersten Mal aufgerufen, dort zumindest will sich auch so kein Taskleisteneintrag zeigen.

Mein Delphi 2010 packt Application.MainFormOnTaskbar := true; übrigens schon automatisch in die .dpr-Datei zum Projekt.

Grüße,
Daniel


jaenicke - Fr 19.07.13 16:19

user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Ich verwende D2005 und XE2. Das Problem will ich in XE2 lösen. (Stehen auch beide im Profil :wink: )
Da du da keins fett markiert hast, gehe ich immer vom Worst Case aus. :mrgreen:

user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Application.ShowMainFormOnTaskbar kennt der Compiler nicht. Zumindest mault er rum, dass er es nicht kennt. :?
Dann fehlt an der Stelle die Unit Forms, aber das sollte ohnehin normalerweise nur im Projektquelltext vor dem Erzeuge des ersten Formulars gesetzt werden.
// EDIT: Ok, MainFormOnTaskbar ohne Show.


Hidden - Fr 19.07.13 16:24

Da hat sich die wesentliche Information bei mir oben ver-Freud'scht: Die Property heißt MainFormOnTaskbar, nicht ShowMainFormOnTaskbar. :idea:


jasocul - Sa 20.07.13 12:25

MainFormOnTaskbar? Jaja, manchmal sind es Kleinigkeiten, die zu Verwechselungen führen.
Montag gehe ich das nochmal an und berichte dann hier. Zuhause habe ich nur D2005 und kein XE2 und kann das daher nicht testen.


jasocul - Mo 22.07.13 08:15

Das hatte auch keine Wirkung. Sobald ich Application.MainForm.Hide; ausführe, ist kein Eintrag mehr in der Taskbar. Die Property war auch schon standardmäßig gesetzt.


jaenicke - Mo 22.07.13 08:36

Ja, und wenn du dazu noch den Link oben nimmst und das CreateParams überschreibst, wirst du jedes Fenster einzeln in der Taskleiste haben, wenn es sichtbar ist.
(Mit SetWindowLong lässt sich das auch dynamisch setzen.)


jasocul - Mo 22.07.13 08:51

Vielen Dank.

Ich hatte den Link zwar schon einmal aufgerufen, aber inhaltlich ignoriert, da ich die Anwendung in XE2 programmiere. Vermutlich werde ich das dann erstmal dynamisch einbauen.
Sollte ich dabei noch auf Probleme stoßen, melde ich mich hier wieder. Aber so kompliziert ist das ja nun auch wieder nicht.


whitef - So 15.12.13 22:08

hi,
ich habe nochmal eine anschlussfrage:

ich würde gerne meine mainform "hiden" und form2 anzeigen lassen.
beim hide vorgang wird ja der task auch von der taskbar "gehidet".
Ein Application.MainFormOnTaskBar := True; bringt bei diesem Vorgehen auch keine Lösung.

Wie löst ihr soetwas?


Delphi-Quelltext
1:
2:
3:
mainform.hide;
Application.MainFormOnTaskBar := True;
form2.show;


VG


baumina - Mo 16.12.13 10:49

Zitat aus der Delphi-Hilfe :
Zitat:
MainFormOnTaskBar sollte beim Start gesetzt werden und während der gesamten Anwendungsdauer erhalten bleiben. Das Ändern dieser Eigenschaft zur Laufzeit könnte unerwartetes Verhalten verursachen.