AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi DragDrop zwischen Controls bei OnClick und PopUpMenü

DragDrop zwischen Controls bei OnClick und PopUpMenü

Ein Thema von Pichel · begonnen am 3. Jan 2006 · letzter Beitrag vom 3. Jan 2006
Antwort Antwort
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#1

DragDrop zwischen Controls bei OnClick und PopUpMenü

  Alt 3. Jan 2006, 21:02
Hallöchen.

Habe mich jetzt schon unsagbar lange damit rumgeschlagen (probieren, im Forum suchen etc) aber es geht nicht.

Wenn ich TButton Controls per DragDrop verschieben will, um Ihre Reihenfolge zu verändern gibt es da ein großes Problem.
Das OnClick des Button sowie das PopUpMenü wird benutzt.

Normalerweise würde ich es so machen: (natürlich DragMode auf dmAutomatic setzen)

Delphi-Quellcode:
procedure TaForm.btDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if Source.ClassType = TButton then begin
    // hier der Button-Tausch
  end;
end;

procedure TaForm.btDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Source.ClassType = TButton);
end;
Hier ist nur das Problem, daß ein DragDrop mit der linken Maustaste ausgelöst wird und somit das OnClick-Event entfällt.

Mache ich das ganze manuell (DragMode = dmManual):

Delphi-Quellcode:
procedure TaForm.btMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
{$ifdef BETA}DebugInfo:='aForm btMouseDown';{$endif}
  if (Sender.ClassType = TButton)
  and (Button = mbRight) then begin
    (Sender as TControl).BeginDrag(False);
  end;
end;
...dann das Problem, es kommt kein Popup-Menü mehr. Übel.
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: DragDrop zwischen Controls bei OnClick und PopUpMenü

  Alt 3. Jan 2006, 21:43
Zitat von Pichel:
Wenn ich TButton Controls per DragDrop verschieben will, um Ihre Reihenfolge zu verändern gibt es da ein großes Problem.
Das OnClick des Button sowie das PopUpMenü wird benutzt.
Hi,
hab jetzt mal einen Tipp, der dich begeistern wird, benutzt einfach nicht das OnClick-Event. Du weißt doch eigentlich was ein Click ist (MouseDown, MouseUp). Wann genau sollte das Ereignis eintreten? Natürlich sobald die Maustaste über dem Button losgelassen wird.
Was macht ein Drag&Drop? Nun ja, Maustaste wird gedrückt, Maus wird bewegt! Maus wird losgelassen.

Jetzt musst du dir eigentlich nur die Ausgangsposition der Maus merken, wenn diese gedrückt wird. Wird diese Position weit genug verändert, so lässt du einfach ein Drag zu. Wird die Maus losgelassen, so schaust du einfach nur, ob es sich um einen Drag&Drop handelt oder nicht. Entsprechend tritt dein OnClick-Code oder halt der Drag&Drop Code ein.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#3

Re: DragDrop zwischen Controls bei OnClick und PopUpMenü

  Alt 3. Jan 2006, 21:50
Wenn ich das richtig verstanden habe, so soll ich also einfach die DragDrop-Funktionen beiseite lassen und im OnMouseDown mir den TButton merken. Im onMouseUp dann entweder die Buttons-Tauschen (in meinem konkreten Fall) oder den Click ausführen.
Klingt irgendwie gut, hätte ich bei den unzähligen Versuchen eigentlich drauf kommen müssen, aber auf die einfachsten Dinge kommt man meistens nicht
Werde es gleich mal versuchen, dank'Dir
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: DragDrop zwischen Controls bei OnClick und PopUpMenü

  Alt 3. Jan 2006, 21:52
Zitat von Pichel:
hätte ich bei den unzähligen Versuchen eigentlich drauf kommen müssen, aber auf die einfachsten Dinge kommt man meistens nicht
Wem sagst du das? Hoffe es funktioniert dann auch,
Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von Pichel
Pichel

Registriert seit: 25. Feb 2005
Ort: Kassel
65 Beiträge
 
Delphi 7 Professional
 
#5

Re: DragDrop zwischen Controls bei OnClick und PopUpMenü

  Alt 3. Jan 2006, 22:33
Hab jetzt mal auf die Schnelle rumgespielt:

Delphi-Quellcode:
var myButton : TObject;

procedure TaForm.btMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Sender.ClassType = TButton)
  and (Button = mbLeft) then begin
    myButton := Sender;
  end;
end;

procedure TaForm.btMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Sender.ClassType = TButton)
  and (Button = mbLeft) then begin
    if myButton <> FindDragTarget((Sender as TControl).ClientToScreen(Point(X, Y)), True) then
    begin
      // DragDrop
    end else begin
      // Click
      OnClick(Sender);
    end;
  end;
end;
Muß nur noch den Cursor wechseln, am besten wohl während des onMouseMove.
Grüße aus Kassel.

Konfuzius sprach: Etwas lernen und sich immer wieder darin üben - schafft das nicht auch Befriedigung?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:53 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