AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fokus wird nicht gesetzt

Ein Thema von Alfonso · begonnen am 22. Apr 2012 · letzter Beitrag vom 22. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
Alfonso

Registriert seit: 10. Jan 2006
250 Beiträge
 
Delphi 11 Alexandria
 
#1

Fokus wird nicht gesetzt

  Alt 22. Apr 2012, 17:34
Hallo,
habe ein sehr merkwürdiges Verhalten: Ich rufe von einem MDI Formular ein anderen Formular mit SHOWMODAL auf. Alles funktioniert im Prinzip einwandfrei. Im Formactivate ist ein edxxx.setfocus. Man sieht, dass beim Öffnen des Formulars ganzkurz der Fokus im Feld xxx drin steht, dann verschwindet der Fokus im Nirwana. Auch das nachträgliche Setzen des Fokus mit einen Timer geht nicht. Im ganzen Formular ist kein weiteres SETFOCUS vorhanden.
Drücke ich sehr oft auf die Tab-Taste erscheint irgendwann ein Fokus. Ich kann auch direkt mit der Maus den Fokus setzen und arbeiten.

Auf dem Formular habe ich ein Button mit Cancel=True. ESC funktioniert erst, wenn der Fokus einmal sichtbar ist (entweder Maus oder vielfaches Tab).

ALT-Leertaste zeigt mir das Systemmenü an, ich kann aber die Pfeiltasten nicht verwenden, um einen Eintrag auszuwählen. Auch das funktioniert erst, wenn das Formular den Fokus einmal sichtbar hatte.

Habe auch Bringtofront probiert, aber es bringt nichts.

Es hat übrigens früher mit Delphi 2006 funktioniert. Seit der Umstellung auf XE nicht mehr.

Wer weiß Rat?

Gruß
Alfonso
Alfonso
Seit Turbo Pascal 3.0 dabei!
Ewiger Pascal Fan!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.069 Beiträge
 
Delphi 12 Athens
 
#2

AW: Fokus wird nicht gesetzt

  Alt 22. Apr 2012, 18:06
Hat die Form überhaupt noch den Fokus?

PS: Wie wäre es mit dem Property FocusedControl (oder so ähnlich) der Form?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (22. Apr 2012 um 18:22 Uhr)
  Mit Zitat antworten Zitat
Alfonso

Registriert seit: 10. Jan 2006
250 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Fokus wird nicht gesetzt

  Alt 22. Apr 2012, 18:52
Bringt leider nichts. self.FocusControl(cbAlleSeiten) setzt mir zwar für eine kleine Zeit den Fokus, (umrandung um Checkbox sichtbar), dann verschwindet der Fokus. Das Formular hat den Fokus. Wenn ich ALT+K drücke, wird der Button O~K ausgeführt.

Weitere Ideen?
Gruß
Alfonso
Alfonso
Seit Turbo Pascal 3.0 dabei!
Ewiger Pascal Fan!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.069 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fokus wird nicht gesetzt

  Alt 22. Apr 2012, 19:48
Ups, ich meinte ActiveControl, welches man schon im OI setzen kann.

Du könntest ja mal prüfen, wo Form.ActiveControl oder Screen.ActiveControl hinzeigt.


Im Anhang befindet sich eine Demo, mit einer Methode zum Prüfen was wo aktiv ist.
Entweder hängt man es an einen Timer, oder an die verschiedenen Events im System. (Screen, Application oder besser TApplicationEvents)
Angehängte Dateien
Dateityp: 7z Project4.7z (1,3 KB, 1x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Alfonso

Registriert seit: 10. Jan 2006
250 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Fokus wird nicht gesetzt

  Alt 22. Apr 2012, 20:05
Danke für deinen Code.
Habe es eingebaut und es zeigt mir im Titel "Active" + den Namen des richtigen Formulars + den Namen des richtigen Feldes. Es liegt aber auf dem Feld kein Fokus drauf. Klicke ich nun auf ein anderes Fenster ausserhalb der Anwendung (z.B. Firefox), ändert sich der Titel zu inactive. Klicke ich wieder in die Applikation ändert sich der Titel in Active und der Fokus ist an der richtigen Stelle gesetzt.

Ich weiss immer noch kein Rat.
Alfonso
Seit Turbo Pascal 3.0 dabei!
Ewiger Pascal Fan!
  Mit Zitat antworten Zitat
Alfonso

Registriert seit: 10. Jan 2006
250 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Fokus wird nicht gesetzt

  Alt 22. Apr 2012, 20:30
Ich habe jetzt über einen SendKey Trick das Formular ausgetrickst. Nach 1 Sekunde wird dieser Timer aufgerufen:
Code:
procedure TfrmPrintRechnung.tmr1Timer(Sender: TObject);
var key:Char;
begin
 //Kleiner Hack, da der Fokus nicht richtig gesetzt wird, simuliere ich ein Tastendruck
     key:='X';
     Keybd_event(vk_Menu, 0, 0, 0);
     keybd_event(vkKeyScan(key), 0, 0, 0);// der eigendliche Tastendruck
     keybd_event(vkKeyScan(key), 0, KEYEVENTF_KEYUP, 0);
     Keybd_event(vk_Menu, 0, KEYEVENTF_KEYUP, 0);
end;
Damit wird dann tatsächlich der Fokus gesetzt.
Das ist wirklich nicht was ich mir vorstelle, aber ich suche schon seit 3 Stunden nach einer Lösung.

Falls jemand eine bessere Lösung weiss, bitte posten!!!

Gruß
Alfonso
Alfonso
Seit Turbo Pascal 3.0 dabei!
Ewiger Pascal Fan!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.069 Beiträge
 
Delphi 12 Athens
 
#7

AW: Fokus wird nicht gesetzt

  Alt 22. Apr 2012, 20:37
Ein Bug?
Es gibt ja einmal den Fokus, welchen Delphi glaubt gesetzt zu haben und dann noch den Fokus, welcher beim WinControl wirklich aktiv ist.

Hab selber grade mit sowas zu kämpfen
http://www.delphipraxis.net/167825-p...gabefokus.html


Was sagt diese Variante?
Delphi-Quellcode:
procedure TForm4.Timer1Timer(Sender: TObject);
var
  S: string;
  H: HWND;
  C: TControl;
  B: array[0..MAX_PATH] of Char;
  i: Integer;
begin
  if Application.Active then S := 'Active else S := 'Inactive ';
  if Assigned(Screen.ActiveCustomForm) then
    S := S + Screen.ActiveCustomForm.ClassName + '.' + Screen.ActiveCustomForm.Name + ' ';
  if Assigned(Screen.ActiveForm) and Assigned(Screen.ActiveForm.ActiveMDIChild) then
    S := S + 'MDI:' + Screen.ActiveForm.ActiveMDIChild.ClassName + '.' + Screen.ActiveForm.ActiveMDIChild.Name + ' ';
  if Assigned(Screen.ActiveControl) then
    S := S + Screen.ActiveControl.ClassName + '.' + Screen.ActiveControl.Name + ' ';
  H := GetActiveWindow;
  C := FindControl(H);
  if not Assigned(C) then begin
    GetClassName(H, @B, MAX_PATH);
    S := S + '(' + B + ' ';
  end else
    S := S + '(' + C.ClassName + '.' + C.Name + ' ';
  H := GetFocus;
  C := FindControl(H);
  if not Assigned(C) then begin
    GetClassName(H, @B, MAX_PATH);
    S := S + B + ') ';
  end else
    S := S + C.ClassName + '.' + C.Name + ') ';

  Application.Title := S;
  for i := 0 to Screen.CustomFormCount - 1 do
    Screen.CustomForms[i].Caption := S;
end;

[add]
Statt deinem Hack würde ich es mal so probieren (in dem Timer)
Delphi-Quellcode:
if Application.Active then
  SetActive(Screen.ActiveControl.Handle);
bzw.
Delphi-Quellcode:
if Application.Active and (Screen.ActiveControl.Handle <> GetActive) then
  SetActive(Screen.ActiveControl.Handle);
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (22. Apr 2012 um 20:41 Uhr)
  Mit Zitat antworten Zitat
Alfonso

Registriert seit: 10. Jan 2006
250 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Fokus wird nicht gesetzt

  Alt 22. Apr 2012, 21:30
Gleicher Effekt. Vor der Klammer steht das gleiche wie in der Klammer und immer das was richtig ist, und zwar der Control der den Fokus haben soll. Sobald ich Anwendungsfenster wechsle, ist es auf inaktiv und wenn ich zurück komme steht wieder das richtige und der Fokus ist plötzlich da.

Gruß und Danke für deine Mühe

Alfonso
Alfonso
Seit Turbo Pascal 3.0 dabei!
Ewiger Pascal Fan!
  Mit Zitat antworten Zitat
Alfonso

Registriert seit: 10. Jan 2006
250 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Fokus wird nicht gesetzt

  Alt 22. Apr 2012, 21:35
Mein Delphi XE kennt kein SetActive. Auch die Hilfe nicht.
Hast du dich verschrieben?

Gruß
Alfonso
Alfonso
Seit Turbo Pascal 3.0 dabei!
Ewiger Pascal Fan!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.069 Beiträge
 
Delphi 12 Athens
 
#10

AW: Fokus wird nicht gesetzt

  Alt 22. Apr 2012, 21:45
Ups, ich meinte MSDN-Library durchsuchenSetFocus und MSDN-Library durchsuchenGetFocus, aus der Unit Windows (WinAPI.Windows ab XE2).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 +1. Es ist jetzt 12:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz