![]() |
AW: dragdrop
Zitat:
Delphi-Quellcode:
Der Code zwischen den Zeilen die mit *** markiert sind hat dort nichts verloren.
// kommentierter Sourcecode
WM_DROPFILES: begin // es geht los // ganz offensichtlich soll die Namen von gedroppten Dateien ermittelt werden nFilesDropped := DragQueryFile(wP, LongWord(-1), '', 0); sFileName := ''; // <= überflüssiger Code // Wenn es nur eine Datei gab, dann ist das ein Spezialfall des allgemeinen Falls // dass mehrere Dateien möglich sind. // Entweder verarbeitet man nur die 1. Datei oder man muss dem User sagen, // dass er nur eine Datei droppen darf if nFilesDropped = 1 then begin SetLength(sFileName, DragQueryFile(wP, 0, nil, 0)); DragQueryFile(wP, 0, @sFileName[1], Length(sFileName) + 1); // Nanu, weshalb wird jetzt der Dateiname verfälscht? // das macht doch keinen Sinn sFileName := LowerCase(sFileName); // was nun folgt hat nix mit Drag & Drop zu tun *** goProgBar.Dirty := True; // Hä? oButton.BmpFile := sFileName; // ein Dateiname wird einem Button zugewiesen IconHandle := GetHIconFromFile(sFileName); // was passiert mit dem IconHandle? GetCursorPos(p); // falsch, DragQueryPoint() muss benützt werden img := SKAERO_GetButImageBackProperty(Windowfrompoint(p)); // hier endet der Code, der nix mit Drag & Drop zu tun hat *** end; DragFinish(wP); // ok, Drag & Drop ist fertig SetForegroundWindow(WinHandle); // wozu ? end; Stattdessen dürfte dort nur ein Funktionsaufruf stehen:
Delphi-Quellcode:
// sauberer Sourcecode
WM_DROPFILES: begin // es geht los // ganz offensichtlich soll die Dateinamen von gedroppten Dateien ermittelt werden nFilesDropped := DragQueryFile(wP, LongWord(-1), '', 0); if nFilesDropped >= 1 then begin // 1. Dateiname holen SetLength(sFileName, DragQueryFile(wP, 0, nil, 0)); DragQueryFile(wP, 0, @sFileName[1], Length(sFileName) + 1); DragQueryPoint(wP, p); ChangeButtonPicture(sFileName, p); end; DragFinish(wP); // ok, Drag & Drop ist fertig end; |
AW: dragdrop
Delphi-Quellcode:
Ok.
sFileName := ''; // <= überflüssiger Code
Delphi-Quellcode:
kann ich auch noch nachvollziehen.
sFileName := LowerCase(sFileName);
Zitat:
Delphi-Quellcode:
ChangeButtonPicture(sFileName, p);
Ob ich nun innerhalb DragDrop meine Dateien verarbeite oder innerhalb von dragdrop auf eine function außerhalb dragdrop verweise ist letztendlich das gleiche. Denn auch hier wird dragdrop dann unterbrochen bzw.. meine funktionen verarbeitet. Da muss ich also gegenhalten // was nun folgt hat nix mit Drag & Drop zu tun ***
Delphi-Quellcode:
ChangeButtonPicture(sFileName, p);
Aber Ok ist eine saubere lösung.
Delphi-Quellcode:
Hatte ich im Sample oben schon korrigiert.
GetCursorPos(p); // falsch, DragQueryPoint() muss benützt werden
img := SKAERO_GetButImageBackProperty(Windowfrompoint(p));
Delphi-Quellcode:
SetForegroundWindow(WinHandle); // wozu ?
Kann man sich auch sparen korrekt.
Delphi-Quellcode:
if nFilesDropped >= 1 then
Mehr auf keinen Fall. Zumal das dann hier ein Zähler von nöten wäre..
Delphi-Quellcode:
SetLength(sFileName, DragQueryFile(wP, Zähler, nil, 0));
DragQueryFile(wP, Zähler, @sFileName[1], Length(sFileName) + 1); mehr als 1 wäre dann auch unnötig ;) EDIT:
Delphi-Quellcode:
DragQueryPoint(wP, p);
Ist unnötig. Bekomme damit zwar die koordinaten innerhalb des Button aber nicht zum Screen daher kann ich damit nicht das Handle ermitteln. Danke für die doku.. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 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 by Thomas Breitkreuz