AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Radiogroup: Tastatur und Mauseingabe unterscheiden

Radiogroup: Tastatur und Mauseingabe unterscheiden

Ein Thema von idefix2 · begonnen am 25. Mai 2010 · letzter Beitrag vom 26. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2   
idefix2

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

Radiogroup: Tastatur und Mauseingabe unterscheiden

  Alt 25. Mai 2010, 20:20
In einer Radiogroup kann die Elementauswahl über einen Klick mit der Maus oder über die Tastatur mittels Pfeiltasten erfolgen.
Um auf eine Änderung zu reagieren, hab ich aber nur das Ereignis onclick gefunden, das wird bei einem Mausklick auf ein Element der Radiogroup ebenso ausgelöst wie wenn durch Drücken einer Pfeiltaste das gewählte Element geändert wird. Gibt es irgend eine Möglichkeit für das Programm, festzustellen, ob das Ereignis durch Mausklick oder durch Tastatureingabe ausgelöst wurde?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

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

Re: Radiogroup: Tastatur und Mauseingabe unterscheiden

  Alt 25. Mai 2010, 20:40
Warum willst du dies unterscheiden? Der Benutzer wird sehr verwirrt sein, wenn er mit der Maus etwas anderes auslöst, als mit der Tastatur.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
idefix2

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

Re: Radiogroup: Tastatur und Mauseingabe unterscheiden

  Alt 25. Mai 2010, 21:04
Finde ich nicht.

Wenn er mit der Maus ein Element auswählt, hat er seine Auswahl gemacht. Bei manchen Elementen ist nun die Eingabe eines Zusatztextes nötig, und in dem Fall will ich den Eingabefocus mittels editx.setfocus direkt auf das passende Editfeld setzen, damit erspart er sich ein extra-Tab bzw. einen Mausklick.

Wenn er mit der Tastatur in der Radiogroup hinauf oder hinuntergeht, heisst das nicht, dass er schon dort ist, wo er hinwill, in dem Fall muss der Focus in der Radiogroup bleiben, bis der User sie mit der tab Taste oder mit der Maus verlässt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

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

Re: Radiogroup: Tastatur und Mauseingabe unterscheiden

  Alt 25. Mai 2010, 21:25
Äh, reden wir von einer Radiogroup oder Listbox? Deine Beschreibung klingt eher nach einer Listbox.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
idefix2

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

Re: Radiogroup: Tastatur und Mauseingabe unterscheiden

  Alt 25. Mai 2010, 21:58
Nein, eine Radiogroup.

In der Radiogroup gibt es mehrere Möglichkeiten zum ankreuzen:

Klavier verkauft
Pianino verkauft
Klavier vermietet
Pianino vermietet
sonstiges

Im Fall von Verkauf taucht eine zusätzliche Editbox mit dem Titel Kaufpreis auf.
Im Fall von Sonstiges taucht ein zusätzliches Memofeld mit dem Titel info auf.

Beim Klick auf Verkauf wird das Feld Kaufpreis visible und der Focus wandert sofort in das Feld Kaufpreis
Beim Klick auf Sonstiges wird das Memofeld visible und der Focus wandert sofort in das Memofeld

Beim Bewegen mit der Tastatur soll nur das Eingabefeld sichtbar werden, das dem aktuell angewählten Radiogroupitem entspricht, der Focus muss aber in der Radiogroup bleiben, weil ich nicht weiss, ob der user mit den Pfeiltasten weitergehen will oder schon beim gewünschten Element gelandet ist.
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: Radiogroup: Tastatur und Mauseingabe unterscheiden

  Alt 25. Mai 2010, 22:43
Hallo,

Workaround: Die Elementen(Controls) der RadioGroup besitzen auch Ereignisse denen man Event-Handler zuweisen kann.
MyKeyUp und MyMouseUp sind nicht den Ereignissen der Form zugewiesen. Das Ereignis OnClick der RadioGroup benötigt man dann nicht mehr, hier die komplette Demo-Unit:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    RadioGroup1: TRadioGroup;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure MyMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure MyKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


procedure TForm1.FormCreate(Sender: TObject);
var z: Integer;
begin
  for z := 0 to Pred(RadioGroup1.ControlCount) do
    with TRadioButton(RadioGroup1.Controls[z]) do
      begin
      OnMouseUp := MyMouseUp;
      OnKeyUp := MyKeyUp;
      end;
end;

procedure TForm1.MyKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  showmessage('Mit einer Taste: '+IntToStr(RadioGroup1.ItemIndex));
end;

procedure TForm1.MyMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  showmessage('Mit der Maus: '+IntToStr(RadioGroup1.ItemIndex));
end;

end.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Radiogroup: Tastatur und Mauseingabe unterscheiden

  Alt 26. Mai 2010, 01:44
Zitat von idefix2:
und in dem Fall will ich den Eingabefocus mittels editx.setfocus direkt auf das passende Editfeld setzen
Davon kann ich Dir nur abraten.
Programme, die eigenmächtig den Focus verändern verhalten sich anderst als der Windowsbenutzer es gewohnt ist.
Je mehr Logik im Programm dafür aufgewendet wird umso unvorhersagbarer wird sich das Programm verhalten.
Also ich kenne kein etabliertes Programm dass den Focus verändert.

Ich würde nur eine Situation zulassen, bei dem der Focus vom Programm verändert werden darf:
Wenn der Benutzer "OK" klickt werden alle Eingaben auf Vollständigkeit/Korrektheit überprüft.
Sollte etwas fehlen, darf das Programm den Fokus auf das Feld mit den fehlenden/falschen Daten setzen und dann eine Exception auslösen (z.B. Kaufpreis fehlt).
  Mit Zitat antworten Zitat
idefix2

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

Re: Radiogroup: Tastatur und Mauseingabe unterscheiden

  Alt 26. Mai 2010, 09:37
@ sx2008
Dass der Focus in einer Radiogroup bleibt, nachdem der User mit der Maus den gewünschten Knopf angeklickt hat, ist völlig sinnlos. In dem Bereich will er sicher nichts machen, vor allem nicht mit der Tastatur, für die der Focus ja relevant ist. Wenn als nächstes ein Tastatureingabefeld kommt, ist es sehr hilfreich, den Focus gleich dorthin zu versetzen, es erspart dem Anwender eine völlig unnötige Aktion (Tab Taste oder Mausklick auf das nächste Feld). Über eine Menge Programme, die dem User absolut unnötige Eingaben nicht abnehmen, ärgere ich mich immer wieder.


@ Lannes
Danke, das werde ich einbauen.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.553 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Radiogroup: Tastatur und Mauseingabe unterscheiden

  Alt 26. Mai 2010, 09:52
Idefix: Es ist nach Deiner Logik auch unsinnig, daß eine ComboBox nach dem Auswählen des gewünschten Eintrags noch den Focus hat...ist aber dennoch richtig. Mach doch nicht solche Klimmzüge. Ist alles schon richtig so wie man sich das gedacht hat. Du kannst Dir sicher sein, daß 99% Deiner Nutzer (es sei denn, Du bist der einzige) mit der Maus nochmals das Editfeld anklicken werden, nachdem sie den entsprechenden Radiobutton angeklickt haben, egal ob es schon den Focus hat, oder nicht. Aber, wenn du noch so viel Energie in eher ungewöhnliche Features investieren kannst, muss der Rest des Programms ja der Hammer sein, und so Kleinigkeiten lassen sich verschmerzen

Sherlock
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
idefix2

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

Re: Radiogroup: Tastatur und Mauseingabe unterscheiden

  Alt 26. Mai 2010, 10:04
Zitat:
Ist alles schon richtig so wie man sich das gedacht hat.
Genau, und Bill Gates ist unser Prophet
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 07:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf