AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Drag&Drop wird nicht vor erstem Klick ausgeführt

Drag&Drop wird nicht vor erstem Klick ausgeführt

Ein Thema von Aike · begonnen am 19. Sep 2005 · letzter Beitrag vom 2. Nov 2005
Antwort Antwort
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#1

Drag&Drop wird nicht vor erstem Klick ausgeführt

  Alt 19. Sep 2005, 14:10
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:
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;
Die Eigenschaften der Listbox aus dem Builder:
Delphi-Quellcode:
DragKind:=dkDrag;
DragMode:=dmAutomatic;
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 :-/

Ich hoffe, ihr könnt mir helfen, auch wenn der Code ein Schuss ins Blaue ist :-/


Liebe Grüße
Aike
Achim
  Mit Zitat antworten Zitat
Aike

Registriert seit: 2. Okt 2004
319 Beiträge
 
#2

Re: Drag&Drop wird nicht vor erstem Klick ausgeführt

  Alt 2. Nov 2005, 18:57
*Nach oben zieh*
Achim
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: Drag&Drop wird nicht vor erstem Klick ausgeführt

  Alt 2. Nov 2005, 23:42
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:
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(ListBox1.Handle, True);
end;

procedure TForm1.WMDropFiles(var Msg: TMessage);
begin
  ... := DragQueryFile(Msg.WParam, $FFFFFFFF, Dateiname, 255);
[edit=turboPASCAL]Delphi-Tags gesetzt[/edit]
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:38 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