Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   LBN_DBLCLK doppelte auslösung (https://www.delphipraxis.net/169323-lbn_dblclk-doppelte-ausloesung.html)

EWeiss 12. Jul 2012 10:04

LBN_DBLCLK doppelte auslösung
 
Hab da ein kleines problem bei mir wird das Doppelklick event der Listbox
auch doppelt ausgelößt bzw.. LBN_DBLCLK führt alles 2 fach aus.

Finde nicht die Message die den zweiten zugriff auslößt.

Normale Winproc welche über Subclassing die Message weitergibt.
Die wird nur einmal ausgeführt.

Auch in der Winproc der Listbox.
WM_LBUTTONDBLCLK wird ebenfalls nur 1x ausgeführt.

Ist mir nun doch ein kleines Rätzel.
In der Anwendung hingegen alles in zweifacher ausführung.


gruss

Progman 12. Jul 2012 11:34

AW: LBN_DBLCLK doppelte auslösung
 
Dieses Problem hatte ich vor Jahren mal mit Komponemten von KsDev (ThemeEngine, SkinEngine).
Es war nur lösbar mit Hilfe einer boolschen Zwischen-Variablen, die beim ersten Auslösen gesetzt wird und wenn gesetzt, der Klick nicht ausgeführt wird und sie zurück gesetzt wird.
Beispiel:
Delphi-Quellcode:
var isClicked: Boolean = False;

procedure IrgendwasDoubleClick(Sender: TObject);
begin
  if isClicked then begin
    isClicked := False;
    Exit;
  end else begin
    isClicked := True;
    // jetzt was tun
  end;

EWeiss 12. Jul 2012 11:45

AW: LBN_DBLCLK doppelte auslösung
 
Zitat:

Zitat von Progman (Beitrag 1174429)
Dieses Problem hatte ich vor Jahren mal mit Komponemten von KsDev (ThemeEngine, SkinEngine).
Es war nur lösbar mit Hilfe einer boolschen Zwischen-Variablen, die beim ersten Auslösen gesetzt wird und wenn gesetzt, der Klick nicht ausgeführt wird und sie zurück gesetzt wird.
Beispiel:
Delphi-Quellcode:
var isClicked: Boolean = False;

procedure IrgendwasDoubleClick(Sender: TObject);
begin
  if isClicked then begin
    isClicked := False;
    Exit;
  end else begin
    isClicked := True;
    // jetzt was tun
  end;

Na ja das ging einfacher

Clicked = not Clicked
Is Clicked then...

Aber das lößt nicht mein problem da ich die Engine ja selbst geschrieben habe mit WInAPI mitteln.
Ich frage mich nur woher das zweite click event ausgelöst wird.

gruss

Progman 12. Jul 2012 11:49

AW: LBN_DBLCLK doppelte auslösung
 
Zitat:

Zitat von EWeiss (Beitrag 1174431)
Aber das lößt nicht mein problem da ich die Engine ja selbst geschrieben habe mit WInAPI mitteln.
Ich frage mich nur woher das zweite click event ausgelöst wird.

gruss

Woher das kommt, kann ich natürlich auch nicht sagen, ich wollte nur eine "Notlösung" aufzeigen, zu der ich mich damals entschlossen hatte, als nichts anderes mehr half :)

EWeiss 12. Jul 2012 11:53

AW: LBN_DBLCLK doppelte auslösung
 
Zitat:

Zitat von Progman (Beitrag 1174432)
Zitat:

Zitat von EWeiss (Beitrag 1174431)
Aber das lößt nicht mein problem da ich die Engine ja selbst geschrieben habe mit WInAPI mitteln.
Ich frage mich nur woher das zweite click event ausgelöst wird.

gruss

Woher das kommt, kann ich natürlich auch nicht sagen, ich wollte nur eine "Notlösung" aufzeigen, zu der ich mich damals entschlossen hatte, als nichts anderes mehr half :)

Danke das ist auch net von dir und meine Antwort war auch nicht böse oder abwertend gemeint.
Falls das so rübergekommen ist.

Danke gruss

EWeiss 14. Jul 2012 07:34

AW: LBN_DBLCLK doppelte auslösung
 
Habe den Fehler gefunden.
Dadurch das ich innerhalb der ListProc WM_LBUTTONDBLCLK verwenden muss
um eine Variable beim start zu füllen hat diese einen weiteren Klick an meine Anwendung geschickt.
Ich habe es jetzt so gelößt das WM_LBUTTONDBLCLK nicht an die Hauptanwendung weitergeleitet wird.

Delphi-Quellcode:
  WM_LBUTTONDBLCLK:
    begin
      OldSelected := ListGetCursel(WinHandle);
      result := 0;
      exit;
    end;
Das war's schon.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 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