Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fenster immer on Top (https://www.delphipraxis.net/104511-fenster-immer-top.html)

ddcool 5. Dez 2007 14:28


Fenster immer on Top
 
Hallo zusammen,

ich habe mal eine Frage :) Ich möchte dass eine Form aus meiner Anwendung immer maximiert im Vordergrund steht.
Wozu ich das brauche: Naja kurz und knapp. Mitarbeiter haben Tablet-Pcs, akku wird schwach, Windows Meldung kommt, ignoration der Mitarbeiter, Pc fährt in Standyby, Akku wird getauscht, pc wird angemacht, wlan noch nicht da, versuch weiter zu arbeiten, fehler. Ich will einfach nur dass bei einem bestimmten Akkustand sich ein Fenster in den Vordergrund schiebt, dass die den Akku wechseln müssen ohne taskmanager aufrufen zu können etc. Einfach gar nichts. Wie bekomme ich das mit dem Fenster so hin? Akkuabfrage etc funktioniert alles super.


Danke & Gruß

ddcool

DevidEspenschied 5. Dez 2007 14:33

Re: Fenster immer on Top
 
Du musst im Objektinspektor des Hauptformulars die Eigenschaft "FormStyle" auf "fsStayOnTop" setzen.

Dann dürfte es klappen.

BullsEye 5. Dez 2007 14:36

Re: Fenster immer on Top
 
Du kannst einfach, wenn was bestimmtes passiert das sich dann das fenster immer "On Top" ist.

Delphi-Quellcode:
IF CheckBox1.Checked THEN
Form1.FormStyle := fsStayOnTop
ELSE
Form1.FormStyle := fsNormal;
das ist jetzt "on top" wenn die CheckBox angeklickt ist.
Mit dem Maxiemiert musst du bissel rumgucken aber das kann man ja eig standardmäßig setzen...in den Eigenschaften
müsstest du unter "WindowState" finden und das dann auf "wsMaximed" setzten

Jelly 5. Dez 2007 14:39

Re: Fenster immer on Top
 
Zitat:

Zitat von ddcool
...ohne taskmanager aufrufen zu können etc. Einfach gar nichts.

Das wird allerdings schon etwas kniffliger, wenn überhaupt machbar :gruebel:

DevidEspenschied 5. Dez 2007 14:44

Re: Fenster immer on Top
 
Ich denke, Du meinst damit vergleichsweise den sicheren Desktop von Vista, der jeglichen Zugriff auf die Taskleiste und aktive Programme verhindert.

Die Sache mit dem Taskmanager dürfte unter XP garnicht zu realisieren sein. Das würde ja bedeuten, dass man alles andere blockieren muss, etwa komplette Windows Subsysteme. No Chance...

BullsEye 5. Dez 2007 14:47

Re: Fenster immer on Top
 
Da kann ich ja gleich meinen Windows Ordner löschen?! :wiejetzt:

DevidEspenschied 5. Dez 2007 14:53

Re: Fenster immer on Top
 
Zitat:

Zitat von BullsEye
Da kann ich ja gleich meinen Windows Ordner löschen?! :wiejetzt:

Wenn Du den Ordner überhaupt löschen kannst, weil Windows hunderte Dateien davon in Benutzung hat, wird das Windows-System irreparabel beschädigt und dürfte zu 100 Prozent den nächsten Bootvorgang verhindern. Im Unternehmensumfeld eine kleine Katastrophe - milde ausgedrückt.

Unter XP dürfte das vorgeschlagene nicht gehen, da bin ich mir sehr sicher.

BullsEye 5. Dez 2007 14:56

Re: Fenster immer on Top
 
Man könnte zwar die explorer.exe beenden aber das hindert ja niemanden daran, den Taskmanager aufzurufen.
Evtl könntest du die explorer.exe beenden und die Tastertur sperren dann könnte es evtl gehen. zumindestens fällt mir gerade nix ein wie man dann noch was beenden könnte außer du besitzt einen Button Beenden oder ne Shutdown funktion o.ä.

ddcool 5. Dez 2007 15:09

Re: Fenster immer on Top
 
Also momentan habe ich es so:

FormStyle := fsStayOnTop
WindowState := wsMaximized


und ein Timer mit der alle 1ms das macht:

Cursor := crNone;
Self.BringToFront;
Self.SetFocus;
Application.ProcessMessages;

das klappt auch ziemlich gut, nur wenn der taskmanager aufgerufen wird, fängt die form an zu flackern, weil der taskmanager sich ja auch versucht in den vordergrund zu schieben. Vielleicht gibt es ja eine Möglichkeit das auch noch zu verhindern.

DevidEspenschied 5. Dez 2007 15:23

Re: Fenster immer on Top
 
Zitat:

Zitat von BullsEye
Man könnte zwar die explorer.exe beenden aber das hindert ja niemanden daran, den Taskmanager aufzurufen.
Evtl könntest du die explorer.exe beenden und die Tastertur sperren dann könnte es evtl gehen. zumindestens fällt mir gerade nix ein wie man dann noch was beenden könnte außer du besitzt einen Button Beenden oder ne Shutdown funktion o.ä.

Diesen Weg hatte ich mir auch überlegt, das Problem ist aber, dass wir hier von einer produktiven Umgebung mit offenen Applikationen und Dateien reden. Nach einem Explorer-Neustart wird das Systray unten rechts ebenfalls neu geladen, und bis zu diesem Zeitpunkt offene Systray-Programme mit temporären Dateien sind verloren.

Edit: Ich würde mir in meiner Herangehensweise die Datei taskmgr.exe im Windows\System32-Verzeichnis greifen und bspw. die Lesemöglichkeit mit normalen Rechten verhindern. Damit kann der normale Anwender den Taskmanager nicht mehr starten, und falls es doch mal zum Einfrieren einer Anwendung kommt, muss sowieso der Admin ran und kann einen Benutzerwechsel zum Admin-Konto durchführen und dort mit dem Taskmanager rumtoben.

Das wäre jetzt meine Vorgehensweise, wenn ich das Problem hätte. In meiner damaligen Windows-Citrix-Novell Administration haben wir den Anwendern den Zugriff auf den Taskmanager komplett genommen - zumal die Anwender damit auch überfordert gewesen wären.

Matze 5. Dez 2007 15:27

Re: Fenster immer on Top
 
Zitat:

Zitat von ddcool
und ein Timer mit der alle 1ms das macht [...]

Das ist keine gute Lösung und sicher erst recht nicht. Des weiteren packt TTimer keine 1ms-Intervalle. Unter Win9x liegen diese bei rund 50ms unter WinNT bei rund 10ms, nur als ergänzende Info.

ddcool 5. Dez 2007 15:28

Re: Fenster immer on Top
 
Ja war jetzt auch mehr so eine Notlösung. Der Timer wird dann aktiviert, wenn die Form angezeit wird und deaktiviert bevor sie wieder geschlossen wird. Nur so als Info. Wäre trotzdem schön, wenn jemand noch einen besseren Vorschlag hätte.

Tarry 28. Jan 2008 15:58

Re: Fenster immer on Top
 
Du könntest den Taskmanager per Registry "sperren" das funktioniert ganz gut...
Schreib mir ne PN, dann kann ich dir gerne den Code schicken... ;)

Du brauchst für die Registry aber natürlich Admin Rechte, die du aber denke ich mal hast.

Matze 28. Jan 2008 16:31

Re: Fenster immer on Top
 
Zitat:

Zitat von Tarry
Du könntest den Taskmanager per Registry "sperren" das funktioniert ganz gut...
Schreib mir ne PN, dann kann ich dir gerne den Code schicken... ;)

Wieso per PN? Der Code findet sich übrigens auch in der DP.

Aber das ist der größte Schwachsinn, den man machen kann. Ich würde knallhart jede Software runterschmeißen, die auch nur annähernd versucht, solche Systemänderungen vorzunehmen.

shmia 28. Jan 2008 16:34

Re: Fenster immer on Top
 
Zitat:

Zitat von ddcool
und ein Timer mit der alle 1ms das macht:

Warum ein Intervall von 1 ms ???? :wall:
Es reicht doch, die Meldung alle 15 Sekunden hochpoppen zu lassen!
So hat der Mitarbeiter wenigstens noch eine Chance kurz was zu speichern und dann herunterzufahren.

SirThornberry 28. Jan 2008 17:12

Re: Fenster immer on Top
 
wenn du dem nutzer so gut wie alles entziehen willst könntest du einen neuen Desktop anlegen und darauf dein Programm zeigen. Alle anderen Programme sind dann erstmal für den Nutzer nicht verfügbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 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-2025 by Thomas Breitkreuz