![]() |
Form während Erfassung in Grid blokieren
Hallo zusammen,
ich habe auf einer Form unter anderem ein TAdvStringGrid von TMS. In diesem Grid kann man Daten zeilenweise erfassen und muss die Erfassung der Zeile mit ENTER abschließen. Nun kommt es zu unerwünschten Nebeneffekten wenn der Anwender mitten in der Erfassung mit der Maus auf der Form "rumklickt"... Nun meine Frage... Gibt es eine Möglichkeit die gesamte Form bis auf das Grid zu deaktivieren solange das Grid sich im EDIT-Modus befindet ohne dass ich alles manuell per enable := false setzen muss? Ob in dem Grid editiert wird bekomme ich mit, aber wie kann ich verhindern dass der Fokus auf andere Objekte wandert? Ich kenne von einer anderen Applikation ein solches Verhalten. Hier verhält sich das gesamte Programm als ob das Grid Modal angezeigt werden würde sobald ind diesem editiert wird (Ich weiß allerdings nicht welches Grid in dieser Applikation genutzt wird)... Vielleicht hat ja jemand hier eine Idee wie ich das lösen kann... Vielen Dank vorab für Eure Unterstützung... Danke Andreas |
AW: Form während Erfassung in Grid blokieren
Deaktiviere alle Steuerelemente, die nicht angeklickt werden dürfen.
|
AW: Form während Erfassung in Grid blokieren
Oder prüfe beim OnExit des Grids ob die Bearbeitung abgeschlossen ist. Ist dies nicht der Fall, dann eine Meldung ausgeben "Bitte Bearbeitung abschließen oder Datensatz verwerfen" (oder so was ähnliches) und den Fokus wieder auf das Grid setzen.
Alternativ kannst du die unschönen Nebeneffekte auch noch anders abfangen. Weil die Nebeneffekte erscheinen nur dadurch, dass du nicht alle Eventualitäten beachtet hast und nicht entsprechend darauf reagierst. |
AW: Form während Erfassung in Grid blokieren
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...:P
Zitat:
Alternative: Dafür habe ich mir "Inline Editoren" :zwinker: gebaut. Im Prinzip sind das stinknormale normale modale TForm. Da hat man keine Klickprobleme außerhalb des "Editors". :cheer: Die werden ganz normal designed oder abgeleitet. Für das Editieren im Grid wird der "Editor" erzeugt, die Positionen/Größe relativ zur Zeile eingestellt und angezeigt. Ich habe mich, für meinen Teil, für die Variante ohne Logik im "Editor" entschieden. Die Daten gehen rein, werden manipuliert, ausgelesen und außerhalb des "Editors" gespeichert. Man kann die Speicherlogik auch im "Editor" unterbringen. Wie man mag. :zwinker: Wenn du dich für diese Variante entscheidest und mehr Editoren brauchst, dann sollte das "Parent" Control dem Editor bekannt sein. Da kannst du die Edits z.B. automatisch entsprechend der Spalte ausrichten. Der Vorteil ist, das man bei der Eingabe nicht auf die einzelne Zelle beschränkt ist. Da sind auch andere Varianten mit komplexen Objekten möglich. :thumb: :hi: |
AW: Form während Erfassung in Grid blokieren
ClipCursor
Beispiel:
Delphi-Quellcode:
procedure TForm1.DBGrid1MouseEnter(Sender: TObject);
var Rect: TRect; begin Rect.Left := DBGrid1.Left; Rect.Top := DBGrid1.Top; Rect.Right := DBGrid1.Left + DBGrid1.Width; Rect.Bottom := DBGrid1.Top + DBGrid1.Height; ClipCursor(@Rect); end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if Key=#27 then ClipCursor(nil);// ESC end; |
AW: Form während Erfassung in Grid blokieren
Moin...:P
Zitat:
![]() ...ist auch nicht ohne. Da setzt man sich wieder andere Flöhe in den Pelz. :wink: Beispiel: Zitat:
|
AW: Form während Erfassung in Grid blokieren
Zitat:
Hmm.. müsste das nicht eher so sein?
Delphi-Quellcode:
var
Rect: TRect; begin Rect.TopLeft := ClientToScreen(DBGrid1.BoundsRect.TopLeft); Rect.BottomRight := ClientToScreen(DBGrid1.BoundsRect.BottomRight); ClipCursor(@Rect); end; So bekommt das ClipCursor den tatsächlichen Rect des Grids auf dem Screen. Ansonsten ist der irgendwo, da Grid-Left in abhängigkeit vom Parent ist und nicht vom Screen... Edit: Oder (verkürzt)
Delphi-Quellcode:
var
Rect: TRect; begin GetWindowRect(DBGrid1.Handle, Rect); ClipCursor(@Rect); end; |
AW: Form während Erfassung in Grid blokieren
Zitat:
Ja, das funktioniert gut. ClipCursor sollte auch nur ein Denkanstoss sein. |
AW: Form während Erfassung in Grid blokieren
Sry, aber eine Software, die mir die Maus einsperrt, flöge in Lichtgeschwindigkeit von meiner Festplatte (es sei denn, ich hätte sie genau zu diesem Zweck installiert).
|
AW: Form während Erfassung in Grid blokieren
Man kann alles auch ohne Maus machen.
Was Detlef meint, dass sich solche Sperren maximal auf die eigene Anwendung auswirken sollten und auch da nur mit Bedacht, denn was ist, wenn man die Eingabe abbrechen will? Und sicherheitshalber bietet Windows auch eine Möglichkeit, womit man diese CursorSperre abschalten kann, falls irgendein Programm sowas benutzt und den User einsperren will. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 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