AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Flackern bei Drag'n'Drop

Ein Thema von BLin4ik · begonnen am 16. Sep 2015
Antwort Antwort
BLin4ik

Registriert seit: 23. Nov 2011
40 Beiträge
 
Delphi 5 Enterprise
 
#1

Flackern bei Drag'n'Drop

  Alt 16. Sep 2015, 11:19
Hallo,

ich habe Probleme was das Drag und Drop angeht
und zwar musste ich feststellen, dass es ab Windows 7 nicht mehr so reibungslos funktioniert.

Sobald man mit dem Drag-Item über ein anderes Item fliegt, fängt es an extrem zu flackern.
Die Anwendung wurde mit Delphi 5 kompiliert und auch da liegt der Hund begraben,
teste ich aber hingegen das Drag'n'Drop mit einem Tool von z.B. Delphi 2010 gibt es diese Probleme nicht.

Aber ich kann nicht so einfach auf eine neure Version umsteigen.

Ich habe schon sehr viele Sachen ausprobiert, hat aber alles nicht geholfen... (Doublebuffered, WS_EX_COMPOSITED...)

Meine Theorie ist, dass es nicht direkt am Drag'n'Drop liegt, aber dadurch der Effekt nur verstärkt wird.
Sondern an den Updates/Refreshes.


Ein Beispiel-Video befindet sich im Anhang, dort erkennt man ein ListView und TreeView.
Der Effekt ist beim ListView in dem Video ist ein wenig übertrieben, das war nur während
der Aufnahme so und es ist ein Skin aktiv in dem Beispiel, passiert aber auch ohne (Alphacontrols)


edit:
Ich habe die Ursache gefunden, aber mir ist trotzdem nicht klar warum sich das so extrem darstellt.
Code:
procedure TCustomListView.DoDragOver(Source: TDragObject; X, Y: Integer; CanDrop: Boolean);
var
  Item: TListItem;
  Target: TListItem;
begin
  Item := GetItemAt(X, Y);
  if Item <> nil then
  begin
    Target := DropTarget;
    if (Item <> Target) or (Item = FLastDropTarget) then
    begin
      FLastDropTarget := nil;
      TDragObject(Source).HideDragImage;
      Update;
      if Target <> nil then
        Target.DropTarget := False;
      Item.DropTarget := CanDrop;
      Update;
      TDragObject(Source).ShowDragImage;
    end;
  end;
end;
Das "HideDragImage" und "ShowDragImage" verursachen das Flackern,
aber was ist der Sinn dabei?
Angehängte Dateien
Dateityp: 7z DragnDrop.7z (130,8 KB, 4x aufgerufen)

Geändert von BLin4ik (16. Sep 2015 um 14:35 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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:56 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