AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form während Erfassung in Grid blokieren

Ein Thema von ASKtec · begonnen am 25. Feb 2017 · letzter Beitrag vom 27. Feb 2017
Antwort Antwort
Seite 1 von 2  1 2      
ASKtec

Registriert seit: 19. Okt 2007
38 Beiträge
 
#1

Form während Erfassung in Grid blokieren

  Alt 25. Feb 2017, 19:42
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Form während Erfassung in Grid blokieren

  Alt 25. Feb 2017, 19:50
Deaktiviere alle Steuerelemente, die nicht angeklickt werden dürfen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 01:13
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.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#4

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 06:43
Moin...
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. Irgendwann hatte ich keine Lust mehr auf: "Eventualitäten beachten"!

Alternative:
Dafür habe ich mir "Inline Editoren" gebaut. Im Prinzip sind das stinknormale normale modale TForm. Da hat man keine Klickprobleme außerhalb des "Editors". 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. 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.

Miniaturansicht angehängter Grafiken
screen.png  

Geändert von haentschman (26. Feb 2017 um 08:37 Uhr)
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#5

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 09:08
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;
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#6

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 09:28
Moin...
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.
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.
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#7

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 10:15
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;

Geändert von HolgerX (26. Feb 2017 um 10:36 Uhr)
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#8

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 11:24

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

Ja, das funktioniert gut.
ClipCursor sollte auch nur ein Denkanstoss sein.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 11:27
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).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#10

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 13:41
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Feb 2017 um 13:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.
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