AGB  ·  Datenschutz  ·  Impressum  







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

TVirtualStringTree Drag&Drop...

Ein Thema von wicht · begonnen am 22. Jan 2006 · letzter Beitrag vom 26. Jan 2006
Antwort Antwort
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#1

TVirtualStringTree Drag&Drop...

  Alt 22. Jan 2006, 15:40
Hallo!

Mein Programm ist nun quasi fertig - aber es gibt noch ein Problem.
Ich benutzte den TVirtualStringTree, um Dateien zum Explorer zu draggen. Das funktioniert soweit auch ganz gut, aber nicht ganz so, wie ich es mir erhofft habe. Wenn ich Dateien größerer Größe in den Explorer ziehe, kopiert er diese Dateien - währenddessen ist mein Programm aber blockiert, bis alle Dateien kopiert sind. Ich habe vorher schon viel mit den Drag&Drop Komponenten von Angus Johnson / Anders Melander herumexperimentiert, Thread gebaut zum Drag&Drop - leider funktionierte davon nichts, und wenn es funktioniert hat, hatte mein Programm danach dauerhaft eine CPU Auslastung von 99% zur Folge - auch nicht gerade wünschenswert...

Darum wollte ich einfach mal Fragen, ob jemand so etwas schon einmal mit dem VirtualTree gemacht hat, oder ob jemand eine Idee hat, wie das funktionieren könnte?


Dank im Vorraus,

Alexander
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TVirtualStringTree Drag&Drop...

  Alt 22. Jan 2006, 16:29
Moin Alexander,

Zitat von wicht:
und wenn es funktioniert hat, hatte mein Programm danach dauerhaft eine CPU Auslastung von 99% zur Folge -
dann solltest Du in dem Thread mal etwas einbauen, wie MSDN-Library durchsuchenWaitForSingleObject oder ähnliches.
Wie und was Du da nun sinnvoll einbauen könntest, kann ich Dir ohne ein wenig Code (z.B. der Execute-Methode) allerdings nicht sagen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#3

Re: TVirtualStringTree Drag&Drop...

  Alt 24. Jan 2006, 15:50
Hallo.

Also, mein Thread dazu sah so aus (habe auch viel dran rumgepfuscht, aber nix hat geholfen..):

Delphi-Quellcode:
{ Drag & Drop Thread
  Copyright (c) 2000, 2001 by E.J.Molendijk

  This class is a part of:
  "Drag and Drop Component Suite" ([url]http://www.melander.dk[/url]).

  Explained:
  When you create the thread, it will copy the filenames of the specified
  DropFileSource. These filenames will be used by thread to perform a
  drag&drop operation. The calling thread continues uninterupted.

  Usage is very simple:
    TDragDropThread.Create(DropFileSource1);

  Drag&Drop Thread info Q139408:
    [url]http://support.microsoft.com/support/kb/articles/Q139/4/08.asp[/url]
}


unit DragDropThread;

interface

uses
  sysutils,Classes, DropSource, ActiveX, Windows;

type
  TDragDropThread = class(TThread)
  private
    { Private declarations }
    FFiles : String;
    DropFileSource : TDropFileSource;
  protected
    procedure Execute; override;
  public
    constructor Create(DropFileSource : TDropFileSource);
  end;

implementation

{ TDragDropThread }

constructor TDragDropThread.Create(DropFileSource : TDropFileSource);
begin
  // Thread will start immediately after creation
  inherited Create(False);

  // Copy filenames from supplied DropFileSource
  FFiles := DropFileSource.Files.Text;

  // This thread disappeard when it finishes
  FreeOnTerminate := True;
end;

procedure TDragDropThread.Execute;
var

  pt : TPoint;
  hwndAttach : HWND;
  dwAttachThreadID, dwCurrentThreadID : DWORD;
begin
  // Get handle of window under mouse-cursor
  GetCursorPos(pt);
  hwndAttach := WindowFromPoint(pt);
  Assert(hwndAttach <> 0, 'Unable to find window with drag-object');

  // Get thread ID's
  dwAttachThreadID := GetWindowThreadProcessId(hwndAttach, nil);
  dwCurrentThreadID := GetCurrentThreadId();

  // Attach input queues if necessary
  if (dwAttachThreadID <> dwCurrentThreadID) then
    AttachThreadInput(dwAttachThreadID, dwCurrentThreadID, True);

  // Initialize Ole for this thread
  OleInitialize(nil);
  try
    // create dropsource
    DropFileSource := TDropFileSource.Create(nil);
    try
      DropFileSource.Files.Text := FFiles;
      // start drag&drop
      DropFileSource.Execute;
    finally
      // cleanup dropsource
      DropFilesource.Free;
    end;
  finally
    // cleanup Ole
    OleUninitialize;
  end;
  // Restore input queues settings
  if (dwAttachThreadID <> dwCurrentThreadID) then
    AttachThreadInput(dwAttachThreadID, dwCurrentThreadID, False);
end;

end.
Jetzt benutze ich ja den VirtualStringTree, da habe ich es einfacher, weil der Baum dafür direkt Funktionalität bereitstellt. Einfach in der OnCreateDataObject:

Delphi-Quellcode:
procedure TfrmMain.lstFilesSearchCreateDataObject(Sender: TBaseVirtualTree;
  out IDataObject: IDataObject);
var
  i: Integer;
  o_Nodes: TNodeArray;
  o_Data: PNodeData;
  o_FileList: TStrings;
begin
  o_Nodes := GetNodes(lstFiles, GETNODES_SEL);
  o_FileList := TStringList.Create;
  try
    if Length(o_Nodes) > 0 then begin
      for i := 0 to Length(o_Nodes) - 1 do begin
        o_Data := lstFiles.GetNodeData(o_Nodes[i]);
        o_FileList.Add(o_Data.o_FileData.s_Dir + o_Data.o_FileData.s_File);
      end;
      IDataObject := GetFileListDataObject('', o_FileList);
    end;
  finally
    o_FileList.Free;
  end;
end;
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: TVirtualStringTree Drag&Drop...

  Alt 24. Jan 2006, 23:33
Moin Alexander,

nachdem ich mir nun mal die Drag&Drop Komponenten heruntergeladen, und angeschaut habe:
Welche Version hast Du als Basis genommen?
Ich habe die Version 4.0 von Angus Johnson, da die andere HP nicht erreichbar war. (Er stellt aber wohl einen Mirror dafür zur Verfügung, durfte also die gleiche Version sein, wie bei Anders Melander)

Allerdings konnte ich nur etwas Ähnliches entdecken.

Jetzt habe ich mir mal den Thread erneut durchgelesen, und so wohl endlich begriffen, wo genau das Problem liegt

Bisher hatte ich angenommen, dass Du ein Problem mit dem VST in Verbindung mit den Drag&Drop-Kompos hast... aber Du nimmst ja nur eines von Beiden, und jeder Teil macht Probleme...

Ich will mal sehen, was die Demos der D&D so hergeben, denn beim VST hätte ich so keinen Anhaltspunkt wo man eingreifen könnte.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#5

Re: TVirtualStringTree Drag&Drop...

  Alt 26. Jan 2006, 21:20
Hi!

Hatte es mit Version 3.7 (?) und 4 der Drag&Drop Komponenten versucht. Ich bin nicht weitergekommen

Zitat:
Jetzt habe ich mir mal den Thread erneut durchgelesen, und so wohl endlich begriffen, wo genau das Problem liegt
Was meinst Du denn, wo vielleicht der Bock sitzt?
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  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 03:42 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