Hallo,
in einer Anwendung soll ein Feld geprüft werden, ob es vom Kontext her richtig ist (also die Daten, die der Nutzer gerade eingegeben hat), bevor auf einen neuen Datensatz zugegriffen werden kann.
Ich habe mir das mit BeforeScroll hingewurstelt und frage dort, ob alles passt, wenn ja, dann mache normal weiter, wenn nein, dann setze wieder alten Wert, bei Abbruch gehe zurück zum letzten bearbeiteten Datensatz.
Der "Abbruch" ist umständlich und konnte ich nur mit Hilfsvariablen und asynchronen Methoden lösen.
Das kommt mir arg hölzern vor. Wie macht man es denn eigentlich richtig?
Mein Testprojekt für SQLDB und SQLite anbei (SQLite dll nicht - müsste noch ins Projektverzeichnis kopiert werden).
[gelöst] Scroll abbrechen
[gelöst] Scroll abbrechen
- Dateianhänge
-
SqliteScrollAbort.zip
- (3.94 KiB) 62-mal heruntergeladen
Zuletzt geändert von Michl am Mo 7. Feb 2022, 12:46, insgesamt 1-mal geändert.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 289
- Registriert: Mo 24. Aug 2020, 14:16
- OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
- CPU-Target: i386
Re: Scroll abbrechen
Ohne es mir bisher angesehen zu haben - warum nicht BeforePost...? Das hier zB:
bleibt 'ohne weiteres' auf dem Record, belässt den DataSet im Edit-Modus und bricht auch jede weitere Aktion wie zB das Aufsuchen eines anderen Records durch VK_UP odgl ab.
Code: Alles auswählen
procedure TdmMain.qKategBeforePost(DataSet: TDataSet);
begin
if qKategName.IsNull then
begin
ShowMessage('Will Namen haben...!');
SysUtils.Abort;
end;
end;
Re: Scroll abbrechen
Das Leben kann so einfach sein.
Super! Das funktioniert. Danke!!!
Super! Das funktioniert. Danke!!!
- Dateianhänge
-
SqliteScrollAbortFunktioniert.zip
- (3.84 KiB) 71-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;