Ereignishandling

Für Fragen von Einsteigern und Programmieranfängern...
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

Ereignishandling

Beitrag von wodim »

Hi,

eine Form soll eine Aktion auslösen., sobald sie sichtbar wird. Habe leider keine Anleitung gefunden, nach der das funktioniert. :wink: Habe z.B. das probiert:

https://wiki.freepascal.org/Execute_act ... vate_event

Mal abgesehen davon, dass das wohl nicht funzen kann, wenn man die Variable genauso nennt wie die Ereignisprozedur (ich sie also umbenannt habe), fühlt die Prozedur sich absolut nicht angespochen. (Hab' ein

Code: Alles auswählen

showmessage('bin da');
eingebaut und einen Haltepunkt drauf gesetzt, aber dazu kommt's gar nicht. (Das Formular erscheint in voller Schönheit.)

Das ist mit Sicherheit wieder ein Anfängerfehler (oder mit an Sicherheit grenzender Wahrscheinlichkeit ein Fehler in der Anleitung, wie ich sie in den letzten Tagen dutzendweise kennen lernen konnte). :roll: Wer weiß es besser? Danke im voraus.

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 »

was genau willst du erreichen bzw. was soll die Form machen bzw. nicht machen?

OnCreate --> der Form wurde Speicher zugewiesen, und der Constructor ausgeführt. Sie existiert jetzt im Speicher.
OnShow --> Die Form soll jetzt gezeichnet werden. Während OnShow ist die Form noch nicht sichtbar.
OnActivate --> Die Form wurde gezeichnet, und ist jetzt sichtbar. --> Achtung: OnActivate wird JEDESMAL ausgeführt, wenn die Form den Fokus erhält
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: Mi 5. Feb 2025, 23:37 Das ist mit Sicherheit wieder ein Anfängerfehler (oder mit an Sicherheit grenzender Wahrscheinlichkeit ein Fehler in der Anleitung, wie ich sie in den letzten Tagen dutzendweise kennen lernen konnte). :roll: Wer weiß es besser? Danke im voraus.
Ein typischen Anfängerfehler wäre, wenn du das OnActivate per Hand schreibst (deklarierst) und nicht den Rumpf über den OI (ObjectInspector) erstell lässt. Weil genau dann fehlt nämlich dem Compiler die richtige Zuordnung, die der OI im Hintergrund für dich erstellt. In den ObjektInspector gehen und dort das Tab Events öffnen, dort mit einem doppelklick auf OnActivate erstellst du den Rumpf (oder über die drei Punkte).
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

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 »

af0815 hat geschrieben: Do 6. Feb 2025, 09:11 Ein typischen Anfängerfehler wäre, wenn du das OnActivate per Hand schreibst (deklarierst) und nicht den Rumpf über den OI (ObjectInspector) erstell lässt. Weil genau dann fehlt nämlich dem Compiler die richtige Zuordnung, die der OI im Hintergrund für dich erstellt. In den ObjektInspector gehen und dort das Tab Events öffnen, dort mit einem doppelklick auf OnActivate erstellst du den Rumpf (oder über die drei Punkte).
Und viel wichtiger: Die Adress-Zuordnung der Event-Prozedur
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 »

af0815 hat geschrieben: Do 6. Feb 2025, 09:11 Ein typischen Anfängerfehler wäre, wenn du das OnActivate per Hand schreibst (deklarierst) und nicht den Rumpf über den OI (ObjectInspector) erstell lässt. Weil genau dann fehlt nämlich dem Compiler die richtige Zuordnung, die der OI im Hintergrund für dich erstellt.
Zvoni hat geschrieben: Do 6. Feb 2025, 09:17 Und viel wichtiger: Die Adress-Zuordnung der Event-Prozedur
Nachvollziehbar. :wink:
af0815 hat geschrieben: Do 6. Feb 2025, 09:11In den ObjektInspector gehen und dort das Tab Events öffnen, dort mit einem doppelklick auf OnActivate erstellst du den Rumpf (oder über die drei Punkte).
Sowas gibt's in meinem OI leider nicht. Welche Einstellung stimmt da nicht?
Zuletzt geändert von wodim am Do 6. Feb 2025, 10:33, insgesamt 1-mal geändert.
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, 09:27
af0815 hat geschrieben: Do 6. Feb 2025, 09:11 Ein typischen Anfängerfehler wäre, wenn du das OnActivate per Hand schreibst (deklarierst) und nicht den Rumpf über den OI (ObjectInspector) erstell lässt. Weil genau dann fehlt nämlich dem Compiler die richtige Zuordnung, die der OI im Hintergrund für dich erstellt.
Nachvollziehbar. :wink:
af0815 hat geschrieben: Do 6. Feb 2025, 09:11In den ObjektInspector gehen und dort das Tab Events öffnen, dort mit einem doppelklick auf OnActivate erstellst du den Rumpf (oder über die drei Punkte).
Sowas gibt's in meinem OI leider nicht. Welche Einstellung stimmt da nicht?

???????
Unbenannt.PNG
Unbenannt.PNG (38.35 KiB) 9713 mal betrachtet
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 »

Danke, das war's! Immerhin hatte der OI meine selbstgebastelte Prozedur schon akzeptiert. :wink:
Dateianhänge
alles klar.png
alles klar.png (9.66 KiB) 9708 mal betrachtet
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 »

Also wen's interessiert:
Zvoni hat geschrieben: Do 6. Feb 2025, 08:20was genau willst du erreichen
Eine Datenbankanwendung, bei deren Start der User aufgefordert (nein, gebeten :wink:) werden soll, sich anzumelden. Mit dem üblichen Dialog (Username, Passwort etc). Und der wird eben so geöffnet:

Code: Alles auswählen

procedure TFormMain.FormShow(Sender: TObject);
var CC: longint;
begin
 	CC := FormDBLogin.ShowModal;
 	// ... Auswertung der Rückgabe ...	
end;
Zvoni hat geschrieben: Do 6. Feb 2025, 08:20was soll die Form machen
Eben das, aber erst, wenn sie sichtbar ist. Vorher aber checken, ob ein Verbindungsaufbau überhaupt möglich ist (laufen Server und Client, ist der Client überhaupt installiert, nimmt der Server Anmeldungen von diesem <User>@<IP-Adresse> an etc. pp) ...
Zuletzt geändert von wodim am Do 6. Feb 2025, 10:04, insgesamt 1-mal geändert.
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, 10:01 Also wen's interessiert:
Zvoni hat geschrieben: Do 6. Feb 2025, 08:20was genau willst du erreichen
Eine Datenbankanwendung, bei deren Start der User aufgefordert (nein, gebeten :wink:) werden soll, sich anzumelden. Mit dem üblichen Dialog (Username, Passwort etc). Und der wird eben so geöffnet:

Code: Alles auswählen

procedure TFormMain.FormShow(Sender: TObject);
var CC: longint;
begin
 	CC := FormDBLogin.ShowModal;
 	// ... Auswertung der Rückgabe ...	
end;
Zvoni hat geschrieben: Do 6. Feb 2025, 08:20was soll die Form machen
Eben das, aber erst, wenn sie sichtbar ist. Vorher aber checken, ob ein Verbindungsaufbau überhaupt möglich ist (laufen Server und Client, ist der Client überhaupt installiert, etc. pp) ...
So wie dein Code jetzt ist, wird das Login gezeigt, obwohl FormMain noch "unsichtbar" ist, oder?
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, 10:03So wie dein Code jetzt ist, wird das Login gezeigt, obwohl FormMain noch "unsichtbar" ist, oder?
Völlig korrekt, das gehört in FormActivate(), danke für den Hinweis.
Zuletzt geändert von wodim am Do 6. Feb 2025, 10:25, insgesamt 1-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 »

wodim hat geschrieben: Do 6. Feb 2025, 10:08
Zvoni hat geschrieben: Do 6. Feb 2025, 10:03So wie dein Code jetzt ist, wird das Login gezeigt, obwohl FormMain noch "unsichtbar" ist, oder?
Völlig korrekt, das gehört in FormActivate(), danke für den Hinweis.
Und nicht in FormActivated(). Die kennt der OI gar nicht. Frag' mich echt, ob die Autoren dieser "Anleitung" überhaupt was getestet haben oder nur kritiklos von irgendwoher kopiert ...

https://wiki.freepascal.org/Execute_act ... vate_event
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

wp_xyz
Beiträge: 5134
Registriert: Fr 8. Apr 2011, 09:01

Re: Ereignishandling

Beitrag von wp_xyz »

wodim hat geschrieben: Do 6. Feb 2025, 10:24
wodim hat geschrieben: Do 6. Feb 2025, 10:08
Zvoni hat geschrieben: Do 6. Feb 2025, 10:03So wie dein Code jetzt ist, wird das Login gezeigt, obwohl FormMain noch "unsichtbar" ist, oder?
Völlig korrekt, das gehört in FormActivate(), danke für den Hinweis.
Und nicht in FormActivated(). Die kennt der OI gar nicht. Frag' mich echt, ob die Autoren dieser "Anleitung" überhaupt was getestet haben oder nur kritiklos von irgendwoher kopiert ...

https://wiki.freepascal.org/Execute_act ... vate_event
Ich hab's überarbeitet. Den wiki-Autoren solltest du aber keine Schlampigkeit unterstellen. Fehler passieren. Und selbst wenn der Code, der hier beschrieben ist, getestet ist, kann beim Übertragen ins wiki und vor allem beim Kürzen sofort ein Fehler reinrutschen, den man selbst beim dritten Mal durchlesen übersieht. Das wiki ist ein Community-Projekt. Wenn du dich registriert hast, kannst du Fehler selbst korrigieren.
Zuletzt geändert von wp_xyz am Fr 7. Feb 2025, 17:18, insgesamt 1-mal geändert.

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, 10:08
Zvoni hat geschrieben: Do 6. Feb 2025, 10:03So wie dein Code jetzt ist, wird das Login gezeigt, obwohl FormMain noch "unsichtbar" ist, oder?
Völlig korrekt, das gehört in FormActivate(), danke für den Hinweis.
Und denk an die "Sperrvariable"!
OnActivate zündet JEDES MAL, wenn das Fenster den Fokus erhält.

User startet dein Programm, MainForm wird angezeigt, Login poppt auf (und stellt damit MainForm in den Hintergrund!!!!),
er meldet sich an, MainForm erhält wieder den Fokus, Login poppt auf...........


EDIT: hmmm..... wenn ich das so lese....
Ist doch ne geile Idee um User zu verarscxxxx....en :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 »

wp_xyz hat geschrieben: Do 6. Feb 2025, 11:43
wodim hat geschrieben: Do 6. Feb 2025, 10:24
wodim hat geschrieben: Do 6. Feb 2025, 10:08
Völlig korrekt, das gehört in FormActivate(), danke für den Hinweis.
Und nicht in FormActivated(). Die kennt der OI gar nicht. Frag' mich echt, ob die Autoren dieser "Anleitung" überhaupt was getestet haben oder nur kritiklos von irgendwoher kopiert ...

https://wiki.freepascal.org/Execute_act ... vate_event
Ich hab's überarbeitet. Den wiki-Autoren solltest du aber keine Schlampigkeit unterstellen.
Oh, Entschuldigung, will's mir hier mit keinem versauen. :oops:
wp_xyz hat geschrieben: Do 6. Feb 2025, 11:43Fehler passieren.
Wem sagst du das. Irren ist menschlich, Korrigieren aber auch. :wink:

In diesem Zusammenhang ein kleiner Schwank aus meiner Jugend: Mein erstes "elektronisch" erstelltes Pamphlet war meine Diplomarbeit (schon ein Weilchen her, wie gesagt). Die haben 4 (fach- und auch deutschkundige) Leute korrekturgelesen, danach habe ich selber noch Fehler gefunden, aber solche wie "Silber" ohne "l". :wink:
wp_xyz hat geschrieben: Do 6. Feb 2025, 11:43Und selbst wenn der Code, der hier beschrieben ist, getestet ist, kann beim Übertragen ins wiki und vor allem beim Kürzen sofort ein Fehler reinrutschen, denn man selbst beim dritten Mal durchlesen übersieht.
Sach' ich doch, von irgendwoher kritiklos kopiert. :wink: Aber das sind offensichtlich keine Flüchtigkeitsfehler, auch keine, die bei der Übernahme passieren konnten: Eine Variable genauso nennen wie die Ereignisprozedur, in der sie verwendet wird - auweia! :shock: Und diese Prozedur kann's gar nicht geben. Wobei das wohl eher ein Fehler in der IDE ist - ich fände FormActivated() auch logisch. Deshalb hab' ich mich ja nach dem Fehler dumm und dämlich gesucht ...
wp_xyz hat geschrieben: Do 6. Feb 2025, 11:43Das wiki ist ein Community-Projekt. Wenn du dich registriert hast, kannst du Fehler selbst korrigieren.
Na, das hat Zeit. Erst mal suche ich die Fehler lieber bei mir selber. :wink:
Zuletzt geändert von wodim am Do 6. Feb 2025, 13:17, 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 »

Zvoni hat geschrieben: Do 6. Feb 2025, 12:01 Und denk an die "Sperrvariable"!
OnActivate zündet JEDES MAL, wenn das Fenster den Fokus erhält.
Naja, (verstehend) lesen kann ich schon. Trotzdem danke für die Wiederholung. :wink:
Zvoni hat geschrieben: Do 6. Feb 2025, 12:01User startet dein Programm, MainForm wird angezeigt, Login poppt auf (und stellt damit MainForm in den Hintergrund!!!!),
So soll es auch sein. Vorher ist das ja auch für ihn völlig funktionslos, er sieht nur in der Statusleiste: "Nicht verbunden". :wink:
Zvoni hat geschrieben: Do 6. Feb 2025, 12:01er meldet sich an, MainForm erhält wieder den Fokus, Login poppt auf...........
:mrgreen: :mrgreen: :mrgreen:
Zvoni hat geschrieben: Do 6. Feb 2025, 12:01EDIT: hmmm..... wenn ich das so lese....
Ist doch ne geile Idee um User zu verarscxxxx....en :lol:
Ich werde mich hüten. Meine Zielgruppe ist nämlich ziemlich sensibel, wie ich sie sehe. Konkret: Angestellte einer großen Klinik, von Hilfskraft bis Chefarzt und Geschäftsführer. :wink: Der Gag: Die Idee kam mir als Patient. Ich musste da vielleicht 10 Abteilungen durchlaufen, und als ich so zum 5. oder 6. Mal ein und dasselbe gefragt wurde, was schon bei der Anmeldung erfasst worden war, platzte mir die Frage 'raus: "Wozu haben Sie hier ein Rechnernetz?" Und als ich den hochqualifizierten (und auch vielbeschäftigten) Chirurgen sah, der auch mich operiert hatte, wie er für einen anderen Patienten auf meinem Zimmer so einen Anmeldebogen ausfüllte, tat mir was weh. Milchmädchenrechnung: Was kosten 10 Minuten in der Klinik? Mal 10 (wie bei mir) mal >10.000 stationär behandelte Patienten im Jahr macht wieviel ...
Zuletzt geändert von wodim am Do 6. Feb 2025, 13:20, insgesamt 1-mal geändert.
Das langsamste und fehleranfälligste Teil sitzt immer vor der Tastatur. Und wenn's "Programmierer" heißt.

Gesperrt