![]() |
Cannot focus a disabled or invisible window....
Ich weiß,
dass es dieses Problem hier schon häufiger gab. Leider kann ich damit aber nichts anfangen, daher meine erneute Frage zum Thema: Ich habe eine DBLookupComboBox. Wenn ich diese öffne oder wenn ich einen Eintrag auswähle kommt die Fehlermeldung:
Delphi-Quellcode:
Was bedeutet, dass ich irgentwo in meinem Code die Anweisung gebe 'IrgenteinFenster.setfocus', dieses Fenster aber den Fokus nicht erhalten kann.
Cannot focus a disabled or invisible window
Da ich keine Ereignisbehandlungeroutine für 'DBCombobox.OnClick' oder 'DBCombobox.OnCloseUp' habe, weiß ich nicht wie ich den Fehler im Code finden kann. Ich habe folgendes versucht: -alle Aufrufe von 'IrgenteinFenster.setfocus' mit Breakpoint versehen - Step by step ausführung meines Codes: dauert ewig und springt bei aktivierung der Anwendung immer wieder in den Code zurück Kann mir jemand einen Tip geben, wie ich effektiv diesen Fehler eingrenzen und beseitigen kann? Danke!! |
Re: Cannot focus a disabled or invisible window....
Das bedeutet, das du mit SetFocus versuchst einen nicht sichtbaren Objekt (z.B. Visible=false, Enable=false, Objekt ist auf einem ausgeblendetem TabSheet/Form ...) den Fokus zu geben, was ja nicht geht, da es im Grunde genommen nicht da ist.
Du kannst eben nur einem sichtbaren Objekt den Fokus verpassen. |
Re: Cannot focus a disabled or invisible window....
Hi,
das ist ja lieb gemeit von Dir. Aber wenn Du meinen Beitrag genau liest frage ich nicht was der Fehler bedeutet, sondern wie ich die Stelle identifiziere, die den Fehler auslöst... Aber vielleicht weißt Du darauf ja auch schon eine Antwort? Wäre super, denn ich hänge hier fest... |
Re: Cannot focus a disabled or invisible window....
:oops: hab'sch mich wohl etwas verlesen.
Wann kommt denn meistens der Fehler - immer wenn du das selbe machst, oder unterschiedlich? Und wie oft kommt xyz.SetFocus/ActiveControl=xyz bei dir vor? |
Re: Cannot focus a disabled or invisible window....
Hi,
Zitat:
Zur zweiten Frage: Ich habe alle Aufrufe der Form '_.setfocus' mit einem Breakpoint versehen. Leider gibt es da das Problem, dass beim Erreichen eines Breakpoints und Weiterlaufen der Anwendung wieder der Breakpoint angelaufen wird (OnDrawColumncell), so dass mir der Breakpunkt dort nicht weiterhilft. Ich habe versucht: - DBlookupCooombobox.OncloseUp Leider wird der Fehler früher ausgelöst. |
Re: Cannot focus a disabled or invisible window....
![]() Also die Haltepunkte sind da wirklich etwas hinderlich ^^ Du könntest ja 'ne Logdatei einbauen, oder das, was wohl einfacher sein sollte, ertsmal alles was den Fokus verändert ausblenden/deaktivieren und dann erstmal testen, ob es wirklich daran liegt und dann Stück für Stück einzelne/mehrere Haltepunkte wieder einbinden und dazwischen nochmals testen.... |
Re: Cannot focus a disabled or invisible window....
Hallo himitsu,
ich habe den Fehler gefunden! Ich hatte vor einigen Tagen das Problem, dass beim Scrollen des Grids die besagte darüberschwebende LookupComboBox nicht verschwand. Ich wollte diese aber ausblenden. Tja und da haben wir auch schon dass Problem: Im OnDrawCollumnCell mache ich folgendes:
Delphi-Quellcode:
Aber was ist jetzt der eigentliche Auslöser des Problems?procedure TForm_Main.DBGrid_DetailDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Grid: TDBGrid; begin DBLookupBox_GridDetail.Hide; // wenn ich das hier auskommentiere ist der Fehler verschwunden // Wenn das Feld fokussiert ist und ein Lookup dann... if (gdFocused in State) then if (Column.Field.Lookup) then begin //...setze Lookup-Attribute SetLookup(Grid,Column,DBLookupBox_GridDetail); // setzen der Lookup-Attribute if (Column.Field.KeyFields = DBLookupBox_GridDetail.KeyField) then PlaceLookupBox(DBLookupBox_GridDetail,Rect,Grid); // festlegen der Position der Box: end end; procedure PlaceLookupBox(LookupBox: TDBLookupComboBox;const Rect: TRect; Grid: TDBGrid); begin with LookupBox do begin // setze Eigenschaften Left := Rect.Left + Grid.Left + 2; Top := Rect.Top + Grid.Top + 2; Width := Rect.Right - Rect.Left-15; Height := Rect.Bottom - Rect.Top; DropDownWidth:= 250; BringToFront; // Ist dies das Problem? Visible := True; Form_Main.Label6.Caption:= 'Alles klar'; end; end; |
Re: Cannot focus a disabled or invisible window....
Versuch mal zuerst die Komponente wieder einzublenden und dann nach vorn zu stellen.
Also die 2 Befehle auszutauschen.
Delphi-Quellcode:
Visible := True;
BringToFront; |
Re: Cannot focus a disabled or invisible window....
Hi,
vielleicht ein grundsätzlicher Tip zur Fehlersuche in solchen oder ähnlichen Fällen: Du kannst mit Ouputdebugstring oder mit nicht anhaltenden Breakpoints Meldungen in das Ereignisprotokoll schreiben, und so einen entsprechenden Fehler eventuell sehr viel schneller als im Einzelschrittmodus eingrenzen. Die nicht anhaltenden Breakpoints haben noch den Vorteil, daß du keinen Code produzierst, den du dann nachher wieder löschen mußt. Grüsse Woki |
Re: Cannot focus a disabled or invisible window....
Hi ihr zwei,
das mit dem Vertauschen der Befehle hat leider nichts gebracht! :( Das mit dem DebugOutputstring werde ich mir mal genauer anschauen. Habe ich bisher nicht benutzt, ist aber wohl die Lösung für einen Fall wie diesen! Danke euch beiden. Gibt es noch eine Lösung für mein Problem? Kann ich die Box erst beim Scrollen im Grid ausblenden und dann irgentwo wieder einblenden? Bis jetzt kommt immer die Fehlermeldung, wenn ich die besagte Zeile:
Delphi-Quellcode:
wieder einkommentiere!?
DBLookupBox_GridDetail.Hide;
Habe schon versucht sie wieder einzublenden, wenn sie durch
Delphi-Quellcode:
benötigt wird. Leider kommt auch dann wieder die Fehlermeldung!
if (gdFocused in State) then
if (Column.Field.Lookup) then begin // hier wieder zeigen DBLookupBox_GridDetail.show; ... end; :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz