Delphi-PRAXiS

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/)
-   -   DragDrop in eigenen Komponenten (https://www.delphipraxis.net/157685-dragdrop-eigenen-komponenten.html)

HJay 20. Jan 2011 19:34

DragDrop in eigenen Komponenten
 
Ich kenne mich mit DragDrop leider noch gar nicht aus. Ich habe ein eigenes TMyGrid geschrieben, das ein Gitter darstellt und bei dem einzelne Zeilen vom Nutzer selektierbar sind und hervorgehoben werden.

Ich würde jetzt gerne ermöglichen, dass der Nutzer die selektierte Zeile per DragDrop ziehen kann und somit die Reihenfolge der Zeilen innerhalb meines eigenen TMyGrid-Objekts ändern kann. Da ich weiß, welche Zeile aktuell selektiert ist und ich auch die neuen Koordinaten beim Drop erhalte, kann ich dies theoretisch leicht umsetzen.

PROBLEM: Sobald ich aber in Create "DragMode := dmAutomatic" setze, kommen bei meiner Komponente gar keine MouseUp-Events mehr an. Man kann gar keine Zeile mehr selektieren, weil jeder Click sofort zum Beginn des DragDrop führt. Das DragDrop wird korrekt ausgeführt (ShowMessage) und auch DragOver wird ausgeführt (Accept := False verhindert das DragDrop).

FRAGE: Wie kann ich DragDrop so nutzen, dass es einerseits möglich ist, andererseits aber nicht MouseUp- und DblClick-Events verhindert? Geht doch auch in anderen Komponenten? Was habe ich noch nicht verstanden?


Code:
 
TMyGrid = class(TCustomControl)
protected
  procedure DragDrop(Source: TObject; X, Y: Integer); override;
  procedure DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); override;
  procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
public
  constructor Create(AOwner : TComponent); override;
end;

procedure TMyGrid.DragDrop(Source: TObject; X, Y: Integer);
begin
  ShowMessage('dropped');
end;

procedure TMyGrid.DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := True;
end;

constructor TMyGrid.Create(AOwner: TComponent);
begin
  inherited;
  DragMode := dmAutomatic;
end;

stahli 20. Jan 2011 19:42

AW: DragDrop in eigenen Komponenten
 
Starte Drag von Hand:
Delphi-Quellcode:
BeginDrag(False, 8);

HJay 20. Jan 2011 19:47

AW: DragDrop in eigenen Komponenten
 
Wow. Affengeil.

Vielen Dank für die schnelle Antwort. Es klappt!

himitsu 20. Jan 2011 20:00

AW: DragDrop in eigenen Komponenten
 
Waren nicht sogar ein paar Demos dazu im Delphi gleich mit dabei?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz