Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Drag&Drop-Problem (https://www.delphipraxis.net/179281-drag-drop-problem.html)

gkaeberich 24. Feb 2014 16:17


Drag&Drop-Problem
 
Hallo,

ich habe ein Panel, das auf einer Form mit der linken Maustaste mittels Drag&Drop verschoben werden kann. Gleichzeitig soll aber per Mausdoppelclick (linke Maustaste) eine andere Funktion (Aufruf einer Online-Verbindung) gestartet werden. Das klappt auch alles soweit, bis auf die Tatsache, dass bei der Rückkehr aus der Online-Verbindung der Darg&Drop-Modus noch aktiv ist und das Panel sich dann dort niederlässt, wo man dann zufällig mit der Maus clickt.

1. Wo liegt das Problem, dass der Drag&Drop-Modus nicht korrekt beendet wird.
2. Kann man beide Funktionen - Drag&Drop und unabhängig vom Drag&Drop den Start der Online-Verbindung auch mit einem linken Mausclick realisieren?

Vielen Dank für eure Hilfe

G. Käberich

Bummi 24. Feb 2014 16:41

AW: Drag&Drop-Problem
 
etwas in der Art?
Delphi-Quellcode:
procedure TFormx.PanelyMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbLeft then
      TPanel(Sender).BeginDrag(false,20);
end;

gkaeberich 24. Feb 2014 21:40

AW: Drag&Drop-Problem
 
Hallo,

ich habe jetzt mal den Quellcode beigefügt:

procedure TStartfenster.Online_portal_PanelMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
{ ************************************************** ********************************** }

begin
if button = mbLeft Then
online_portal_panel.begindrag (False);
end;


procedure TStartfenster.Online_portal_PanelEndDrag(Sender, Target: TObject; X, Y: Integer);
{ ************************************************** ********************************** }

begin
if target = Nil then MessageBeep (0);
end;


procedure TStartfenster.FormDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
{ ************************************************** ********************************** }

begin
accept := (Source is TPanel);
end;


procedure TStartfenster.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
{ ************************************************** ********************************** }

begin
if Source is TPanel then
begin
TPanel(Source).Left := x;
TPanel(Source).Top := y;
TPanel(Source).Parent := TWinControl(Sender);
end;
end;


procedure TStartfenster.Online_portal_PanelDblClick(Sender: TObject);
{ ************************************************** ********************************** }

begin
VirtuelleSchule1.click;
end;



Es funktioniert in soweit, dass der Drag&Drop-Prozess klappt, dann die Verbindung mit Dopelclick auf das Panel in die Virtuelle Schule auch, aber bei der Rückkehr in mein Delphi-Programm ist der Drag&Drop-Prozess noch nicht beendet und dort wo ich dann auf das Fenster clicke wird das Panel abgelegt..

vg

G. Käberich

Volker Z. 24. Feb 2014 22:24

AW: Drag&Drop-Problem
 
Hallo,

merk Dir den Doppelklick in einer Property und werte das dann im OnMouseDown aus (die Events werden in der Reihenfolge OnDlbClick, OnMouseDown aufgerufen)
Delphi-Quellcode:
procedure TStartfenster.Online_portal_PanelMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
{ ************************************************** ********************************** }

begin
  if Button = mbLeft then
    if FDblClick then
      online_portal_panel.EndDrag (False);
    else
      online_portal_panel.BeginDrag (False);

  FDblClick := False
end;


procedure TStartfenster.Online_portal_PanelDblClick(Sender: TObject);
 { ************************************************** ********************************** }

begin
  FDblClick := True;
  VirtuelleSchule1.click;
end;
BTW: Quellcode solltest Du in DELPHI-Tags einschließen; einfach auf das Helmsymbol klicken und den Code dazwischen einfügen.

Gruß

gkaeberich 25. Feb 2014 09:31

AW: Drag&Drop-Problem
 
Hallo,

klappt super, vielen Dank. Besteht denn die Möglichkeit, so wie das auch bei Windows-8-Kacheln geht, das Mousedown- und das Mouseclick Ereignis zeitlich so zu entkoppeln, dass der Start des Online-Portals auch mit einem einfachen Mouseclick funktioniert?

vg

Günther Käberich

Sir Rufo 25. Feb 2014 09:37

AW: Drag&Drop-Problem
 
Mit einem Timer und dann nur auf die Events OnMouseDown OnMouseUp lauschen

gkaeberich 26. Feb 2014 21:53

AW: Drag&Drop-Problem
 
Hallo,

vielen Dank für die Tipps - es funktioniert jetzt so, wie es soll.

G.Käberich


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