Ereignishandling

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
Zvoni
Beiträge: 368
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Ereignishandling

Beitrag von Zvoni »

wodim hat geschrieben: Do 6. Feb 2025, 13:15 Milchmädchenrechnung: Was kosten 10 Minuten in der Klinik? Mal 10 (wie bei mir) mal >10.000 stationäre Patienten macht jährlich wieviel ...
Und jeder denkt, dass Ärzte so viel verdienen, weil sie lange studiert haben....... :twisted:
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Zvoni hat geschrieben: Do 6. Feb 2025, 13:20
wodim hat geschrieben: Do 6. Feb 2025, 13:15 Milchmädchenrechnung: Was kosten 10 Minuten in der Klinik? Mal 10 (wie bei mir) mal >10.000 stationäre Patienten macht jährlich wieviel ...
Und jeder denkt, dass Ärzte so viel verdienen, weil sie lange studiert haben....... :twisted:
Naja, so einen Anmeldebogen ausfüllen kann auch nicht jeder. :wink: Ernst wurde es allerdings, als sich in unsere Maildiskussion danach ein Manager eingeschaltet hat (der sich nicht nur so nennt, sondern einer ist, als "rechte Hand" des GF) ... Zum Glück nicht wieder solche Reaktionen wie aus einer anderen Klinik vor etlichen Jahren: "Daran werden Sie nichts ändern!" Und ein anderer: "Danke für die Anregung, wir haben jetzt ein Projekt gestartet, um die Anmeldebögen der Abteilungen zu vereinheitlichen." :roll: Da hab' ich sie nicht gefragt, ob ich chinesisch rede, sie einen an der Klatsche haben, oder woran sonst es liegen könnte, dass sie mich nicht verstanden hatten. :wink:
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Benutzeravatar
Zvoni
Beiträge: 368
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Ereignishandling

Beitrag von Zvoni »

wodim hat geschrieben: Do 6. Feb 2025, 13:49
Zvoni hat geschrieben: Do 6. Feb 2025, 13:20
wodim hat geschrieben: Do 6. Feb 2025, 13:15 Milchmädchenrechnung: Was kosten 10 Minuten in der Klinik? Mal 10 (wie bei mir) mal >10.000 stationäre Patienten macht jährlich wieviel ...
Und jeder denkt, dass Ärzte so viel verdienen, weil sie lange studiert haben....... :twisted:
Naja, so einen Anmeldebogen ausfüllen kann auch nicht jeder. :wink: Ernst wurde es allerdings, als sich in unsere Maildiskussion danach ein Manager eingeschaltet hat (der sich nicht nur so nennt, sondern einer ist, als "rechte Hand" des GF) ... Zum Glück nicht wieder solche Reaktionen wie aus einer anderen Klinik vor etlichen Jahren: "Daran werden Sie nichts ändern!" Und ein anderer: "Danke für die Anregung, wir haben jetzt ein Projekt gestartet, um die Anmeldebögen der Abteilungen zu vereinheitlichen." :roll: Da hab' ich sie nicht gefragt, ob ich chinesisch rede, sie einen an der Klatsche haben, oder woran sonst es liegen könnte, dass sie mich nicht verstanden hatten. :wink:
..... erinnert mich irgendwie an Dr. House.... :lol:
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Zvoni hat geschrieben: Do 6. Feb 2025, 13:50 ..... erinnert mich irgendwie an Dr. House.... :lol:
Naja, nicht alles, was hinkt, ist ein Vergleich. :wink: Die "Nichtversteher" in der anderen Klinik sind ja keine Ärzte, und denen haben sie nichts zu sagen. Das sind Kapazitäten von internationalem Rang, nicht übertrieben:

https://www.krankenhaus-tutzing.de/uebe ... nikleitung
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Zvoni hat geschrieben: Do 6. Feb 2025, 08:20OnActivate --> Die Form wurde gezeichnet, und ist jetzt sichtbar. --> Achtung: OnActivate wird JEDESMAL ausgeführt, wenn die Form den Fokus erhält
Leider nicht. (Gerade getestet, wer's nicht glaubt, probier's selber.) "Leider" sage ich jetzt, weil sich immer was tun soll. Dem eingeloggten User werden bestimmte Daten angezeigt. Dann braucht er die erst mal nicht, drückt das Fenster in den "Hintergund". Wenn er's wieder vorholt, kann in der Zwischenzeit ein anderer was in der Datenbank geändert haben. Dann muss ein "Refresh" stattfinden, wie auch immer. Any ideas?
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Benutzeravatar
Zvoni
Beiträge: 368
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Ereignishandling

Beitrag von Zvoni »

wodim hat geschrieben: Do 6. Feb 2025, 15:40
Zvoni hat geschrieben: Do 6. Feb 2025, 08:20OnActivate --> Die Form wurde gezeichnet, und ist jetzt sichtbar. --> Achtung: OnActivate wird JEDESMAL ausgeführt, wenn die Form den Fokus erhält
Leider nicht. (Gerade getestet, wer's nicht glaubt, probier's selber.) "Leider" sage ich jetzt, weil sich immer was tun soll. Dem eingeloggten User werden bestimmte Daten angezeigt. Dann braucht er die erst mal nicht, drückt das Fenster in den "Hintergund". Wenn er's wieder vorholt, kann in der Zwischenzeit ein anderer was in der Datenbank geändert haben. Dann muss ein "Refresh" stattfinden, wie auch immer. Any ideas?
Nutz die Sperrvariable NUR für den Login (bzw. nur für das, was beim ERSTEN MAL ausgeführt werden soll)

Code: Alles auswählen

type
  TForm1 = class(TForm)
    ...
  private
    FActivated: Boolean;
    ...
  end;

...
procedure TForm1.FormActivate(Sender: TObject);
begin
 if not FActivated then begin
    FActivated := True;
    // Code to be executed when the form is activated for the 1st time.
    MyLogin:=TLoginForm:Create;
    MyLogin.ShowModal;
    //Erzeuge Connection, Transaction usw.
    //blablabla was sonst noch mit Login zu tun hat: Fehlerhafte Anmeldung usw.
  end;
  //Ab hier wird JEDESMAL ausgeführt, wenn Form Fokus erhält
  MyQuery.Refresh; //Oder was auch immer
  //BLablabla, was auch immer
  end;
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6768
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Ereignishandling

Beitrag von af0815 »

wodim hat geschrieben: Do 6. Feb 2025, 15:40
Zvoni hat geschrieben: Do 6. Feb 2025, 08:20OnActivate --> Die Form wurde gezeichnet, und ist jetzt sichtbar. --> Achtung: OnActivate wird JEDESMAL ausgeführt, wenn die Form den Fokus erhält
Leider nicht. (Gerade getestet, wer's nicht glaubt, probier's selber.) "Leider" sage ich jetzt, weil sich immer was tun soll. Dem eingeloggten User werden bestimmte Daten angezeigt. Dann braucht er die erst mal nicht, drückt das Fenster in den "Hintergund". Wenn er's wieder vorholt, kann in der Zwischenzeit ein anderer was in der Datenbank geändert haben. Dann muss ein "Refresh" stattfinden, wie auch immer. Any ideas?
Es gibt viele weite Event wie OnShow, OnHide,.... jede mit einem anderen Focus und einem anderen Verhalten. https://wiki.freepascal.org/Event_order/de
https://wiki.freepascal.org/Lazarus_Tut ... nt_Actions

Wobei es IMHO geringe Unterschiede zwischen den Widgetsets/Betriebssystemen geben könnte (oder ist mein Gedächnis schon veraltet ?).
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Zvoni hat geschrieben: Do 6. Feb 2025, 15:48
wodim hat geschrieben: Do 6. Feb 2025, 15:40
Zvoni hat geschrieben: Do 6. Feb 2025, 08:20OnActivate --> Die Form wurde gezeichnet, und ist jetzt sichtbar. --> Achtung: OnActivate wird JEDESMAL ausgeführt, wenn die Form den Fokus erhält
Leider nicht. (Gerade getestet, wer's nicht glaubt, probier's selber.) "Leider" sage ich jetzt, weil sich immer was tun soll. Dem eingeloggten User werden bestimmte Daten angezeigt. Dann braucht er die erst mal nicht, drückt das Fenster in den "Hintergund". Wenn er's wieder vorholt, kann in der Zwischenzeit ein anderer was in der Datenbank geändert haben. Dann muss ein "Refresh" stattfinden, wie auch immer. Any ideas?
Nutz die Sperrvariable NUR für den Login (bzw. nur für das, was beim ERSTEN MAL ausgeführt werden soll)
Entschudige, aber das kleine Einmaleins muss man mir nicht erklären. :wink: Wenn ich sage, "hab's getestet", dann natürlich ohne die.
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 581
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 3.9 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Ereignishandling

Beitrag von Niesi »

wodim hat geschrieben: Do 6. Feb 2025, 15:40
...

Leider nicht. (Gerade getestet, wer's nicht glaubt, probier's selber.) "Leider" sage ich jetzt, weil sich immer was tun soll. Dem eingeloggten User werden bestimmte Daten angezeigt. Dann braucht er die erst mal nicht, drückt das Fenster in den "Hintergund". Wenn er's wieder vorholt, kann in der Zwischenzeit ein anderer was in der Datenbank geändert haben. Dann muss ein "Refresh" stattfinden, wie auch immer. Any ideas?
.

Hier wird OnActivate jedesmal aufgerufen, wenn INNERHALB der Anwendung MainForm den Focus erhält.

Kann es sein, dass Dir da vorschwebt, dass dies auch im Zusammenhang mit anderen Anwendungungen passieren soll?


OnActivate.7z
(171.38 KiB) 32-mal heruntergeladen

P.S.: Sorry, falls die beiden Forms nicht auf dem Monitor erscheinen: Im Objektinspektor die Eigenschaft "Left" auf 10 setzen, dann sollte das klappen. Die waren zu weit rechts ...
Zuletzt geändert von Niesi am Do 6. Feb 2025, 20:27, insgesamt 1-mal geändert.
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

af0815 hat geschrieben: Do 6. Feb 2025, 16:09 Es gibt viele weite Event wie OnShow, OnHide,.... jede mit einem anderen Focus und einem anderen Verhalten.
https://wiki.freepascal.org/Lazarus_Tut ... nt_Actions
Ich weiß, hab' sie auch schon durchgeblättert. Ich glaube eher, mein Ansatz war falsch: Ein "Refresh" muss ausgelöst werden, wenn sich Daten geändert haben. Das muss das "dahinter liegende" Programm dem Formular "irgendwie" mitteilen. Ich denke sowieso nicht an einen direkten Zugriff auf die Datenbank, sondern an das Prinzip "Three Tier" (MVC).
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Niesi hat geschrieben: Do 6. Feb 2025, 17:53 Hier wird OnActivate jedesmal aufgerufen, wenn INNERHALB der Anwendung MainForm den Focus erhält.
Kann es sein, dass Dir da vorschwebt, dass dies auch im Zusammenhang mit anderen Anwendungungen passieren soll?
Nein, ich hab' das auch schon mit einem anderen Projekt aus dem "examples" probiert, dasselbe Ergebnis. Werd' mir dein Beispiel mal zu Gemüte führen, ob's da funktioniert? Wenn, ist wieder mal Fehlersuche angesagt ...
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 581
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 3.9 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
Kontaktdaten:

Re: Ereignishandling

Beitrag von Niesi »

Ich habe es jetzt auch noch mit Windoof 10 ausprobiert - das Ereignis "OnActivate" ereignet sich bei JEDEM Wechsel des Focusses, sowohl unter Linux als auch da.

Anbei noch das Testprojekt mit den Forms an "vernünftigen" Positionen ...


OnActivate.7z
(170.96 KiB) 53-mal heruntergeladen
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Niesi hat geschrieben: Do 6. Feb 2025, 20:43 Ich habe es jetzt auch noch mit Windoof 10 ausprobiert
Ok, auch möglich, dass das an meinem Debian liegt - das spinnt sowieso in mancher Beziehung. Seit Debian 10 oder 11 geht der Ruhezustand nicht mehr, und frag' nicht nach Sonnenschein, welche Klimmzüge nötig waren, damit das GUI (Mate) auf meinen zwei neuen Boards mit AMD-Grafik überhaupt lief ... Mit meinem neuen Laptop (der mit Win 11 geliefert wurde, hab' natürlich auch sofort Linux "daneben" installiert, Dual-Boot), habe ich mich auch angeschmiert: Da hat Linux zwar keine Probleme mit der Grafik, aber mit dem Netzwerk geht nix. Absolut kein Linux-Treiber dafür aufzutreiben ... Ok, wollen wir den Rahmen des Threads mal nicht zu weit dehnen. :wink:
Niesi hat geschrieben: Do 6. Feb 2025, 20:43- das Ereignis "OnActivate" ereignet sich bei JEDEM Wechsel des Focusses, sowohl unter Linux als auch da.
Aber nur da. ;) Also wenn der Focus wechselt. Und wenn nicht? Wie gesagt: Dem Formular (resp. dem eingeloggten User) muss jede Änderung in der Datenbank, die seine Daten betreffen, sofort mitgeteilt werden, nicht erst, wenn er danach fragt. (Das "große" Ziel ist ja: Nicht nur dieser vergleichsweise simplen Anwendung "zum Ansehen", sondern automatisch ALLEN Programmen, die mit Patientendaten arbeiten. Und wenn die keine Schnittstellen haben, müssen eben welche programmiert werden. Für beide Richtungen, damit ließe sich auch der aufwändige, aber leider immer wieder nötige Datenabgleich weitestgehend automatisieren ...)

Zukunftsmusik (aber @Niesi: So viel erst mal zu deiner Frage, was mir so vorschwebt). :wink: Zurück zur Gegenwart: Da muss man also in umgekehrter Richtung vorgehen, da nützen Form-Ereignisse nichts, die müssen "von außen" initiiert werden. Ich kann doch zu keinem User sagen (oder ins Handbuch oder in die Hilfe schreiben): "Sorgen Sie dafür, dass das Fenster immer mal den Fokus kriegt, damit die Daten aktualisiert werden." Da zeigen die mir doch (bestenfalls) einen Vogel und ich brauche ihnen in diesem Leben meine Programmierkünste nie wieder anzubieten. Anderen Leuten auch nicht, wenn sich das 'rumspricht, und das würde umgehen wie ein Lauffeuer. :wink:
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Zuletzt geändert von wodim am Fr 7. Feb 2025, 02:06, insgesamt 2-mal geändert.
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

wodim
Beiträge: 125
Registriert: Fr 9. Aug 2013, 08:28
OS, Lazarus, FPC: Debian 12 (Bücherwurm), M$Win10, Win11, Laz 3.8 FPC 3.2.2
CPU-Target: 64Bit

Re: Ereignishandling

Beitrag von wodim »

Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Gesperrt