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
Benutzerbild von haentschman
haentschman

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

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 05: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.

Angehängte Grafiken
Dateityp: png screen.png (46,5 KB, 31x aufgerufen)

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

n/a Beiträge
 
#2

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 08: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.458 Beiträge
 
Delphi 12 Athens
 
#3

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 08: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
989 Beiträge
 
Delphi 6 Professional
 
#4

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 09: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 09:36 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, 10: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.666 Beiträge
 
Delphi 12 Athens
 
#6

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 10: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.555 Beiträge
 
Delphi 12 Athens
 
#7

AW: Form während Erfassung in Grid blokieren

  Alt 26. Feb 2017, 12: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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (26. Feb 2017 um 12:50 Uhr)
  Mit Zitat antworten Zitat
pesi

Registriert seit: 29. Aug 2003
Ort: 36217 Ronshausen
117 Beiträge
 
Delphi XE5 Professional
 
#8

AW: Form während Erfassung in Grid blokieren

  Alt 27. Feb 2017, 14:08
Ich würde ein Panel auf die Form legen und dort alle Steuerelemente AUSSER dem Grid ablegen. So musst Du nur das Panel aktiv/inaktiv setzen und schon hast Du das gewünschte Ergebnis. ....also außer natürlich die Systemmenüs der Form zum Schließen/Maximieren etc., die kannst Du so natürlich nicht deaktivieren
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:39 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