AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Drag-and-Drop auf Frame-Komponente realisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drag-and-Drop auf Frame-Komponente realisieren

Ein Thema von Freyr77 · begonnen am 10. Nov 2016 · letzter Beitrag vom 10. Nov 2016
Antwort Antwort
Freyr77
(Gast)

n/a Beiträge
 
#1

Drag-and-Drop auf Frame-Komponente realisieren

  Alt 10. Nov 2016, 12:36
Delphi-Version: 10 Seattle
Hi.

Ich brauche in einem meiner Frames eine Drag-And-Drop Lösung, die mir ausschließlich den Pfad der "gedropten" Anwendung ausspuckt, damit ich diese anschließend im Grid verarbeiten lassen kann.

Leider funktioniert das einfach nicht. Auf einer normalen "Form" klappt das wunderbar, auf dem Frame wird mir immer das Verbotszeichen angezeigt wenn ich den Drop versuche.

Der Code der auf der Form funktioniert hat steht jetzt im Frame:

Delphi-Quellcode:
constructor TFrame1.Create(AOwner: TComponent);
begin
  inherited;
    DragAcceptFiles(Handle,True);
end;

procedure TFrame1.WMDROPFILES(var msg: TWMDropFiles);
const
  MAXFILENAME = 255;
var
  cnt, fileCount : integer;
  fileName : array [0..MAXFILENAME] of char;
begin
  // how many files dropped?
  fileCount := DragQueryFile(msg.Drop, $FFFFFFFF, fileName, MAXFILENAME) ;

  // query for file names
  for cnt := 0 to -1 + fileCount do
  begin
    DragQueryFile(msg.Drop, cnt, fileName, MAXFILENAME) ;

    //do something with the file(s)
    memo1.Lines.Insert(0, fileName) ;
  end;

  //release memory
  DragFinish(msg.Drop) ;
end;
... funktioniert aber nicht.

Jemand eine Ahnung? Google hat mir bisher auch nicht wirklich geholfen.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.007 Beiträge
 
Delphi 12 Athens
 
#2

AW: Drag-and-Drop auf Frame-Komponente realisieren

  Alt 10. Nov 2016, 13:42
Das DragAcceptFiles im Frame-Create kannst du weglassen. Das Form muss weiterhin das DropFiles übernehmen, kann aber die Message einfach an das Frame weiterreichen. Die Methode im Frame muss dann auch kein Message-Handler mehr sein.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle,True);
end;

procedure TForm1.WMDROPFILES(var Message: TWMDropFiles);
begin
  MyFrame1.HandleDropFiles(Message);
end;

procedure TMyFrame.HandleDropFiles(var Message: TWMDropFiles);
const
  MAXFILENAME = 255;
var
  cnt, fileCount : integer;
  fileName : array [0..MAXFILENAME] of char;
begin
  // how many files dropped?
  fileCount := DragQueryFile(Message.Drop, $FFFFFFFF, fileName, MAXFILENAME) ;

  // query for file names
  for cnt := 0 to -1 + fileCount do
  begin
    DragQueryFile(Message.Drop, cnt, fileName, MAXFILENAME) ;

    //do something with the file(s)
    memo1.Lines.Insert(0, fileName) ;
  end;

  //release memory
  DragFinish(Message.Drop) ;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Freyr77
(Gast)

n/a Beiträge
 
#3

AW: Drag-and-Drop auf Frame-Komponente realisieren

  Alt 10. Nov 2016, 14:26
Das DragAcceptFiles im Frame-Create kannst du weglassen. Das Form muss weiterhin das DropFiles übernehmen, kann aber die Message einfach an das Frame weiterreichen. Die Methode im Frame muss dann auch kein Message-Handler mehr sein.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle,True);
end;

procedure TForm1.WMDROPFILES(var Message: TWMDropFiles);
begin
  MyFrame1.HandleDropFiles(Message);
end;

procedure TMyFrame.HandleDropFiles(var Message: TWMDropFiles);
const
  MAXFILENAME = 255;
var
  cnt, fileCount : integer;
  fileName : array [0..MAXFILENAME] of char;
begin
  // how many files dropped?
  fileCount := DragQueryFile(Message.Drop, $FFFFFFFF, fileName, MAXFILENAME) ;

  // query for file names
  for cnt := 0 to -1 + fileCount do
  begin
    DragQueryFile(Message.Drop, cnt, fileName, MAXFILENAME) ;

    //do something with the file(s)
    memo1.Lines.Insert(0, fileName) ;
  end;

  //release memory
  DragFinish(Message.Drop) ;
end;
Dankeschön

Hab das jetzt auch ziemlich genau so gelöst.
  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 06:35 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