AGB  ·  Datenschutz  ·  Impressum  







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

Drag / Drop Tutorial

Ein Thema von haentschman · begonnen am 1. Jan 2008 · letzter Beitrag vom 3. Jan 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Drag / Drop Tutorial

  Alt 2. Jan 2008, 18:22
Zitat von haentschman:
...aufwärm...

  DragAcceptFiles(FAnlagenkomponenten.ListBox1.Handle, true);
Hallo,

befindet sich die ListBox1 direkt auf dem Formular? Falls nicht dann fängst du die Nachricht WM_DROPFILES eben von der Listbox ab.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#12

Re: Drag / Drop Tutorial

  Alt 2. Jan 2008, 19:10
Danke für die schnelle Reaktion...

die ListBox befindet sich direkt auf dem Formular.

unabhängig davon sollte aber die 4. procedure ausgeführt werden...

in meinem TestFomular (Form1) funktioniert das ja alles...

oder funktioniert das nur mit Form1....

ich denke, das das mit dem Aufrufprocedure DropFiles (var Msg: TMessage); message WM_DROPFILES; zusammenhängt....vestehe aber nicht warum
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Drag / Drop Tutorial

  Alt 2. Jan 2008, 19:17
Hast du es zum Testen schon mal so versucht?
Delphi-Quellcode:
procedure TFAnlagenkomponenten.FormCreate (Sender: TObject);
begin
  DragAcceptFiles (Handle, True);
end;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#14

Re: Drag / Drop Tutorial

  Alt 2. Jan 2008, 19:30
... habe ich.

in meinem Testformular habe ich mit solchen Varianten rumgespielt.

sowohl mit dem Handle des Formulars als auch der ListBox hat es funktioniert...

der gewünschte Unterschied war nur, daß das Drop einmal auf dem gesamten Formular akzeptiert wurde, das andere Mal nur auf der ListBox.

[edit]
...habe aus
Zitat:
DragAcceptFiles(FAnlagenkomponenten.ListBox1.Handl e, true);
Zitat:
DragAcceptFiles(FAnlagenkomponenten.Handle, true);
gemacht....funktioniert auf dem gesamten Formular.

Zitat:
Falls nicht dann fängst du die Nachricht WM_DROPFILES eben von der Listbox ab.
... wie müßte der Aufruf vom DropFiles aussehen
[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Drag / Drop Tutorial

  Alt 2. Jan 2008, 19:45
Alles klar: Drag Drop Problem das wäre imho die einfachste Möglichkeit.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#16

Re: Drag / Drop Tutorial

  Alt 2. Jan 2008, 19:57
...ich habe gelogen...

in FAnlagenkomponent liegt die ListBox auf einem TabSheet...
im TestFormular direkt auf dem Formular...

mit dem Abfangen direkt von der ListBox funktioniert es... Danke


heißt das man sollte sich angewöhnen die Message direkt vom Objekt abzufangen ?
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Drag / Drop Tutorial

  Alt 2. Jan 2008, 20:13
Ja wenn du Drop nicht auf dem gesamten Formular akzeptieren möchtest, sondern nur auf einem bestimmten TWinControl, dann sollte man WM_DROPFILES direkt vom Objekt abfangen.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#18

Re: Drag / Drop Tutorial

  Alt 2. Jan 2008, 20:16
...vielen, vielen Dank nochmal...

...wieder was gelernt

  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#19

Re: Drag / Drop Tutorial

  Alt 3. Jan 2008, 02:47
...Guten Morgen...

...ich muß dann auch mal ein Erfolgserlebnis loswerden.

- per Drag/Drop Files in einen Ordner kopieren und in FileListBox anzeigen.
DocVerzeichnis: Zielordner
FileListBox.Directory: Zielordner

Delphi-Quellcode:
procedure TJvFileListBox.DropFiles(var Msg: TMessage);
var
  i, Anzahl, Size: integer;
  SourcePfad: PChar;
  Dateiname: String;
  Pfad: String;
begin
  inherited;
  Anzahl := DragQueryFile(Msg.WParam, $FFFFFFFF, SourcePfad, 255);
  SetForegroundWindow(FAnlagenkomponenten.Handle);
  if MessageDlg('Kopieren von ' + IntToStr(Anzahl) + ' Dateien nach ' + FAnlagenkomponenten.DocVerzeichnis.Text + ' ?',
        mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    begin
      for i := 0 to (Anzahl - 1) do
        begin
          Size := DragQueryFile(Msg.WParam, i , nil, 0) + 1;
          SourcePfad:= StrAlloc(Size);
          DragQueryFile(Msg.WParam,i , SourcePfad, Size);
          Pfad:= ExtractFilePath(StrPas(SourcePfad));
          Dateiname:= Copy(StrPas(SourcePfad),Length(Pfad)+1,Length(StrPas(SourcePfad))- Length(Pfad));
          CopyFile(SourcePfad,PChar(FAnlagenkomponenten.DocVerzeichnis.Text + '\'+ Dateiname),false);
          StrDispose(SourcePfad);
        end;
      FAnlagenkomponenten.JvFileListBox1.Update;
    end;
  DragFinish(Msg.WParam);
end;
...und es funktioniert

Danke noch einmal an alle die mich unterstützt haben...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#20

Re: Drag / Drop Tutorial

  Alt 3. Jan 2008, 04:07
inherited würde ich in disem Fall nicht aufrufen.
Du verarbeitest doch schon diese Nachricht, demnach muß/sollte sie nicht (eventuell) noch von Anderem nochmals verarbeitet werden..
(nicht das es doppelt verabeitet wird ... stell dir mal vor eine übergeordnete Funktion verschiebt/löscht/öffnet die übergebenen Datei und deine Funktion hat dann keinen Zugriff mehr)


Die Nachrichtenbearbeitung zu lange zu unterbrechen könnte eventuell auch nicht gut sein.
MessageDlg hällt ja die Verarbeitung an und wenn irgendwo ein TimeOut wärend der Verarbtung existiert, dann könnte da auch Unvorhersehbares passieren.
Eventuell in der Funktion nur die Dateinamen in einem Array (oder Ähnlichem) speichern
und eventuell noch deinem Programm (also sich selber) mitteilen daß was da ist.

Und dann außerhalb (nachdem die Funktion beendet wurde) den MessageDlg anzeigen und dieses Array abarbeiten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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:44 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