AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Im "OnClick" eines Buttons erkennen, ob es per Maus erfolgte
Thema durchsuchen
Ansicht
Themen-Optionen

Im "OnClick" eines Buttons erkennen, ob es per Maus erfolgte

Ein Thema von daddy · begonnen am 26. Apr 2007 · letzter Beitrag vom 27. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
126 Beiträge
 
Delphi 7 Enterprise
 
#1

Im "OnClick" eines Buttons erkennen, ob es per Mau

  Alt 26. Apr 2007, 17:30
Weiß jemand, ob ich im OnClick-Ereignis eines Buttons herausfinden kann, ob es per Tastatur oder per Maus ausgelöst wurde?

Im ControlState ist der Zustand "csLButtonDown" zu diesem Zeitpunkt schon nicht mehr eingetragen. Und ich würde gerne vermeiden mir im MouseDown-Ereignis selber zu merken, ob per Maus geklickt wurde, da diese Abfrage bei vielen Knöpfen in vielen verschiedenen Formularen erfolgen soll. Außerdem kann man auf einen Button ja auch klicken, den Mauszeiger vom Button weg bewegen und die Maustaste wieder loslassen. In diesem Fall wird das OnClick-Ereignis ja gar nicht ausgelöst. Evtl. kann ich einen eigenen Knopf als Komponente erzeugen aber vielleicht gibt es ja auch eine einfache Abfragemöglichkeit, die ich nur nicht finde.

Danke für alle Hinweise

Gruß

Daddy
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Im "OnClick" eines Buttons erkennen, ob es per

  Alt 26. Apr 2007, 17:47
Prüf doch einfach im onClick mit getasynckeystate() ob Leer- oder Entertaste gedrückt sind
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#3

Re: Im "OnClick" eines Buttons erkennen, ob es per

  Alt 27. Apr 2007, 02:40
Was willst du erreichen, wenn man mal fragen darf?
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
126 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Im "OnClick" eines Buttons erkennen, ob es per

  Alt 27. Apr 2007, 09:35
Beim Druck eines Knopfes öffnet sich ein Fenster. Innerhalb des Fensters gibt es verschiedene Komponenten und auf eine davon möchte ich anschließend automatisch den Mauszeiger positionieren. Das klappt soweit auch. Aber es soll eben nur dann geschehen, wenn der ursprüngliche Knopf per Maus angeklickt wurde und nicht wenn er per Tastatur (also Leertaste, Enter oder Hotkey) ausgelöst wurde.
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#5

Re: Im "OnClick" eines Buttons erkennen, ob es per

  Alt 27. Apr 2007, 11:59
Hallo,
einfach über OnMouseDown/OnMouseUp ein Variable setzen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var S:String;
begin
  if fMouseDown then
    S:='Mouse'
  else
    S:='Tastatur';
  ShowMessage(S);

end;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  fMouseDown:=True;
end;

procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  fMouseDown:=False;
end;
Gruß Bernd
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Im "OnClick" eines Buttons erkennen, ob es per

  Alt 27. Apr 2007, 12:04
Und warum keine MSDN-Library durchsuchenWM_COMMAND an das Fenster schicken mit der ID der Schaltfläche? Mit der Maus klicken zu wollen ist mehr als eine Krücke.
Beispiel aus einem Programm:
SendMessage(hDlg, WM_COMMAND, MakeWParam(ID_MNU_CHOOSE_COMP, 0), 0);
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Im "OnClick" eines Buttons erkennen, ob es per

  Alt 27. Apr 2007, 12:48
Er will nicht mit der Maus klicken, sondern die Maus positionieren, wenn man damit geklickt hat ;>
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
126 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Im "OnClick" eines Buttons erkennen, ob es per

  Alt 27. Apr 2007, 13:14
"SubData" hat recht , ich möchte die Maus nur positionieren und nicht klicken.

BerndS schrieb:
Zitat:
einfach über OnMouseDown/OnMouseUp ein Variable setzen:
Das wird meines Erachtens nicht funktionieren, da das "OnClick" erst NACH dem Mouseup ausgeführt wird. Sonst hätte ich ja auch mit csLButtonDown im "OnClick" Erfolg gehabt siehe #1.

Mir ist klar, dass ich selber in meinen Komponenten oder in der Anwendung etwas vorsehen kann, um mir den Mausklick zu merken und dies dann abzufragen. Ich frage mich nur, ob in Delphi selber dafür noch nichts vorgesehen ist.

Gruß, Daddy
  Mit Zitat antworten Zitat
andreash

Registriert seit: 22. Jun 2006
Ort: Dörverden
60 Beiträge
 
Delphi 7 Professional
 
#9

Re: Im "OnClick" eines Buttons erkennen, ob es per

  Alt 27. Apr 2007, 13:30
Zitat von Apollonius:
Prüf doch einfach im onClick mit getasynckeystate() ob Leer- oder Entertaste gedrückt sind
Darüber lassen sich auch die Maustasten abfragen.
Andreas
Der Optimist glaubt, wir leben in der besten aller möglichen Welten. Der Pessimist befürchtet, daß das stimmt.
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
126 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Im "OnClick" eines Buttons erkennen, ob es per

  Alt 27. Apr 2007, 14:00
@Apollonius, @AndreasH:

Mit (GetAsyncKeyState(VK_LBUTTON) = VK_LBUTTON) kann ich tatsächlich erkennen, dass die linke Maustaste gedrückt wurde. Allerdings erkenne ich nicht, wann dies geschah. Das heißt, wenn ich irgendwo mit der Maus hinklicke und anschließend meinen Button per Tastatur betätige, liefert mir diese Abfrage "true" zurück, obwohl ich den Button gar nicht per Maus betätigt habe. Das liegt daran, das "GetAsyncKeyState" als Ergebnis liefert, ob eine bestimmte Taste gedrückt wurde, NACHDEM "GetAsyncKeyState" das letzte mal aufgerufen wurde. Ich komme also auch hier nicht drum herum etwas zu programmieren, wodurch "GetAsyncKeyState" immer wieder initialisiert wird.

Trotzdem danke für den Hinweis. Es scheint ja wohl so zu sein, dass Delphi für diese einfache Abfrage nichts vorsieht. Also muss ich evtl. die entscheidende Stelle in der VCL suchen und sehen, ob ich dort selber etwas einfügen kann.

Gruß, Daddy

PS: Falls doch noch jemand eine andere Idee hat ...
  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 08:37 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