AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Exception (Fokusproblem) landet im CPU-Register

Exception (Fokusproblem) landet im CPU-Register

Ein Thema von NoGAD · begonnen am 28. Mai 2021 · letzter Beitrag vom 2. Jun 2021
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Erfurt
199 Beiträge
 
Delphi 10.4 Sydney
 
#1

Exception (Fokusproblem) landet im CPU-Register

  Alt 28. Mai 2021, 13:15
Huhu.

Irgendwo in meinem Programm habe ich scheinbar einen .SetFocus gesetzt und lande nun immer im CPU-Register, anstatt beim entsprechenden Code in der IDE.

Nun ist es leider zu mühsam alle Breakpoints auf .SetFocus zu setzen, um zu schauen, wann der richtige angesprungen wird.

Wie kann ich denn nun aber Rückschlüsse von der CPU-Ansicht auf den entsprechenden Code ableiten?


Edit: Habe dann doch während der Laufzeit alle Breakpoints gesetzt. Es wurde kein .SetFocus angesteuert.

Das Problem hat sich etwas verlagert, es ist scheinbar ein Tabellenproblem. Imemr wenn ich bei einer geöffneten Tabelle diese mittels .Append vorbereite, um neue Daten zur Tabelle hinzuzufügen, tritt genau dann das Fokusproblem auf (siehe Screenshot). Die Frage bezüglich CPU-Ansicht bleibt aber gleich.



LG Mathias
Miniaturansicht angehängter Grafiken
screenshot-2021-05-28-132146.png  
Mathias
Ich vergesse einfach zu viel.

Geändert von NoGAD (28. Mai 2021 um 13:23 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
387 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Exception (Fokusproblem) landet im CPU-Register

  Alt 28. Mai 2021, 14:00
Wenn du im CPU Fenster landest, ist die exception in einer Unit, von der nur die vorkompilierte DCU ohne Debuginfos vorhanden ist. Das müsste also wahrscheinlich in irgend einer 3rd Party Komponente oder einer Delphi Komponente sein. Im 2. Fall reicht es eigentlich, wenn du beim Kompilieren die Debug dcu's der IDE nutzt. Dazu musst du in den Debugsettings deines Programms, die Option "Debug DCUS's nutzen" aktivieren.

Wenn die Exception auftritt, kannst du dir auch mal den Stack anschauen, wo der letzte Codeteil ist, der über Debuginfos verfügt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Exception (Fokusproblem) landet im CPU-Register

  Alt 28. Mai 2021, 14:24
In den Stacktrace schauen, ob es vorher irgendwo etwas gibt, wozu es eine Unit (Modul mit Debuginfos) gibt.

Eventuell auch noch ein/zwei Mal F7 drücken ... manchmal kommt man so auch z.B. zu einem übergeordneten Try-Except zurück, mit dem man was anfangen kann.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Exception (Fokusproblem) landet im CPU-Register

  Alt 29. Mai 2021, 12:21
So eine Exception hatte ich letztens auch mal. Ursache war, dass ich im FormShow-Handler einer gelegentlich genutzten Form einem Edit-Control den Focus gab, welches auf einem PageControl1.TabSheet1 saß. Der Haken daran, kurz vorm letzten Closen dieser Form, hatte ich ab und zu auf PageControl.TabSheet2 noch letzte Eingaben gemacht, welches damit dann also das zuletzt angezeigte TabSheet war. Folge: Als ich die Form erneut anzeigen ließ, war in dem Fall dieses TabSheet2 also immer noch das sichtbare, und das Edit-Control auf TabSheet1 damit natürlich nicht sichtbar.

Das ist eine der Exceptions, für die sicherlich reichlich solche oder ganz ähnliche Gründe vorstellbar sind.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Exception (Fokusproblem) landet im CPU-Register

  Alt 29. Mai 2021, 12:29
Fokus in einem ausgeblendeten Tab eines PageControls ist kein Problem, denn dort wird automatisch die Seite umgeblätert.

PS: Man kann in der Form ActiveControl setzen, wenn man den Fokus vor/außerhalb der Sichtbarkeit der Form zuweisen möchte.
(bei eingebetteten Forms ist das Auslesen jeweils bei der obersten Form möglich)

Die globale Screen-Variable, da sind zwei Events drin, wo man auf Fokusänderungen reagieren kann, und da könnte man auch einen Haltepunkt reinmachen.
Wenn der Fokus aber via PostMessage geändert wurde, dann bekommt man bei Änderungen nicht mit, wer es war (Stacktrace) ... dann kann man nur noch die zuvielen SetFocus und Co. debuggen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (29. Mai 2021 um 12:32 Uhr)
  Mit Zitat antworten Zitat
r29d43

Registriert seit: 18. Jan 2007
275 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Exception (Fokusproblem) landet im CPU-Register

  Alt 29. Mai 2021, 13:03
In meinem Prog bleibt das zuletzt aktiv gewesene TabSheet aber dasjenige, welches auch nach einem neuen Anzeigen der Form immer noch sichtbar ist. Habe das gerade nochmal gecheckt. Da gibts kein automatisches Umblättern. Oder ich müsste sowas (wenn's selbst wieder eine Property ist) ausgeschaltet haben, oder erst garnicht angeschaltet, weil es sich um ein minimal älteres Prog handelt? Erst wenn ich ins FormShow() eine < Ln1PageControl.ActivePage := BlablaTabSheet1; > -Anweisung einfüge, und damit sicherstelle, dass bei jedem neuen FormShow auch dieses TabSheet1 sichtbar ist, gibt's keine Exception mehr.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Exception (Fokusproblem) landet im CPU-Register

  Alt 29. Mai 2021, 13:25
OK, dachte das war beim SetFocus auch so,
aber nur beim Show wird umgelättert.

Edit2 auf nicht sichtbarem TabSheet
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
begin
  Edit2.Show;
  Edit2.SetFocus;
end;

// oder
begin
  Edit2.Show; // übergeordnete PageControls umblättern, falls nötig
  if Edit2.CanFocus then
    Edit2.SetFocus
  else
    GetParentForm(Edit2).ActiveControl := Edit2;
end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (29. Mai 2021 um 13:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Erfurt
199 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Exception (Fokusproblem) landet im CPU-Register

  Alt 30. Mai 2021, 07:16
Guten Morgen.

Leider betrifft es mich nicht in diesem Fall. Es könnte aber etwas mit einer Scrollbox zu tun haben, welche ich bei einer Datenbankoperation auf disabled stellte.

Als ich die ScrollBox nicht sperrte, landete ich gestern bei einem kurzen Test nicht mehr im CPU-Register. Innerhalb dieser ScrollBox greife ich auf Comboboxen zu, aber nur lesend, ohne SetFocus. Ich bin immer noch auf der Suche..

Bis später.

LG Mathias
Mathias
Ich vergesse einfach zu viel.

Geändert von NoGAD (30. Mai 2021 um 11:40 Uhr) Grund: Autokorrektur vom Handy behoben
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.224 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Exception (Fokusproblem) landet im CPU-Register

  Alt 30. Mai 2021, 11:52
Schau mal, ob das Problem etwas mit dem gelöschten fokussierten Control zu tun haben kann.

Ich hatte früher mal bei eigenen Controls das Problem, dass Windows noch ein Control ohne Focus neu zeichnen wollte, das ich aber zwischenzeitlich dynamisch gelöscht hatte.
Evtl. reicht es, wenn Du den Focus vor dem Löschen auf das Formular oder ein anderes Control setzt, welches nicht mit freigegeben wird.

Oder Du kannst das Control auch zunächst unsichtbar schalten bis Windows dessen Sichtbarkeits-Status erkannt hat. Danach kannst Du es dann löschen, ohne dass Windows durcheinander kommt.

Also nicht:

- fokussiertes Control löschen

sondern:

- fokussiertes Control unsichtbar schalten
- dieses Control merken
- und später (z.B. in einem Timer) das gemerkte Control löschen

Mit diesem Workaround konnte ich mal so ein Problem lösen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Exception (Fokusproblem) landet im CPU-Register

  Alt 30. Mai 2021, 12:45
Ideal wäre es ja, wenn Delphi in den SetFocus-Exceptions den Namen des Controls anzeigen würde, aber das tun die leider nicht. (und es gibt unmassen von Stellen, welche sich alle nicht ändern lassen. (fast nirgendwo ein virtual)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 22:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf