AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

DragDrop in eigenen Komponenten

Ein Thema von HJay · begonnen am 20. Jan 2011 · letzter Beitrag vom 20. Jan 2011
Antwort Antwort
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
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: DragDrop in eigenen Komponenten

  Alt 20. Jan 2011, 20:42
Starte Drag von Hand: BeginDrag(False, 8);
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
HJay

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

AW: DragDrop in eigenen Komponenten

  Alt 20. Jan 2011, 20:47
Wow. Affengeil.

Vielen Dank für die schnelle Antwort. Es klappt!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.032 Beiträge
 
Delphi 12 Athens
 
#4

AW: DragDrop in eigenen Komponenten

  Alt 20. Jan 2011, 21:00
Waren nicht sogar ein paar Demos dazu im Delphi gleich mit dabei?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 11:19 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