Einzelnen Beitrag anzeigen

Alallart

Registriert seit: 8. Dez 2015
155 Beiträge
 
#1

Drag&Drop startet beim Doppelklick automatisch

  Alt 21. Jan 2024, 18:21
Ich hab bisher wenig mit D&D gearbeitet, deshalb finde ich den Fehler nicht. Hier ein Beispiel mit zwei Panelen, die gegenseitig die Caption wechseln. Es funktioniert. Das Problem ist aber, dass wenn ich eines der Panele doppelklicke, ebenfalls der Drag beginnt. Sollte eigentlich nicht. Danach muss ich den Vorgang erst mit ESC wieder abbrechen.

Natürlich greifen beide Panele auf die gleiche Prozeduren.

Delphi-Quellcode:
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
  ShowMessage('Das war ein Doppelklick');
end;

procedure PositionWechseln(Sender, Source: TObject);
var
  Temp: String;
begin
  if (Sender is TPanel) and (Source is TPanel) then
  begin
    Temp := TPanel(Sender).Caption;
    TPanel(Sender).Caption := TPanel(Source).Caption;
    TPanel(Source).Caption := Temp;
  end;
end;

procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  TempName: String;
begin
  if (Source is TPanel) then
    PositionWechseln(Sender, Source);
end;

procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if (Source is TPanel) then
    Accept := True;
end;

procedure TForm1.Panel1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
  if (Target = nil) then
    MessageBeep(0); // Wenn Drag'n'Drop-Operation nicht erfolgreich abeschlossen wurde...
end;

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (Sender is TPanel) then
    if Button = mbLeft then
      TPanel(Sender).BeginDrag(False, 10);
end;
  Mit Zitat antworten Zitat