AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird
Thema durchsuchen
Ansicht
Themen-Optionen

Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird

Ein Thema von yörsch · begonnen am 11. Jun 2010 · letzter Beitrag vom 14. Jun 2010
Antwort Antwort
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#1

Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird

  Alt 11. Jun 2010, 09:55
Hallo Zusammen,

ich navigiere mit der Tabtaste durch ein Form...
damit ich alle Controls erreiche hab ich selbst eine Funktion geschrieben...
denn z.B.: Radiobuttons werden nur erreicht wenn diese checked := True haben!
soweit sogut (vieleicht gibts da auch was besseres ist aber hier nicht die Frage...)

Wenn ein RadioButton mit SetFocus den Fokus bekommen, so ist dieser danach gechecked!
Das soll nicht automatisch passieren!

Der Anwender kann mit der SPACE-Taste, wie bei CheckBoxen, checken!

Wenn der Anwennder sich mit TAB durch die Anwendung navigiert,
ist das nervig wenn danach alle RadioButtons verändert sind....

Hier ein Auszug was ich mit den aktiven Controls mache
Delphi-Quellcode:
procedure TFoNavBase.NextControlSetFocus();
begin
  try
    //Fucus setzen
    FActivControl.SetFocus;
    //Mit Farbe markieren
    FActivControl.color := FParameter.Color[cPaN_ActivControlColor]
  finally
  end;
end;
Gefunden hab ich, das dies von Windoof selbst kommt =>
Mit Windows.SetFocus(RadioButton1.Handle); wird auch gecheckt...

Auch über Papa Google war das der beste Link den ich gefunden hab...
http://www.lazarusforum.de/viewtopic.php?f=19&t=2930


Also: Wie kann ich verhindern, das ein TRadioButton das mit SetFocus den Focus bekommt gecheckt wird?

PS: ein Workarround mit selbst zurücksetzten geht, ist aber nicht sinne des Erfinders...

Delphi-Quellcode:
  if (FActivControl is TRadioButton) then
      begin
        // Workaround...
        RB_Checked := -1;
        for i := FActivControl.Parent.ControlCount - 1 downto 0 do
          if (FActivControl.Parent.Controls[i] is TRadioButton)
            and ((FActivControl.Parent.Controls[i] as TRadioButton).checked)
            then
              RB_Checked := i;
        // Workaround...

        FActivControl.SetFocus;

        // Workaround...
        if RB_Checked = -1 then
          (FActivControl as TRadioButton).Checked := False
        else
          (FActivControl.Parent.Controls[RB_Checked] as TRadioButton).Checked := True;
        // Workaround...
      end
      else
         FActivControl.SetFocus;
Jörg
have FUN

Geändert von yörsch (11. Jun 2010 um 10:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird

  Alt 11. Jun 2010, 10:44
RadioBoxen werden nunmal durch Fokus aktiviert.

Es gab vor kurzem auch schonmal eine Diskusion zu soeinem Thema "verändern von gewohntem Verhalten".

Ergo: verwende CheckBoxen, denn diese besitzen das von dir gewünschte Verhalten.

Wenn nur eine CheckBox gleichzeitig aktiviert sein soll, dann deaktiviere beim Aktivieren einer CheckBox alle anderen CheckBoxen und fertig.

[add]
Für 3 CheckBoxen einfach diesen Code allen CheckBoxen beim OnClick zuweisen.
Delphi-Quellcode:
// immer genau eine Box aktiviert
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Tag <> 0 then Exit;
  CheckBox1.Tag := 1;
  CheckBox1.Checked := Sender = CheckBox1;
  CheckBox2.Checked := Sender = CheckBox2;
  CheckBox3.Checked := Sender = CheckBox3;
  {...}
  CheckBox1.Tag := 0;
end;

// maximal eine Box aktiviert
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Tag <> 0 then Exit;
  CheckBox1.Tag := 1;
  CheckBox1.Checked := CheckBox1.Checked and (Sender = CheckBox1);
  CheckBox2.Checked := CheckBox2.Checked and (Sender = CheckBox2);
  CheckBox3.Checked := CheckBox3.Checked and (Sender = CheckBox3);
  {...}
  CheckBox1.Tag := 0;
end;
Für jede andere Anzahl sollte ein Muster erkennbar sein.

PS: CheckBox1.Tag kann man auch durch eine beliebige globale booleanische Variable ersetzen.
Diese Variable stellt nur sicher, daß Veränderungen innerhalb dieses Ereignisses keine Endlosschleife auslösen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Jun 2010 um 10:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

AW: Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird

  Alt 11. Jun 2010, 10:52
Wenn nur eine Box gleichzeitig aktiviert sein soll, dann deaktiviere beim Aktivieren einer Box alle anderen Boxen und fertig.
Das widerspricht aber auch dem gewohnten Verhalten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird

  Alt 11. Jun 2010, 11:05
Der gesamten Liste/Gruppe vielleicht (hier kann man ja über ein Label oder den hint einen Hinweis auf diese Eigenart geben), aber nicht der einzelnen Komponente.

Hier eine Variante für "maximal eine CheckBox gewählt":
Delphi-Quellcode:
procedure TForm1.CheckBox1Click(Sender: TObject);
var B: Boolean;
begin
  if CheckBox1.Tag <> 0 then Exit;
  CheckBox1.Tag := 1;
  B := CheckBox1.Checked or CheckBox2.Checked or CheckBox3.Checked {...};
  CheckBox1.Enabled := CheckBox1.Checked or not B;
  CheckBox2.Enabled := CheckBox2.Checked or not B;
  CheckBox3.Enabled := CheckBox3.Checked or not B;
  {...}
  CheckBox1.Tag := 0;
end;
Und ich würde mal sagen, dieses Verhalten wäre so sehr bekannt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Jun 2010 um 11:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#5

AW: Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird

  Alt 11. Jun 2010, 11:06
Zitat:
Ergo: verwende CheckBoxen, denn diese besitzen das von dir gewünschte verhalten.
Im Grundsatz hast du Recht.

Zum weiteren Hintergrund:
Hast du mal versucht NUR mit der Tastatur zu arbeiten,
wenn du Alt-Software in der Mangel hast, bei der du das aussehn nicht verändern darfts...
aber die Navigation...

und RadioButtons beim Programmstart nicht unbedingt gecheckt sind!


Der WorkAround ist nicht schön, funktioniert aber...
Jörg
have FUN

Geändert von yörsch (11. Jun 2010 um 11:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird

  Alt 11. Jun 2010, 11:13
Welche Auswahl wird denn genau benötigt?
> genau oder maximal eins gewählt

Wenn man das aus Beitrag #4 verwendet und dann noch mit einer Warnung für "es muß Einwas gewählt sein" kombiniert, dann bekommt man auch die "Genau"-Variante hin und hat gleichzeitig ein gewohntes Standardverhalten verbaut.
Und die CheckBox kann per Leertaste umgestellt werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Jun 2010 um 11:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#7

AW: Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird

  Alt 14. Jun 2010, 08:28
himitsu,

ich möchte keinen Diskurs führen was bei mikisoft oder in der theoretischen informatik richtig ist oder nicht
denn die nackte realität sieht sieht meist bunter aus als wir alles ahnen.

Das Programm an dem ich rum schraube ist 15 Jahre alt und von Leuten geschrieben die ein großes Fachwissen haben, aber leider nicht in informatischen Dingen...

Nur: Die frei navigation mit Pfeittasten ist da viel ansprusvoller ....
Plazier mal ein paar controls frei auf einem Form und versuch nur mit den Pfeiltasten, Space und AlphaNumerischen eingaben alles zu erreichen, so das es sinnvolle ergebnisse liefert...
wenn du dazu eine einfache Lösungen hast melde dich!


wenns meins fertig ist kann einige Ergebnisse mal posten...

Besten Dank an alle
Jörg
have FUN
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#8

AW: Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird

  Alt 14. Jun 2010, 09:41
@yörsch: 100% Zustimmung.

Das Windows-"Standardverhalten" vieler Komponenten ist in vielen Fällen, nicht nur bei Uraltprogrammen, für Nicht-Mausfreaks unbefriedigend.

Geändert von idefix2 (14. Jun 2010 um 09:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#9

AW: Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird

  Alt 14. Jun 2010, 11:34
Das Windows-"Standardverhalten" vieler Komponenten ist in vielen Fällen, nicht nur bei Uraltprogrammen, für Nicht-Mausfreaks unbefriedigend.
Wer schon mal Software für Leute mit "Handicaps" gemacht hat: wie sollen die Teilweise ne´ Maus bedienen...

Und wer mit Tastaur arbeiten kann ist meisst schneller, als die Leute die mit einer Maus arbeiten. halt MikiSoft verseucht...
Leider ist die Einarbeitung für Tastatur Steuerung länger...

Aber das währe in einem neuen Thread zu klären...
Jörg
have FUN
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Wie wird verhindert das bei SetFocus der RadioButton gecheckt wird

  Alt 14. Jun 2010, 20:32
Hättest du mal eine Demo oder 'nen Screeny von soeiner GUI?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:33 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