[gelöst] SetFocus führt zum Programmabsturz

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

[gelöst] SetFocus führt zum Programmabsturz

Beitrag von Marsmännchen »

Hi,

ich komme mit meinem rudimentären Wissen wieder mal nicht weiter :evil:

Ich habe ein TDrawGrid, dass ein Spielfeld darstellt. Damit die Spielfigur sich bewegt, muss das DrawGrid den Focus haben, sonst funktioniert die Tastatureingabe natürlich nicht. Das bedeutet aber auch, dass das DrawGrid den Fokus zurückerhalten muss, wenn in der Form auf was anderes geklickt wird. Das wollte ich mit SetFocus realisieren. Das Programm schmiert dann aber ab und ich verstehe nicht warum. Ich habe schon gelesen, dass SetFocus nicht funktioniert, wenn die Componente, auf der diese Prozedur angewendet wird, nicht sichtbar ist. Sowohl das Grid als auch die ganze Form sind aber meiner Ansicht nach die ganze Zeit sichtbar. Ich habe die SetFocus-Anweisung in meiner Verzweiflung auch schon in das OnShow-Event der Form verlagert. Das Programm ist dann zwar nicht mehr abgestürzt, aber hat auch nicht den Fokus auf mein Grid verlagert (ist klar, Show-Event wurde nicht ausgelöst, weil die Form sichtbar war).

Ich weiß momentan nicht mehr weiter. Fehlermeldung und Code anbei...
Dateianhänge
SetFocusFehler.PNG
MinedOut.zip
(67.35 KiB) 39-mal heruntergeladen
Zuletzt geändert von Marsmännchen am Di 15. Nov 2016, 08:46, insgesamt 1-mal geändert.
Ich mag Pascal...

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2639
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: SetFocus führt zum Programmabsturz

Beitrag von m.fuchs »

Du darfst das das SetFocus nicht im OnCreate aufrufen, das geht schief. Pack den Aufruf von Self.ButtonNewGameClick(self); einfach in das OnActivate.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

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

Re: SetFocus führt zum Programmabsturz

Beitrag von wp_xyz »

Du kannst auch (z.B. im Objekt-Inspektor) ActiveControl des Formulars auf das Grid setzen; dadurch wird das Grid beim Start fokussiert. Du kannst dadurch auf den Aufruf von Grid.SetFocus im OnCreate-Ereignis verzichten.

Marsmännchen
Beiträge: 294
Registriert: So 4. Mai 2014, 21:32
OS, Lazarus, FPC: Windows 10 64bit, Lazarus 2.0.10
CPU-Target: 64bit
Wohnort: Oranienburg

Re: SetFocus führt zum Programmabsturz

Beitrag von Marsmännchen »

Danke für die Antworten. Jetzt ist mir auch mein Denkfehler klar: ich hatte gar nicht mehr daran gedacht, dass ich das ButtonNewGameClick ja im OnCreate aufrufe und damit dort auch das SetFocus stattfindet :roll: . Die Verlagerung dieses Aufrufes ins OnActivate-Event hat das gewünschte Verhalten gebracht. Jetzt kann ich weiterschrauben :mrgreen:
Ich mag Pascal...

Antworten