Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Focus setzen bei RadioGroup (https://www.delphipraxis.net/149967-focus-setzen-bei-radiogroup.html)

OsCor 3. Apr 2010 18:12


Focus setzen bei RadioGroup
 
Hallo Foristen,

ich arbeite mit D2007 und habe ein Problem, das mir beinahe lächerlich vorkommt:
Um einen Arbeitsgang abzukürzen, steuere ich eine RadioGroup mit RadioGroup1.SetFocus an. Der Compiler mosert nicht, aber es gibt einen Laufzeitfehler EInvalidOperation 'Deaktiviertes oder unsichtbares Fenster kann den Fokus nicht erhalten'.
In einem Testprogramm habe ich nichts als einen Button und diese RadioGroup auf dem Formular, es gibt aber die gleiche Fehlermeldung.

Kann mir jemand bitte die Tomaten von den Augen nehmen?

OsCor

zeras 3. Apr 2010 18:31

Re: Focus setzen bei RadioGroup
 
Ist das Fenster sichtbar, wo du den Focus setzen willst? In welchem Zustand setzt du denn den Focus (create, show, activate)?

s.h.a.r.k 3. Apr 2010 18:33

Re: Focus setzen bei RadioGroup
 
Ist diese RadioGroup enabled?

Wolfgang Mix 3. Apr 2010 18:35

Re: Focus setzen bei RadioGroup
 
Wie hast du die RadioGroup erzeugt?

OsCor 3. Apr 2010 18:40

Re: Focus setzen bei RadioGroup
 
Hallo zeras,

die RadioGroup befindet sich im selben Formular wie der Button, der nach einigen anderen Aktionen (Füttern eines Stringgrids) den Fokus wieder an die RadioGroup zurückgeben will.

@s.h.a.r.k
Ja.

@Wolfgang Mix
Beim Erstellen des Formulares.

Den Begriff Fenster verstehe ich nicht so recht in diesem Zusammenhang.

OsCor

s.h.a.r.k 3. Apr 2010 18:41

Re: Focus setzen bei RadioGroup
 
Er meint das Formular ;)

zeras 3. Apr 2010 18:56

Re: Focus setzen bei RadioGroup
 
Zitat:

Zitat von OsCor
Hallo zeras,

die RadioGroup befindet sich im selben Formular wie der Button, der nach einigen anderen Aktionen (Füttern eines Stringgrids) den Fokus wieder an die RadioGroup zurückgeben will.

Den Begriff Fenster verstehe ich nicht so recht in diesem Zusammenhang.

OsCor

Ja, ich meine natürlich das Formular.
Lass doch mal das Füttern des SG raus und schaue, was passiert.
Drückst du auf den Button und dann werden die Aktionen gestartet, oder passiert das irgendwie anders?
Das Testprogramm kann dann doch nicht so gross sein. Dann poste es doch mal.

Wolfgang Mix 3. Apr 2010 18:59

Re: Focus setzen bei RadioGroup
 
Erstelle 'mal auf einem neuen Formular eine neue RadioGroup mit
2 Items über den Objektinspektor und teste noch einmal

OsCor 3. Apr 2010 19:12

Re: Focus setzen bei RadioGroup
 
So sieht das Testprogramm aus. Nach Drücken des Buttons sollte eigentlich die Radiogroup aktiv und die Itemauswahl per Tastatur möglich sein.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    RadioGroup1: TRadioGroup;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
    RadioGroup1.SetFocus;
end;

end.

Wolfgang Mix 3. Apr 2010 19:17

Re: Focus setzen bei RadioGroup
 
Was macht denn
Delphi-Quellcode:
RadioGroup1.Item2.SetFocus;

OsCor 3. Apr 2010 19:22

Re: Focus setzen bei RadioGroup
 
Gar nichts, das geht doch gar nicht.

Wolfgang Mix 3. Apr 2010 19:28

Re: Focus setzen bei RadioGroup
 
Doch, du musst die Items über das Objektinspektormenü erzeugen
und nicht über die Toolpalette RadioButtons dahin schieben.

s.h.a.r.k 3. Apr 2010 19:39

Re: Focus setzen bei RadioGroup
 
Sein Quellcode funktioniert aber mit D2010! Ich hatte vorher genau das probiert. Ich habe keinerlei Einträge auf der RadioGroup. Sicher, dass Enabled und Visible auf True stehen? (von Form1 und RadioGroup1)

Hänge mal das Projekt komplett an.

OsCor 3. Apr 2010 20:15

Re: Focus setzen bei RadioGroup
 
@Wolfgang

Ich ziehe aus der Toolpalette eine RadioGroup auf die Form und benenne die Items anschließend im Objektinspektor. Dann setze ich den ItemIndex auf 0.

@Armin

Bisher konnte ich mir meist selber helfen, deshalb die Frage: Einfach alle Dateien eines Projektes als Attachment hier anhängen?


@all
Das Fenster mit dem Hinweis auf den Fehler zeigte die Möglichkeit an, diesen speziellen Fehler so nicht mehr anzuzeigen. Das habe ich irgendwann angekreuzt. Wie kriege ich denn das wieder so hin, wie es vorher war?

Oswald

s.h.a.r.k 3. Apr 2010 20:18

Re: Focus setzen bei RadioGroup
 
Zitat:

Zitat von OsCor
@all
Das Fenster mit dem Hinweis auf den Fehler zeigte die Möglichkeit an, diesen speziellen Fehler so nicht mehr anzuzeigen. Das habe ich irgendwann angekreuzt. Wie kriege ich denn das wieder so hin, wie es vorher war?

Bei mir unter D2010 ist die Liste der ignorierten Exceptions unter Tools -> Optionen -> Sprach-Exceptions (ziemlich wei unten in den Debugger-Optionen).

Hätte mir das Projekt eben bei Zeit mal angeschaut. Was passiert eigentlich, wenn du eine komplett neue VCL-Anwendung aufmachst und genau das machst was du bisher hast? Ein RadioGroup mit Button drauf klatschen und den Code rein schreiben. Bei mir hat das, wie schon oben erwähnt ohne Probleme funktioniert.

Ansonsten würde ich auf einen Fehler von Delphi tippen und dann käme die Frage nach allen installieren Updates.

OsCor 3. Apr 2010 21:14

Re: Focus setzen bei RadioGroup
 
Was ich gepostet habe, ist ja die komplett neue VCL-Anwendung. Das eigentliche Programm, an dem ich schreibe, ist viel zu groß, um hier was reinzustellen - und möglicherweise kann ich das Problem ja auch mit irgendeinem Workaround umschiffen. Aber noch hoffe ich, daß wir das Problem lösen können.
Ich dachte an einen Fehler in meinem Code und habe deshalb diesen kleinen Versuch gestartet.

CodeGear™ Delphi® 2007 für Win32® Version 11.0.2804.9245 steht in der Versionsinfo.

Edit: Noch ein paar Tests gemacht: Wenn ich mit TabOrders arbeite, und die RadioGroup mit TabOrder=1 versehe und den Button mit 0, dann muß ich, um vom Button auf die Group zu kommen, die Tabulatortaste 2 mal betätigen. Wo geht die hin beim ersten Mal?

Oswald

s.h.a.r.k 3. Apr 2010 21:52

Re: Focus setzen bei RadioGroup
 
Du kannst hier ja via ActiveControl (Form1.ActiveControl) schauen, welches Control denn den Focus erhält.

zeras 4. Apr 2010 10:02

Re: Focus setzen bei RadioGroup
 
Ich habe noch ein wenig probiert. Wenn Setfocus im OnCreate des Formulars kommt, dann kommt auch diese Fehlermeldung. Kann es sein, dass du zwischendurch dieses Formular deaktivierst oder dass ein anderes Formular gerade aktiv ist?

OsCor 4. Apr 2010 10:47

Re: Focus setzen bei RadioGroup
 
Nein, eigentlich nicht.
Der Vorgang ist tatsächlich so simpel: Neue VCL-Anwendung, RadioGroup und Button drauf ziehen und im OnCreate des Formulars RadioGroup1.SetFocus eingeben.

Das aktive Objekt werde ich jetzt mal suchen.

Edit: Weia, wie macht man das?

zeras 4. Apr 2010 11:00

Re: Focus setzen bei RadioGroup
 
Vielleicht probierst du es mit einzelnen Radiobuttons und nicht mit einer Radiogroup. Sollte doch auch gehen. Ich habe mit D2009 getestet.

OsCor 4. Apr 2010 11:15

Re: Focus setzen bei RadioGroup
 
Habe ich auch gerade. Das funktioniert bei mir auch.
Möglicherweise wird zunächst mal das Objekt RadioGroup an sich angesteuert und dann erst die einzelnen Items. Das würde für mich bedeuten, daß ich halt die Gruppe mit dem Rahmen und der Caption weglasse, da anscheinend das ausschließliche Checken auch so funktioniert.
Das Setzen des Focus funktioniert aber auch so nicht, lediglich das Springen mit dem Tabulator funktioniert ohne Zwischenschritt. Immerhin.

Danke für den Hinweis mit den einzelnen Radiobuttons.

OsCor 4. Apr 2010 11:51

Re: Focus setzen bei RadioGroup
 
Nochmal eine Ergänzung:

Delphi-Quellcode:
Form1.ActiveControl := RadioGroup1;
<-- funktioniert nicht

Delphi-Quellcode:
Form1.ActiveControl := RadioButton1;
<-- funktioniert und setzt den angesteuerten Button auf Checked

Ein Workaround habe ich jetzt also. Danke für die Hilfe!

Oswald

stahli 4. Apr 2010 15:14

Re: Focus setzen bei RadioGroup
 
Zitat:

und im OnCreate des Formulars RadioGroup1.SetFocus
Versuche es mal im OnActivate...

(Die RadioGroup hat mir auch schon einige schlaflose Nächte bereitet, da sie u.a. einen Click auslöst, wenn das Formular geöffnet wird und sie den Focus hat.)

OsCor 4. Apr 2010 17:27

Re: Focus setzen bei RadioGroup
 
Im OnActivate gibt es tatsächlich keine Fehlermeldung, was mir im Nachhinein auch völlig logisch vorkommt: Die Form ist schon da mit allen Komponenten, was bei OnCreate vermutlich nicht der Fall ist. Wieder was gelernt.

Was ich immer noch nicht weiß: Wie kriege ich heraus, welche Komponente zwischenzeitlich den Focus hat, wenn ich von einem Button mit dem Tabulator zur RadioGroup weiterschalten will und dafür zweimal TAB drücken muß?

Ich weiß noch nicht, wie ich mit Form1.ActiveControl arbeiten kann.

Oswald

daywalker9 4. Apr 2010 18:47

Re: Focus setzen bei RadioGroup
 
Welches Control den Focus hat, bekommst du mit "ActiveControl" raus. Was verstehst du den nicht daran? Du kannst das ActiveControl selber setzten wie es in ein paar Posts vorher auch schon steht. Und kannst dies abfragen und ggf. damit weiter arbeiten


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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