![]() |
Drag&Drop wird nicht vor erstem Klick ausgeführt
Hallöchen,
es ist mir schon fast peinlich, wieder eine D&D-Frage zu stellen, da das Forum voll davon ist, abed ich probiere schon seit einer Stunde daran herum und komme nicht weiter. Leider kann ich mein Problem schlecht in Code ausdrücken, aber ich versuche es mal so zu schildern ... Mein Programm besteht aus einem Listbox (lstbxStart) und einer Editbox. Wenn man einen Ordner oder eine Datei auf die Listbox zieht, soll die Datei der Liste hinzugefügt werden. Das funktioniert soweit auch, aber leider erst, nachdem ich ein mal in die Listbox geklickt habe. Es ist mir völlig schleierhaft, warum da etwal passieren soll, da kein OnClick-Ereignis definiert ist. Ich habe eigentlich auch alle Eigenschaftswerte wie in einer anderen Listbox verwendet, die ich mal programmiert habe. Hier etwas Code:
Delphi-Quellcode:
Die Eigenschaften der Listbox aus dem Builder:
procedure TfrmFastCast.lstbxStartMouseDown(Sender: TObject;
begin //Gekürzt if ssLeft in Shift then begin DragAcceptFiles(self.Handle, true); ReleaseCapture; Self.Perform(WM_NCLBUTTONDOWN, HTCAPTION, varEmpty); end; end; procedure TfrmFastCast.lstbxStartDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin if Sender = lstbxStart then Accept:=False else Accept:=True; end; procedure TfrmFastCast.FormCreate(Sender: TObject); begin //Gekürzt lstbxStart.DragMode:=dmAutomatic; DragAcceptFiles(self.Handle, True); end; procedure TfrmFastCast.WMDropFiles(var Msg: TMessage); var i, anzahl, size: integer; Dateiname: PChar; mousepos: TPoint; ndx: integer; begin GlobParameter:=''; inherited; Dateiname := ''; anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255); if (GetCursorPos(mousepos)) then // Position des Cursors begin mousepos := lstbxStart.ScreenToClient(mousepos); ndx := lstbxStart.ItemAtPos(mousepos, True); if ndx <> -1 then begin FileName:=lstbxStart.Items[ndx]; end; end; // Dieser Code ist dann für die Pfade die gedroppt werden for i := 0 to (anzahl - 1) do begin size := DragQueryFile(Msg.WParam, i, nil, 0) + 1; Dateiname := StrAlloc(size); DragQueryFile(Msg.WParam, i, Dateiname, size); GlobParameter:=Dateiname; StrDispose(Dateiname); end; if GlobParameter<>'' then lstbxStart.OnDblClick(self); else FileName:=''; DragFinish(Msg.WParam); Drop(FileName); //Drop ist eine weitere Prozedur. end;
Delphi-Quellcode:
Was mir noch aufgefallen ist, ist, dass es mit dem D&D nicht funtioniert, wenn ich bei DragAcceptFiles anstatt "self.handle" den Namen der Listbox angebe. Zwar kann ich dann nicht mehr auf das ganze Formular droppen, aber es passiert auch nichts mehr :-/
DragKind:=dkDrag;
DragMode:=dmAutomatic; Ich hoffe, ihr könnt mir helfen, auch wenn der Code ein Schuss ins Blaue ist :-/ Liebe Grüße Aike |
Re: Drag&Drop wird nicht vor erstem Klick ausgeführt
*Nach oben zieh*
|
Re: Drag&Drop wird nicht vor erstem Klick ausgeführt
Hm, kann jetzt nur raten, schon mal mit SetFocus versucht ?
Delphi-Quellcode:
procedure TfrmFastCast.WMDropFiles(var Msg: TMessage);
var i, anzahl, size: integer; Dateiname: PChar; mousepos: TPoint; ndx: integer; begin lstbxStart.SetFocus; // <- GlobParameter:=''; //... Ich würde es ein bissel anders machen:
Delphi-Quellcode:
[edit=turboPASCAL]Delphi-Tags gesetzt[/edit]
procedure TForm1.FormCreate(Sender: TObject);
begin DragAcceptFiles(ListBox1.Handle, True); end; procedure TForm1.WMDropFiles(var Msg: TMessage); begin ... := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz