![]() |
Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Ich habe ein Programm, das eine große Menge Daten auf Platte schreiben muss. Das kann zwischen 30sec und 10min dauern und während dieser Zeit soll der Anwender nur einen Fortschrittsbalken in der Statuszeile sehen, aber das Programm nicht mehr bedienen können (ausser das Fenster verschieben, minimieren, maximieren, beenden).
Leider habe ich bisher keine Möglichkeit gefunden das einfach umzusetzen. Was ich jetzt mache ist eine eigene Form in der ein TProgressBar liegt. Die Form hat keine Border und wird zur Laufzeit an der Position der Statusbar mit ShowModal ausgegeben. Das kommt dem was ich machen will schon recht nahe hat aber den Nachteil, dass ich das Fenster der Applikation nicht mehr verschieben/minimieren kann. Gibt es sonst eine Möglichkeit die Eingabe an mein Programm für diesen Zeitraum zu sperren? TIA Whookie |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Du könntest in einer Schleife alle Controls disablen.
Sherlock |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Wenn es um so lange Zeitspannen geht, gehört sich das Programmfenster m.E. komplett ausgeblendet. Die Fortschrittsanzeige packst du in eine extra Form (zusammen mit der Abbrechen-Funktion ;) ) und die wird angezeigt während der Vorgang läuft und sonst nix.
Nur so als Anregung. |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Zitat:
spart die Schleife :) Gruß Frank |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Form1.Enabled := False; ??
|
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Zitat:
Gruß Frank |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Lass dir per findcomponent alle Controls geben und deaktiviere sie!
Oder einfacher: alle Controls auf ein Panel legen, dass sich über die gesamte form erstreckt und dann das Panel Enabled := False setzen, nicht die Form! |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Zitat:
@Threadersteller: Würde es als Anwender auch bevorzugen, wenn die Anwendung dann von sich aus komplett verschwindet ... ich käme wohl auch gar nicht auf die Idee, eine arbeitende Anwendung zu minimieren, weil das in 90% der Fälle ja eh nicht möglich ist :/ |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Zitat:
Gruß Frank |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Zitat:
MfG |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Zitat:
|
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Nennt man sowas nicht auch "schmuddelprogrammierung"? :smile2:
Hier hatte ich mir damals auch was zusammengeschrieben:
Delphi-Quellcode:
Jetzt brauchst du nur noch wiefolgt aufufen:
{*----------------------------------------------------------------------------------------
De/-aktiviert alle Controls im übergebenem TWinControl @Comment Aufgrund der Darstellung geh ich rekursiv durch alle Untercontrols durch @Param Win Alles hierdrin wird disabled Enable Aktivieren/Deaktivieren ----------------------------------------------------------------------------------------*} procedure EnableCntrls(const Win: TWinControl; const Enable: Boolean = true); var i: Integer; begin for i := 0 to Win.ControlCount - 1 do begin Win.Controls[i].Enabled := Enable; if Win.Controls[i] is TWinControl then EnableCntrls(TWinControl(Win.Controls[i]), Enable); end; end;
Delphi-Quellcode:
EnableCntrls(Self, false);
|
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Zitat:
MfG und sorry |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Ich packe da mal noch meine Funktion aus der Code-Library zu ;-)
![]() Viele Grüße |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Liste der Anhänge anzeigen (Anzahl: 1)
Erst mal danke für die vielen Hinweise!
Ich habe mir natürlich auch einige Gedanken darüber gemacht, wie sowas umgesetzt werden könnte. Disablen aller Controls (= Menü, Toolbars, Hauptform) ist eine Möglichkeit, die ich nicht Erwägung gezogen hatte, sie hat halt den Nachteil, das dann alles "grau" wird, was unschön sein könnte. Ein Programm das eben mal verschwindet, weil das Speichern länger dauert (und dann eventuell auch noch selber wieder aus der Versenkung auftaucht) finde ich allerdings noch viel schlimmer. Ein Bild von meinem Programm Design habe ich angehängt. Vorstellen könnte ich mir auch, einen Dialog der Modal über dem Programm liegt und ähnlich dem Kopieren-Dialog in Windows eine Animation + Fortschrittsbalken bietet und so das Programm "legal" sperrt. Ist aber auch ned so schön, wenn sowas nach dem "Speichern"-Dialog aufpoppt ... Eine weitere Option wäre es einen "Screenshot" vom aktuellen Programm zu machen, die eigentliche Form zu verstecken und eine "Dummy-Form" mit dem Bild + Fortschrittsbalken anzuzeigen (so macht Windows das mit Programmen die sich nicht mehr melden)... naja ... irgendwie auch nicht schön? Gibt es dazu noch Meinungen? LG Whookie |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Demodino im Anhang MfG |
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
Das mit dem Panel sieht nicht schlecht aus, nur das Hauptmenü bleibt davon leider ausgeschlossen ...
|
Re: Eingabeinterface kurzeitig sperren (Maus+Tastatur)
du könntest das Hauptmenü zeitweise entfernen (form.menu:=nil;) und danach wieder zuweisen.
für den rest wäre evtl auch noch eine Möglichkeit, wie vorher gesagt alles auf ein Panel, dieses aber verstecken (panel.Visible:=false;). hätte den vorteil, dass man das fenster noch normal bedienen kann, aber die Aktionscontrols nicht bedienbar sind. an der Stelle wo das Panel war kannst du ein anderes Panel einblenden, was deinen Fortschrittsbalken und ggf. weitere Infos, eine Grafik oder Animation anzeigt. Gruß Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 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