Einzelnen Beitrag anzeigen

HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#1

DragDrop in eigenen Komponenten

  Alt 20. Jan 2011, 20:34
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;
  Mit Zitat antworten Zitat