AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Aktuellen Focus verlieren oder löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Aktuellen Focus verlieren oder löschen

Ein Thema von knaeuel · begonnen am 19. Sep 2018 · letzter Beitrag vom 1. Okt 2018
Antwort Antwort
Seite 1 von 2  1 2      
knaeuel

Registriert seit: 2. Jul 2007
110 Beiträge
 
Delphi 10.3 Rio
 
#1

Aktuellen Focus verlieren oder löschen

  Alt 19. Sep 2018, 13:56
Folgendes Problem:

Ich hab eine App-Bildschirmmaske mit einem TabControl mit 3 Seiten.
Das Blättern funktioniert unter anderem durch Wischen.

Auf jeder Seite gibt es Steuerelemente, die durch Schieben eingestellt werden können (Switches und Trackbars). Wenn nun ein Trackbar ein Stückchen verschoben wird, will die App neben dem gewünschten Verstellen der Komponente auch umblättern, weil es das Schieben für ein Wischen hält.

Also fange ich das ab. Wenn der Focus beim Auslösen einer Geste auf einem der Switch/Trackbar-Steuerelemente liegt, dann setze ich "Handled" auf "true" und schon blättert es nicht mehr um. Jetzt ruht der Focus allerdings auf einem Switch/Trackbar, was zur Folge hat, dass das Blättern nicht mehr funktioniert, weil es IMMER abgefangen wird.

Also will ich den Focus EINFACH NUR LÖSCHEN oder ersatzweise auf ein anderes Element legen.
Und genau das ist das Problem. Ich habe kein anderes Steuerelement auf dem Bildschirm, dass den Focus erhalten kann.

Vorraussetzungen dafür sind nämlich:
- Steuerelement hat die Eigenschaft "CanFocus"
- Steuerelement ist auf der aktuell sichtbaren Maske
- Steuerelement ist sichtbar

Ich kann also keinen unsichtbaren Dummy-Button oder ein Element von einem anderen Formular oder einer anderen Tab-Seite benutzen. :S

Delphi-Quellcode:
procedure TFormOptions.TabControl1Gesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
  //wir wollen die "blättern"-geste vermeiden, wenn der Focus auf dem Trackbar/TSwitch liegt,
  //damit beim Einstellen des Trackbars/TSwitchs nicht immer der Bildschirm gewechselt wird
  if Assigned(Focused) then
  begin
    //bei Trackbar-Verschiebung nicht durch die Tabs blättern
    if Focused.GetObject is TTrackbar then
      Handled:=true;

    //bei Switch-Bewegung nicht durch die Tabs blättern
    if Focused.GetObject is TSwitch then
      Handled:=true;

    if Handled then
    begin
      //zum Schluss Focus wegschicken, damit die Gesten nun wieder funktionieren

      //ClearFocus oder ReleaseFocus oder ForgetFocus wäre schön, gibts aber nicht

      //nur-lesen-eigenschaft: TTrackbar(Focused.GetObject).IsFocused:=false;

//funzt nicht, weil visible=false
// if TabControl1.ActiveTab=TabItem1 then
// SetFocused(ButtonFocusDummyPage1);
// if TabControl1.ActiveTab=TabItem2 then
// SetFocused(ButtonFocusDummyPage2);
// if TabControl1.ActiveTab=TabItem3 then
// SetFocused(ButtonFocusDummyPage3);
    end;
  end;
  if not Handled then
  begin
    case EventInfo.GestureID of
    sgiLeft: ExecuteAction(NextTabActionPGOptions);
    sgiRight: ExecuteAction(PreviousTabActionPGOptions);
    end;
  end;
end;
Gibt es einen Trick, den Focus, der auf TSwitch oder TTrackbar liegt, loszuwerden?

Danke!
Wolfgang
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Aktuellen Focus verlieren oder löschen

  Alt 19. Sep 2018, 14:01
Zitat:
//ClearFocus oder ReleaseFocus oder ForgetFocus wäre schön, gibts aber nicht
Nö aber SetFocus(0)

gruss

Geändert von EWeiss (19. Sep 2018 um 14:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Aktuellen Focus verlieren oder löschen

  Alt 19. Sep 2018, 14:05
Ja, unter Windows.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Aktuellen Focus verlieren oder löschen

  Alt 19. Sep 2018, 14:08
Ja, unter Windows.
Ach so wusste nicht das es nicht um Windows geht.

sorry dann weis ich auch nicht.

PS:
Und SetFocused(0); ?

gruss
  Mit Zitat antworten Zitat
knaeuel

Registriert seit: 2. Jul 2007
110 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Aktuellen Focus verlieren oder löschen

  Alt 19. Sep 2018, 14:29
cool, danke für die schnellen Antworten!

so wie es aussieht, ist

SetFocused(nil); die Lösung!

Herzlichen Dank für die Tipps!

in Gänze sieht das also so aus:

Delphi-Quellcode:
procedure TFormOptions.TabControl1Gesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean);
begin
  //wir wollen die "blättern"-geste vermeiden, wenn der Focus auf dem Trackbar/TSwitch liegt,
  //damit beim Einstellen des Trackbars/TSwitchs nicht immer der Bildschirm gewechselt wird
  if Assigned(Focused) then
  begin
    //bei Trackbar-Verschiebung nicht durch die Tabs blättern
    if Focused.GetObject is TTrackbar then
      Handled:=true;

    //bei Switch-Bewegung nicht durch die Tabs blättern
    if Focused.GetObject is TSwitch then
      Handled:=true;

    if Handled then
    begin
      //zum Schluss Focus wegschicken, damit die Gesten nun wieder funktionieren
      SetFocused(nil);
    end;
  end;
  if not Handled then
  begin
    case EventInfo.GestureID of
    sgiLeft: ExecuteAction(NextTabActionPGOptions);
    sgiRight: ExecuteAction(PreviousTabActionPGOptions);
    end;
  end;
end;
Wolfgang
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Aktuellen Focus verlieren oder löschen

  Alt 19. Sep 2018, 14:34
Ich habe mir schon gedacht das es auch so etwas in was auch immer du programmierst Windows, Android.. bla bla geben muss.
War mir nur nicht sicher was bei SetFocused verwendet wird.
Aber gut wenn es geht

Lag ich doch nicht SOooo falsch.

gruss
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.017 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Aktuellen Focus verlieren oder löschen

  Alt 19. Sep 2018, 16:33
Ja, unter Windows.
Das bezweifle ich. Bei VCL habe ich in einer TControl-Unterstützerklasse das hier:
Delphi-Quellcode:
procedure Blur();
begin
  if Enabled then
  begin
    Self.Enabled := False;
    Self.Enabled := True;
  end;
end;
Geht das besser (in VLC)?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Aktuellen Focus verlieren oder löschen

  Alt 19. Sep 2018, 16:38
Ja, unter Windows.
Das bezweifle ich. Bei VCL habe ich in einer TControl-Unterstützerklasse das hier:
Delphi-Quellcode:
procedure Blur();
begin
  if Enabled then
  begin
    Self.Enabled := False;
    Self.Enabled := True;
  end;
end;
Geht das besser (in VLC)?
Um was geht es dir hier?

Er wollte mir sagen das es SetFocus unter Windows gibt aber nicht unter Android.
Wo gibt es nun mit deiner Antwort einen Bezug zu Android? Und der Frage vom TE
Man muss verstehen was man liest.. aber keine bange mir geht es mitunter auch nicht anders.

Ich habe vorher auch nicht gewusst das es NICHT um Windows geht.

gruss

Geändert von EWeiss (19. Sep 2018 um 16:47 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.822 Beiträge
 
Delphi 12 Athens
 
#9

AW: Aktuellen Focus verlieren oder löschen

  Alt 28. Sep 2018, 19:05
Zitat:
//ClearFocus oder ReleaseFocus oder ForgetFocus wäre schön, gibts aber nicht
Nö aber SetFocus(0)

gruss
Ich hab' heute auch so etwas gebraucht und das hier gefunden:

FMX.Controls.TControl.ResetFocus
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Aktuellen Focus verlieren oder löschen

  Alt 28. Sep 2018, 19:40
Zitat:
//ClearFocus oder ReleaseFocus oder ForgetFocus wäre schön, gibts aber nicht
Nö aber SetFocus(0)

gruss
Ich hab' heute auch so etwas gebraucht und das hier gefunden:

FMX.Controls.TControl.ResetFocus
Dir ist aber klar das dieses Thema erledigt war oder?
SetFocused(nil);

gruss

Geändert von EWeiss (28. Sep 2018 um 19:45 Uhr)
  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 10:46 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