Hi,
ich komme mit meinem rudimentären Wissen wieder mal nicht weiter
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...
[gelöst] SetFocus führt zum Programmabsturz
-
- 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
- Dateianhänge
-
- 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...
- 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
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
Re: SetFocus führt zum Programmabsturz
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.
-
- 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
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 . Die Verlagerung dieses Aufrufes ins OnActivate-Event hat das gewünschte Verhalten gebracht. Jetzt kann ich weiterschrauben
Ich mag Pascal...