AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Drag and Drop von einer Listbox in die andere ohne VCL
Thema durchsuchen
Ansicht
Themen-Optionen

Drag and Drop von einer Listbox in die andere ohne VCL

Ein Thema von Luckie · begonnen am 28. Okt 2004 · letzter Beitrag vom 28. Okt 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Drag and Drop von einer Listbox in die andere ohne VCL

  Alt 28. Okt 2004, 10:05
Die Überschrift sagt es schon, was ich will. Hat da jemand einen Ansatz oder eine Idee? Mir ist da bisher nichts zu eingefallen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Drag and Drop von einer Listbox in die andere ohne VCL

  Alt 28. Okt 2004, 10:07
Hi Luckie,
hilft dir vielleicht, das was ich [msdn:15d955b6f4="Drag Drop"]MSDN gefunden[/msdn:15d955b6f4] habe? Nummer 1 und Nummer 2.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Drag and Drop von einer Listbox in die andere ohne VCL

  Alt 28. Okt 2004, 10:14
Das meine ich nicht. Da geht es ja nur um die Shell. Beide Listboxen sind aber in meinem Anwendungsfenster.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Drag and Drop von einer Listbox in die andere ohne VCL

  Alt 28. Okt 2004, 10:18
Hi,
dann werfe ich das Stichwort OLE Drag&Drop ein. Das ist VCL unabhängig und dazu müsste man eigentlich noch mehr finden, als den subtilen Link unter "dazu".

Chris
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Drag and Drop von einer Listbox in die andere ohne VCL

  Alt 28. Okt 2004, 10:23
Was hat das mit OLE zu tun? Ich befinde mich innerhalb der selben Anwendung!!! Außerdem scheint das irgendwie über das Clipboard zu gehen, was ich vermeiden will.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Drag and Drop von einer Listbox in die andere ohne VCL

  Alt 28. Okt 2004, 10:29
Hi Luckie,
das ist schon klar. Aber scheinbar bietet die WinAPI dazu keine Funktionen. Ansonsten hättest du bzw. ich beim Suchen schon selbige gefunden, oder? Und das Drag'n'Drop via OLE ist eine Alternative zum VCL-Drag'n'Drop. Zumindest ist mir das da über den weggelaufen. Ich weiß ja nicht, ob du dir das schon näher angesehen hast (von dem Beitrag aus dem MSDN mal abgesehen). Zumindest ist das eine Möglichkeit.
Und das geht auch ohne das Clipboard und auch in der eigenen Anwendung. Da bin ich mir ziemlich sicher, und wenn es hundertprozentig NICHT geht, dann hast du das Recht mich zu schlagen.

Chris
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Drag and Drop von einer Listbox in die andere ohne VCL

  Alt 28. Okt 2004, 10:32
Ich denke, das ist etwas Overkill. Ich übertlege die ganze Zeit, ob man es nicht dann doch besser "zu Fuß" macht:
1. linker Mausbutton über Listbox gedrückt, Eintrag merken
2. Maus wird bewegt Cursor ändern
3. Maus kommt über zweite Listbox Cursor ändern
4. linker Mausbutton wird losgelassen, einfügen

Mich schreckt nur etwas der viele Code zurück, der dazu nötig ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Drag and Drop von einer Listbox in die andere ohne VCL

  Alt 28. Okt 2004, 11:28
Hi Luckie

Ich habs in einem Projekt von mir auch Drag & Drop ohne Shell ohne VCL gemacht

Ist schon ne weile her, hab einfach den Source kopiert (ist sicher ne menge unnützer scahen dabei ...)
Delphi-Quellcode:
  TDummyDragManager = class(TInterfacedObject, IDropTarget)
  private
    FoldItem : TTBCustomItem;
    FOwner : TControl;
    trAutoCheck : TTimer;
    procedure RestartTimer;
    procedure StopTimer;

    procedure OnTimer(Sender : TObject);
  public
    destructor Destroy; override;

    function DragEnter(const DataObject: IDataObject; KeyState: Integer; Pt: TPoint; var Effect: Integer): HResult; stdcall;
    function DragLeave: HResult; stdcall;
    function DragOver(KeyState: Integer; Pt: TPoint; var Effect: Integer): HResult; stdcall;
    function Drop(const DataObject: IDataObject; KeyState: Integer; Pt: TPoint; var Effect: Integer): HResult; stdcall;
  end;

function TDummyDragManager.DragEnter(const DataObject: IDataObject; KeyState: Integer; Pt: TPoint; var Effect: Integer): HResult; stdcall;
begin
    Effect := DROPEFFECT_LINK;
    Result := 0;
end;

function TDummyDragManager.DragLeave: HResult;
begin
    Result := 0;
end;

destructor TDummyDragManager.Destroy;
begin
    if assigned(trAutoCheck) then
        FreeAndNil(trAutoCheck);
    inherited;
end;

procedure TDummyDragManager.OnTimer(Sender : TObject);
begin
    TTimer(Sender).Enabled := FALSE;
    TfrMDIChild(TForm(TTBXItem(FoldItem).Tag)).DoActivate;
end;

procedure TDummyDragManager.StopTimer;
begin
    if not assigned(trAutoCheck) then exit;
    trAutoCheck.Enabled := FALSE;
end;

procedure TDummyDragManager.RestartTimer;
begin
    if not assigned(trAutoCheck) then begin
        trAutoCheck := TTimer.Create(nil);
        trAutoCheck.Interval := 500;
        trAutoCheck.OnTimer := OnTimer;
    end;

    trAutoCheck.Enabled := FALSE;
    trAutoCheck.Enabled := TRUE;
end;

function TDummyDragManager.DragOver(KeyState: Integer; Pt: TPoint; var Effect: Integer): HResult;
var thisItem : TTBCustomItem;
begin
    thisItem := nil;
    TTBXToolbar(FOwner).View.UpdateSelection(@Pt, True);
    if Assigned(TTBXToolbar(FOwner).View.Selected) then begin
        thisItem := TTBXToolbar(FOwner).View.Selected.Item;
        if not thisItem.Enabled then thisItem := nil;
    end;

    if thisItem <> FoldItem then begin
        FoldItem := thisItem;
        if assigned(FoldItem) then RestartTimer
        else StopTimer;
    end;
    if assigned(thisItem) then Effect := DROPEFFECT_LINK;
    Result := 0;
end;

function TDummyDragManager.Drop(const DataObject: IDataObject; KeyState: Integer; Pt: TPoint; var Effect: Integer): HResult;
begin
    Result := 0;
end;

... FormCreate
    dropTarget := TDummyDragManager.Create;
    dropTarget.FOwner := tbTaskBar;

    RegisterDragDrop(tbTaskBar.Handle, IDropTarget(dropTarget));
Vielleicht hilfts ja
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Drag and Drop von einer Listbox in die andere ohne VCL

  Alt 28. Okt 2004, 12:12
Das werde ich mir mal ankucken. Was für Units werden den benötigt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Drag and Drop von einer Listbox in die andere ohne VCL

  Alt 28. Okt 2004, 12:22
Zitat von Luckie:
Das werde ich mir mal ankucken. Was für Units werden den benötigt?
ich vermute mal
, ActiveX
.. und natürlich so units wie system, windows ...

ich schätze die Sachen mit dem Timer kannst getrost vergessen.
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:05 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