08. maj 2005 - 21:05 Der er 6 kommentarer og
1 løsning

Hvilken component har focus

Hvordan finder man nemmest ud hvilken component der har focus.

Jeg har en form med ca. 15 componenter, 6 af den har 'TabStop' sat til True og resten har den sat til False.
Så skulle Focus, ifølge alle lærebøger og brugermanualer, flytte sig imellem disse 6 komponenter, når programmet kører og man trykker på tabulator tasten.
Mit problem er at når Focus flyttes fra den der har TabOrder=5 til den der har TabOrder=0, så forsvinder Focus, det vil sige at jeg ikke kan se hvilken component der har Focus. Hvis jeg der trykker pil ned går Focus til den der har TabOrder=1, og hvis jeg trykker på pil op går Focus til den der har TabOrder=6. Men hvis jeg derimod trykker en ekstra gang på tabulator så kommer Focus frem til den rigtige component.
TabOrder 0 er en TRadioGroup,
TabOrder 1 er en TListBox
TabOrder 2 er en TButton
TabOrder 3 er en TButton
TabOrder 4 er en TButton
TabOrder 5 er en TButton
TabOrder 6 er en TEdit hvor TabStop er sat til False.

Er der en nem lille routine som, når man trykker på f.eks. F1 så bliver Label1.Caption lig med navnet på den component der har Focus?
Avatar billede stoney Nybegynder
08. maj 2005 - 21:24 #1
Husk at sætte formens keypreview til true

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = vk_F1 then
label1.Caption := form1.ActiveControl.Name;
end;

Stoney
08. maj 2005 - 21:35 #2
Hej Stoney, det gav jo sådan set svar på mit spørgsmål, men løste ikke mit problem.
Den viste at det er det rigtige component dar har focus, en TRadioGroup.
Men det sjove er at når jeg så trykker den ekstra gang på tabulator tasten, så jeg kan se at det er min TRadioGroup der har Focus, og jeg så kan bladre imellem de forskellige valgmuligheder med piletasterne, så viser din routine ingenting!
Har du en ide til hvad jeg skal gøre for at min TRadioGroup får korrekt focus?
Jeg har prøvet med RadioGroup1.SetFocus, men det giver samme problem.
Eller er det sådan at en TRadioGroup skal have to gange tabulator tryk for at få focus?
08. maj 2005 - 21:51 #3
Hej Stoney
Vil du høre noget sjovt?
Hvis min TRadioGroup får TabStop=False, så behøver jeg kun at trykke en gang på tabulator tasten for at min TRadioGroup får Focus, og din rutine viser igen en tom streng.
Men mit problem fortsætter hvis jeg skriver RadioGroup1.SetFocus, så får min RadioGroup ikke korrekt focus før jeg trykker en gang på tabulatortasten, og den skal have focus når formen åbnes, fordi brugeren skal starte med at vælge hvilken form for oplysninger han vil søge på.
Avatar billede kroning Nybegynder
09. maj 2005 - 10:23 #4
For at sætte den valgte button i en radiogroup i focus skal du kalde SetForcus for den valgte button og ikke for hele RadioGroup´en, f.eks:

RadioGroup1.Buttons[RadioGroup1.ItemIndex].SetFocus;
09. maj 2005 - 23:09 #5
Hej Kroning
Det må hedde noget andet end Buttons, jeg får en fejlmeddelelse.
Undeclared identifier: 'Buttons'.
Jeg prøvede så med Items, men det virkede heller ikke.
Jeg bruger D6.
Avatar billede kroning Nybegynder
10. maj 2005 - 00:44 #6
Det virker fint i delphi 7, jeg har prøvet med delphi 4 og der virkede det ikke.
Dette virker dog fint i både delpi 4 og 7 så det bør også virke i delphi 6:

(RadioGroup1.Controls[RadioGroup1.ItemIndex] as TRadioButton).SetFocus;
10. maj 2005 - 21:13 #7
Hej Kroning
Det virker perfekt.
Jeg opretter lige et spørgsmål med point til dig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester