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/)
-   -   Bei DragMode dmAutomatic keine Auswahl möglich (https://www.delphipraxis.net/81145-bei-dragmode-dmautomatic-keine-auswahl-moeglich.html)

Luckie 21. Nov 2006 14:40


Bei DragMode dmAutomatic keine Auswahl möglich
 
Ich benutze die Image Komponenten von ://www.hicomponents.com

Dort gibt es eine Thumbnail Komponente. Jetzt versuche ich ein Thumbnail aus der Thumbnail Komponente auf ein Image zu ziehen. Das klappt auch ganz gut mit dem DragMode dmAutomatic. Nur ist es leider so, dass wenn der DragMode auf dmAutomatic steht man keine Thumbnails mehr auswählen kann. nehme ich den DragMode dmManual funktioniert mein Drag and Drop nicht mehr:

Wie realisiere ich also Drag and Drop, wenn die Komponente den DragMode dmManual hat?

Mein bisheriger Code für dmAutomatic sieht so aus:

Delphi-Quellcode:
procedure TForm2.ImageEnView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  idx: Integer;
  Filename: String;
begin
  idx := ImageEnMView1.SelectedImage;
  Filename := ImageEnMView1.ImageFileName[idx];
  if fileexists(filename) then
  begin
    ImageEnView1.IO.LoadFromFileJpeg(Filename);
    ImageEnMView1.DragMode := dmManual;
  end;
end;

procedure TForm2.ImageEnView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  If (Source is TImageEnMView) then
    Accept := True;
end;
[edit=SirThornberry]Delphi-Tags korrigiert - Mfg, SirThornberry[/edit]

SirThornberry 21. Nov 2006 14:43

Re: Bei DragMode dmAutomatic keine Auswahl möglich
 
Ich hab in dem Fall dmManual gewählt hab im MouseDown die Position in einem Private-Field gespeichert und im MouseMove (wenn Maus gedrückt war) geprüft ob die Mouse weit genug bewegt wurde. War dem der Fall hab ich das Drag & Drop manuell gestartet.

Luckie 21. Nov 2006 14:45

Re: Bei DragMode dmAutomatic keine Auswahl möglich
 
Zitat:

Zitat von SirThornberry
das Drag & Drop manuell gestartet.

Und wie genau macht man das? Wo muss ich da noch welchen Code ergänzen?

SirThornberry 21. Nov 2006 14:49

Re: Bei DragMode dmAutomatic keine Auswahl möglich
 
mit der Methode "BeginDrag" kann man das DragDrop der entsprechenden Komponente starten. Ich hab das im OnMouseMove aufgerufen wenn die Maus weit genug vom "Mouse-Down-Punkt" weg bewegt wurde.

Luckie 21. Nov 2006 14:57

Re: Bei DragMode dmAutomatic keine Auswahl möglich
 
Danke funktioniert. :thumb:

Aber man muss nicht selber rechnen:
Delphi-Quellcode:
procedure BeginDrag(Immediate: Boolean; Threshold: Integer);
Zitat:

If Immediate is false, the mouse pointer doesn't change to the value of the DragCursor property and dragging doesn't begin until the user moves the mouse pointer the number of pixels specified by the Threshold parameter.

SirThornberry 21. Nov 2006 15:01

Re: Bei DragMode dmAutomatic keine Auswahl möglich
 
Die Hilfe ist da etwas missverständlicher. Sobald das BeginDrag aufgerufen wird, wird die Maus frei gegebe so das kein OnMouseMove etc. mehr ausgelöst wird. Lediglich der Mauszeiger, OnDragOver etc. wird noch nicht ausgelöst. Es wird also sofort auch ein OnMouseUp und ein OnClick ausgelöst obwohl man noch im OnMouseDown ist und dort BeginDrag aufruft.

Luckie 21. Nov 2006 15:08

Re: Bei DragMode dmAutomatic keine Auswahl möglich
 
Jedenfalls funktioniert es so, wie es soll. ;)

SirThornberry 21. Nov 2006 15:14

Re: Bei DragMode dmAutomatic keine Auswahl möglich
 
dann geschieht die Auswohl wohl im MouseDown. Wenn DragMode = dmAutomatic eingestellt ist wird nicht mal mehr ein MouseDown ausgelöst

Luckie 21. Nov 2006 15:16

Re: Bei DragMode dmAutomatic keine Auswahl möglich
 
So sieht es jetzt aus:
Delphi-Quellcode:
procedure TForm2.ImageEnMView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  MouseDown := True;
end;

procedure TForm2.ImageEnMView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if MouseDown then
    ImageEnMView1.BeginDrag(False, 10);
end;

procedure TForm2.ImageEnMView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  MouseDown := False;
end;

SirThornberry 21. Nov 2006 15:17

Re: Bei DragMode dmAutomatic keine Auswahl möglich
 
Wenn du es so hast kannst du das BeginDrag auch gleich ins OnMouseDown packen, das müsste aufs gleicher heraus kommen.


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