AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TImage Doppelklick bei gesetzten OnClick Event
Thema durchsuchen
Ansicht
Themen-Optionen

TImage Doppelklick bei gesetzten OnClick Event

Ein Thema von Luki206 · begonnen am 31. Aug 2014 · letzter Beitrag vom 21. Sep 2014
Antwort Antwort
Seite 2 von 4     12 34      
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 09:46
Hmm. Das zweite OnClick wird doch gar nicht ausgeführt. OnClick wird nur beim 1.Click aufgerufen. Beim 2.Click wird OnDblClick aufgerufen (oder gar nichts, wenn kein entsprechendes Event zugewiesen wurde). Ergo *kann* man im OnClick keine Zeitmessung durchführen, anhand derer ein Doppelklick erkannt wird.
Natürlich. Wenn du explizit dieses Verhalten willst, darfst du keinen OnDblClick zuweisen, sondern eine Verzweigung, ob entweder ein DoClick oder DoDblClick ausgeführt werden soll, im OnClick implementieren.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

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

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 09:59
Hmm. Das zweite OnClick wird doch gar nicht ausgeführt. OnClick wird nur beim 1.Click aufgerufen. Beim 2.Click wird OnDblClick aufgerufen (oder gar nichts, wenn kein entsprechendes Event zugewiesen wurde). Ergo *kann* man im OnClick keine Zeitmessung durchführen, anhand derer ein Doppelklick erkannt wird.
Natürlich. Wenn du explizit dieses Verhalten willst, darfst du keinen OnDblClick zuweisen, sondern eine Verzweigung, ob entweder ein DoClick oder DoDblClick ausgeführt werden soll, im OnClick implementieren.
Und woran machst du im OnClick fest, dass ein DoDblClick ausgeführt werden soll? OnClick bekommt nur "Sender" sonst gar nix. Über OnMouseDown könnts evtl eher klappen, aber auch da kommt man bei Doppelklick zweimal rein, einmal ohne ssDouble und einmal mit ssDouble, also wieder nix gewonnen.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina ( 1. Sep 2014 um 10:05 Uhr)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#13

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 10:57
Zitat:
Ein Doppelklick wird durch die Mauseinstellungen des Betriebssystems des Benutzers bestimmt. Der Benutzer kann den Zeitraum festlegen, innerhalb dessen der zweite Mausklick erfolgen muss, damit zwei aufeinander folgende Mausklicks als Doppelklick erkannt werden. Bei jedem Doppelklick auf ein Steuerelement wird das Click-Ereignis ausgelöst. Wenn Sie z. B. über einen Ereignishandler für das Click-Ereignis und für das DoubleClick-Ereignis eines Form verfügen, wird das Click-Ereignis und das DoubleClick-Ereignis ausgelöst, wenn auf das Formular doppelgeklickt wird und beide Methoden aufgerufen werden. Bei einem Doppelklick auf ein Steuerelement, das das DoubleClick-Ereignis nicht unterstützt, wird das Click-Ereignis möglicherweise zweimal ausgelöst.

Damit dieses Ereignis ausgelöst wird, müssen Sie den StandardClick-Wert von ControlStyles auf true festlegen.

http://msdn.microsoft.com/de-de/libr...vs.110%29.aspx
http://msdn.microsoft.com/de-de/libr...vs.110%29.aspx

Zitat:

Normalerweise initiiert ein einzelner Klick eine Benutzeroberflächenaktion, und mit einem Doppelklick wird die Aktion erweitert. Beispielsweise wird mit einem Klick für gewöhnlich ein Element ausgewählt und dieses mit einem Doppelklick bearbeitet. Die Windows Forms-Klickereignisse lassen jedoch nur schwer ein Szenario zu, in dem ein Klick und ein Doppelklick inkompatible Aktionen ausführen, da eine mit dem Click-Ereignis oder dem MouseClick-Ereignis verknüpfte Aktion vor der mit dem DoubleClick-Ereignis oder dem MouseDoubleClick-Ereignis verknüpften Aktion ausgeführt wird. Dieses Thema zeigt zwei Lösungen für dieses Problem auf. Eine Lösung besteht darin, das Doppelklickereignis zu behandeln und die Aktionen bei der Behandlung des Klickereignisses per Rollback zurückzusetzen. In wenigen Situationen müssen Sie möglicherweise das Klick- und Doppelklickverhalten simulieren, indem Sie das MouseDown-Ereignis behandeln und die DoubleClickTime-Eigenschaft und die DoubleClickSize-Eigenschaft der SystemInformation-Klasse verwenden. Sie messen die Zeit zwischen den Klicks, und wenn ein zweiter Klick erfolgt, bevor der DoubleClickTime-Wert erreicht wird und der Klick innerhalb eines durch DoubleClickSize definierten Rechtecks stattfindet, führen Sie die Doppelklickaktion aus; andernfalls führen Sie die Klickaktion aus.

Gewusst wie: Unterscheiden zwischen Klicks und Doppelklicks
http://msdn.microsoft.com/de-de/libr...vs.110%29.aspx

Geändert von hathor ( 1. Sep 2014 um 11:03 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#14

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 12:32
Natürlich. Wenn du explizit dieses Verhalten willst, darfst du keinen OnDblClick zuweisen, sondern eine Verzweigung, ob entweder ein DoClick oder DoDblClick ausgeführt werden soll, im OnClick implementieren.
Das zweite 'OnClick'-Event (also beim zeiten Click des Doppelklicks) wird *nicht* ausgelöst. Da kann man keine Verzweigung einbauen.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#15

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 14:31
Eigentlich ich dieses Problem leicht zu lösen:

Bei einem Click gibt es folgende Messages:
wm_LButtonDown
wm_LButtonUp

Bei einem DoppelClick gibt es folgende Messages:
wm_LButtonDown
wm_LButtonUp
wm_LButtonUp


Man setzt eine globale Variable BU auf 0 mit dem Auftreten von wm_LButtonDown.
wm_LButtonUp erhöht sie um 1.
Bei BU>1 wird die gewünschte DBLCLICK-Aktion ausgeführt.

Delphi-Quellcode:
private
   procedure MyMouseEvent(var Msg: TMsg; var Handled: Boolean);
....
var   BU : Cardinal;
...   
procedure TForm2.MyMouseEvent(var Msg: TMsg; var Handled: Boolean);
BEGIN
  case Msg.message of
    wm_LButtonDown:BEGIN BU:=0; END;
    wm_LButtonUp: BEGIN INC(BU); END;
  else begin end;
  end;
if BU>1 then BEGIN WinApi.Windows.Beep(1500,50); BU:=0; END;
END;

Geändert von hathor ( 1. Sep 2014 um 14:47 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#16

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 14:50
Und wann wird das gewünschte 'OnClick' Ereignis ausgelöst? Ich find meine Lösung mit dem Timer echt einfach:
Delphi-Quellcode:
Procedure TMyForm.FormCreate(Sender : TObject);
Begin
  DeferredClickTimer.Enabled := False;
  DeferredClickTimer.Interval := GetDoubleClickInterval()+50; // Ich glaub, die Methode heißt so.
End;

Procedure TMyForm.MyControlClick(Sender : TObject);
Begin
  DeferredClickTimer.Enabled := False;
  DeferredClickTimer.Enabled := True;
End;

Procedure TMyForm.MyControlDoubleClick(Sender : TObject);
Begin
  DeferredClickTimer.Enabled := False;
  ExecuteTheDoubleClickMethod();
End;
Procedure TMyForm.DeferredClickTimerTimer(Sender : TObject);
Begin
  DeferredClickTimer.Enabled := False;
  ExecuteTheClickMethod();
End;
Ein Click startet einen Timer, der das Click-Ereignis -leider verzögert- auslöst.
Der Doppelklick stoppt den Timer. Ich glaube, ohne Timer geht es nicht, denn ich muss ja wissen, ob nich doch das 2.Click vom Doubleclick kommt.

Geändert von Dejan Vu ( 1. Sep 2014 um 14:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 15:58
Ich glaube, ohne Timer geht es nicht, denn ich muss ja wissen, ob nich doch das 2.Click vom Doubleclick kommt.
Ja, ohne (diese Timer-Friemelei) geht es einfach nicht. Also entweder ein anderes Konzept des Klick-Handlings oder eben die Timer-Variante.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#18

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 19:40
Das zweite 'OnClick'-Event (also beim zeiten Click des Doppelklicks) wird *nicht* ausgelöst. Da kann man keine Verzweigung einbauen.
Ah ja klar, logisch. Stimmt, da stand ich auf dem Schlauch. In dem Fall braucht man wirklich einen "Timer".
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#19

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 1. Sep 2014, 23:23
Ich habe hier was Schönes gefunden:
Es nennt sich TRIPLECLICK...
http://blog.unicornsoft.tk/2011/10/t...in-delphi.html

EXE und SOURCE sind im Anhang.

Delphi-Quellcode:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls;

type
  TForm2 = class(TForm)
    ListBox1: TListBox;
    TripleClickTimer: TTimer;
    Memo1: TMemo;
    procedure ListBox1DblClick(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure TripleClickTimerTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
        TripleClick : Boolean;
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure MM(s:string); begin Form2.Memo1.Lines.Add(s); end;

procedure TForm2.FormCreate(Sender: TObject);
begin
Memo1.Lines.Add(' ListBox1Click: startet einen Timer');
Memo1.Lines.Add(' ListBox1DblClick: Auswertung');
end;

procedure TForm2.ListBox1Click(Sender: TObject);
begin
  TripleClick := TripleClickTimer.Enabled;
end;

procedure TForm2.ListBox1DblClick(Sender: TObject);
begin
  TripleClick := False;
  TripleClickTimer.Interval := GetDoubleClickTime();
  TripleClickTimer.Enabled := True;
  while TripleClickTimer.Enabled do
    begin
      Application.ProcessMessages;
    end;
  if TripleClick then
    MM ('Triple click on item: ' + ListBox1.Items[ListBox1.ItemIndex])
  Else
    MM ('Double click on item: ' + ListBox1.Items[ListBox1.ItemIndex]);
end;

procedure TForm2.TripleClickTimerTimer(Sender: TObject);
begin
  TripleClickTimer.Enabled := False;
end;
end.
Miniaturansicht angehängter Grafiken
triplecl1.jpg   triplecl2.jpg  
Angehängte Dateien
Dateityp: zip TRIPLECLICK.zip (711,1 KB, 3x aufgerufen)

Geändert von hathor ( 1. Sep 2014 um 23:31 Uhr)
  Mit Zitat antworten Zitat
Luki206
(Gast)

n/a Beiträge
 
#20

AW: TImage Doppelklick bei gesetzten OnClick Event

  Alt 2. Sep 2014, 10:09
Ok ich komm jetzt nicht mehr mit , brauche ich jetzt den Timer? Wenn ja ist das so wie Hathor es beschrieben hatte die Lösung?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 20:39 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