Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Drag bei Doppelklick nicht auslösen - Wie? (https://www.delphipraxis.net/123622-drag-bei-doppelklick-nicht-ausloesen-wie.html)

torud 5. Nov 2008 13:45


Drag bei Doppelklick nicht auslösen - Wie?
 
Hallo Wissende,

ich hole mir per Drag und Drop Einträge aus einem Stringgrid in 2 TEdits. Wenn ich aber einen Doppelklick auf das Stringgrid mache wird etwas anderes ausgelöst. Danach ist aber immer noch das Drag&Drop-Symbol aktiv. Ich muss dann mit einem Klick auf ein Control diesen Vorgang immer erst abbrechen.

Folgenden Code nutze ich derzeit:

MouseDown beim Stringgrid:
Delphi-Quellcode:
procedure TForm1.grd_aMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  aCol, aRow : integer;
begin
  if Button = mbLeft then
    grd_a.MouseToCell(X,Y,ACol,arow);
  if (ACol <> -1) and (ARow <> -1) then
    grd_a.BeginDrag(True);
end;
Doppelklick beim Stringgrid
Delphi-Quellcode:
procedure TForm1.btn_players_nameClick(Sender: TObject);
var
  str_name, str_Layout: String;
  myGrid : TAdvStringgrid;
begin
  Showmessage('tatütata');
end;
DragOver im Edit
Delphi-Quellcode:
procedure TForm1.ed_chg_in_1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Source is TStringGrid);
end;
DragDrop im Edit
Delphi-Quellcode:
procedure TForm1.ed_chg_in_1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  str_nr,str_name : String;
begin
  //sonstiger code beim Fallenlassen
end;
Drag&Drop ist ok, aber nach dem Doppelklick stört mich einfach, dass das BeginDrag wahrscheinlich noch aktiv ist...Wie kann ich das im Doppelklick killen? EndDarg hat jedenfalls nicht geholfen.

Pfoto 5. Nov 2008 15:05

Re: Drag bei Doppelklick nicht auslösen - Wie?
 
Hallo torud,

notfalls könntest du doch das Draggen erst nach ein paar
Pixel Versatz starten lassen.

Dann müsste man den Parameter Treshold noch ausfüllen:

Delphi-Quellcode:
  TStringGrid(Sender).BeginDrag(false, 10);

So würde bei einem Doppelklick kein Draggen beginnen, sondern
erst, wenn der User mit gedrückter Maustaste 10 Pixel weiterzieht.


Gruß
Jürgen

torud 5. Nov 2008 15:45

Re: Drag bei Doppelklick nicht auslösen - Wie?
 
Jo, habe ich in der Hilfe auch gelesen, aber leider ist nach dem Doppelklick immer noch das DragSymbol da und wenn ich mit der Maus über das DropEdit fahre, kann ich selbst nach dem Doppelklick das Drop auslösen. Komisch!

Real_Thunder 5. Nov 2008 17:47

Re: Drag bei Doppelklick nicht auslösen - Wie?
 
Mal ne dumme frage... kannst du ihm beim DOubbleclick nicht einfach sagen das er das drag &drop abbrechen soll ?

torud 5. Nov 2008 18:58

Re: Drag bei Doppelklick nicht auslösen - Wie?
 
Habe ich probiert mit EndDrag. Hat aber keinen Erfolg gebracht.
Muss ich vielleicht was anderes dafür nehmen?

roga 6. Nov 2008 00:39

Re: Drag bei Doppelklick nicht auslösen - Wie?
 
Hallo,

hatte vor einiger ein ähnliches Problem und soweit ich mich erinnere, hat die Einstellung "DragMode := dmAutomatic" Abhilfe geschafft.

Gruß RoGa

torud 6. Nov 2008 06:18

Re: Drag bei Doppelklick nicht auslösen - Wie?
 
Jo, habe ich soeben auch probiert. Dann löst mir das Control das Doppelklick-Event nicht mehr aus. Komische Sache das.

roga 6. Nov 2008 09:46

Re: Drag bei Doppelklick nicht auslösen - Wie?
 
Delphi-Quellcode:
procedure TForm1.grd_aMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  aCol, aRow : integer;
begin
  if Button = mbLeft then
    grd_a.MouseToCell(X,Y,ACol,arow);
  {------------------------------------- 
  ->> BeginDrag einfach mal weglassen
      bei DragMode := dmAutomatic <<-
  if (ACol <> -1) and (ARow <> -1) then
    grd_a.BeginDrag(True);
  -------------------------------------}
end;
roga

torud 6. Nov 2008 12:29

Re: Drag bei Doppelklick nicht auslösen - Wie?
 
Ich habe den Code wie vorgeschlagen nun rausgenommen. Es funzt nun auch - ALLERDINGS MUSS ich den DragMode auf dmManual lassen, da sonst gar kein Klick-Event mehr ausgelöst wird.

ConstantGardener 24. Nov 2008 17:05

Re: Drag bei Doppelklick nicht auslösen - Wie?
 
Hallo zusammen,

ich habe das gleiche Problem innerhalb eines DrawGrids. Mit der beschriebenen Lösung komme ich aber nicht wirklich klar. Der DragCursor bleibt nach dem Doppelklick immer erhalten. Selbst ein EndDrag (false) oder CancelDrag () beseitigen den Zustand nicht. DragMode habe ich auf dmAutomatic und starte in MouseDown mit BeginDrag (false,10) den Dragvorgang manuell.

Hat irgendwer noch eine Idee ?

@torud : kannst Du deinen Code nochmal posten ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 Uhr.
Seite 1 von 2  1 2      

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