AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

mousemove mousedown triggern

Ein Thema von Pet04 · begonnen am 26. Feb 2014 · letzter Beitrag vom 28. Feb 2014
Antwort Antwort
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

mousemove mousedown triggern

  Alt 26. Feb 2014, 09:02
Delphi-Version: XE2
Hallo,

ich möchte für eine Touchanwendung beim click / mit dem Finger berühren den Button visuell anzeigen lassen wie mit der Maus.
Ich habe gelesen, dass es mit triggen von mousemove zu mousedown funktionieren soll.

Ich habe leider keine Idee wie ich da vorgehen kann.
Wie sieht dass im source code genau aus ?



Gruß

Pet
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: mousemove mousedown triggern

  Alt 26. Feb 2014, 13:30
Hallo-

Eine Suche nach Hier im Forum suchenTouch onMouseMove spuckt eigentlich schon alles aus, was du wissen musst. Hast du das schon entdeckt?
  Mit Zitat antworten Zitat
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: mousemove mousedown triggern

  Alt 26. Feb 2014, 15:07
das habe ich schon gelesen.
Wie triggere ich onMouseMove manuell onMouseDown ?

Oder gibt es eine andere Lösung clicks auf einen Touch visuell darzustellen ?
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: mousemove mousedown triggern

  Alt 26. Feb 2014, 16:00
meinst du evtl so etwas?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject) ;
 var
    Pt : TPoint;
 begin
    Application.ProcessMessages;
    {Get the point in the center of Button 2}
    Pt.x := Button2.Left + (Button2.Width div 2) ;
    Pt.y := Button2.Top + (Button2.Height div 2) ;
   {Convert Pt to screen coordinates and Mickeys}
    Pt := ClientToScreen(Pt) ;
    Pt.x := Round(Pt.x * (65535 / Screen.Width)) ;
    Pt.y := Round(Pt.y * (65535 / Screen.Height)) ;
   {Simulate the mouse move}
    Mouse_Event(MOUSEEVENTF_ABSOLUTE or
                MOUSEEVENTF_MOVE,
                Pt.x, Pt.y, 0, 0) ;
gefunden bei : http://delphi.about.com/od/vclusing/a/mouseadvanced.htm
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: mousemove mousedown triggern

  Alt 26. Feb 2014, 16:53
Ich habe gelesen, dass es mit triggen von mousemove zu mousedown funktionieren soll.
Stimmt, da war nirgendwo konkreter Quelltext. Und "Triggern" hört sich wahnsinnig kompliziert an, ist aber nichts anderes als

Delphi-Quellcode:
procedure TForm2.Panel1MouseDown(..);
begin
   // Was beim Drücken halt passieren soll
end;

procedure TForm2.Panel1MouseMove(..);
begin
   // Multitouch-Anomalie: MouseMove kommt zuerst, mouseDown erst, wenn sich der
   // Zeiger danach bewegt. Und für diese Bewegung muss er erst eine bestimmte
   // Schwelle überschreiten. Deshalb jetzt manuell einen MouseDown erzeugen
   if ssTouch in Shift then
      Panel1MouseDown(Sender, TMouseButton.mbLeft, Shift, X, Y);
end;
  Mit Zitat antworten Zitat
Pet04

Registriert seit: 26. Sep 2007
86 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: mousemove mousedown triggern

  Alt 28. Feb 2014, 07:43
Hallo,

Danke erst einmal für die schnellen Antworten.
Genau so hatte ich mir das gedacht, aber leider bringt es auf einem Touch nicht das gewünschte Ergebnis.

Wenn man mit dem Finger auf ainen Button clickt, dann soll man es sehen.

Gruß

Pet
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: mousemove mousedown triggern

  Alt 28. Feb 2014, 18:37
Hallo-

Ich habe nochmal etwas geschaut, es geht noch viel einfacher:
  1. Auf dem Parent (im Regelfall das Formular) die Eigenschaft Touch.TabletOptions.toPressAndHold auf False setzen
  2. Mittels Windows-API die Handballen-Erkennung für die gewünschte Komponente (den Button) abschalten

Delphi-Quellcode:
procedure TForm20.FormCreate(Sender: TObject);
const
   acceptPalms: Boolean = True;
var
   errorCode: Cardinal;
begin

   if acceptPalms and not RegisterTouchWindow(Button1.Handle, TWF_WANTPALM) then begin
      errorCode := GetLastError();
      ShowMessage(SysErrorMessage(errorCode) + '(' + errorCode.ToString() + ')');
   end;

end;
Dann können wir uns auch das manuelle "Triggern" des onMouseDown sparen. Es war einfach nur die blöde Handballen-Erkennung die dachte, wir würden hier nur versehentlich draufpatschen.

Siehe auch:
  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 19:12 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