Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Form während Erfassung in Grid blokieren (https://www.delphipraxis.net/191860-form-waehrend-erfassung-grid-blokieren.html)

ASKtec 25. Feb 2017 18:42

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

Luckie 25. Feb 2017 18:50

AW: Form während Erfassung in Grid blokieren
 
Deaktiviere alle Steuerelemente, die nicht angeklickt werden dürfen.

Aviator 26. Feb 2017 00:13

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.

haentschman 26. Feb 2017 05:43

AW: Form während Erfassung in Grid blokieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin...:P
Zitat:

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"...
...früher hatte ich das auch so. :wink: Irgendwann hatte ich keine Lust mehr auf: "Eventualitäten beachten"!

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:

t.roller 26. Feb 2017 08:08

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;

haentschman 26. Feb 2017 08:28

AW: Form während Erfassung in Grid blokieren
 
Moin...:P
Zitat:

ClipCursor
http://www.delphipraxis.net/dp_refer...65035a3&lib=dp
...ist auch nicht ohne. Da setzt man sich wieder andere Flöhe in den Pelz. :wink:
Beispiel:
Zitat:

Kann es sein, dass ClipCursor in einer virtuellen Maschine nicht funktioniert? Aufgefallen ist es mir bei einem meiner eigenen Programme. Unter 2k & XP funktioniert es wunderbar. Gleiche Systeme in Microsofts Virtual PC 2004: ClipCursor hat keinen Effekt. (Ebenso wenig kann man anscheinend die Mouse ausblenden; aber das gehört nicht hier her)
Ich hatte die Frage so verstanden das die Zeile die editiert wird "aktiv" bleibt aber das Grid selbst nicht. :gruebel:

HolgerX 26. Feb 2017 09:15

AW: Form während Erfassung in Grid blokieren
 
Zitat:

Zitat von t.roller (Beitrag 1362691)
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;


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;

t.roller 26. Feb 2017 10:24

AW: Form während Erfassung in Grid blokieren
 
Zitat:

Zitat von HolgerX (Beitrag 1362695)

Delphi-Quellcode:
var
  Rect: TRect;
begin
  GetWindowRect(DBGrid1.Handle, Rect);
  ClipCursor(@Rect);
end;


Ja, das funktioniert gut.
ClipCursor sollte auch nur ein Denkanstoss sein.

DeddyH 26. Feb 2017 10:27

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).

himitsu 26. Feb 2017 12:41

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 22:57 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz