Drag&Drop
-
Original erstellt von <JFK>:
ohne das nachgeprüft zu habenHättest du mal lieber nachgeprüft, dann hätte dieser Thread zwei überflüssige Beiträge weniger.
Im Klartext: auch im FormCreate hat die Form bereits ihr gültiges Handle.
-
Auf jeden Fall interessant. An die Möglichkeit hätte ich sicher nie gedacht.
Bis zum Drag klappt hier alles. Dann fehlt natürlich die OpenRoutine. Die existiert ja schon, also will ich TObject *Sender in die Function implementieren. Geht nicht,:
[C++Fehler] PixMain.h(698): Wrong number of arguments in call of macro 'VCL_MESSAGE_HANDLER'.Ole, also TObject *Sender einfach mal privat declariert, FormShow(Sender); in WmDropFiles(TWMDropFiles& Message) aufgerufen... Kompilierung klapt, Drop auch.
Nur... die Datei wird nicht geöffnet. Sollte aber (im Prinzip), denn FormShow(Sender) ruft Open(Sender) auf, nachdem der ParamStringaus gewertet wurde.
Hmmm...,dasmüßte ich jetzt nachverfolgen. Auf jeden Fall, ich hab das Drop-Akzeptieren-'+' und kann die Datei fallen lassen,ohne ein CPU-Fenster zu erhalten.
@mosta, hab's genau nach deiner Anweisung gemacht, ansich geht es.
#include <shellapi.h> gehört(natürlich) vor #pragma hdrstop. Manchmal sind es solche vermeindlich kleinen Fehler. Sowas hat @Jansen gemeint, danach mußt du suchen. ZB. hab ich es auch leicht, die MessageMap als letztes im public zu declarieren, da ist ja bei mir nur der Owner declariert. Auch sowas kann ggf. der Grund sein.?.
Und mich würd ggf. ein Tip interessieren, warum das Drop hier nicht ein "freundliches Öffnen" :p zur Folge hat, obwohl alles scheinbar richtig aufgebaut ist. Ein
ShowMessage(GetCommandLine());
hat festgestellt, daß nur der Name der App als ParamString übergeben wird. Ünn nü?
-
Ich versteh das nicht, bin gestern Abend eingeschlafen ohne was zu verändern geh heute um 13:40Uhr an den Rechner will Compilieren und es geht, dann will ich die Dra&Drop funktion testen und es Funktioniert. Diese willkür bin ich sonst nur von Window Programen gewohnt, aber ich bin froh und das ist das wichtigste oder
thx & cux mosta
[ Dieser Beitrag wurde am 30.03.2003 um 14:03 Uhr von mosta editiert. ]
-
Omega-X:
Junge, Junge, was hast du denn wieder geraucht?
Glaubst du wirklich, dass dir jemand folgen kann?[ Dieser Beitrag wurde am 30.03.2003 um 14:04 Uhr von Jansen editiert. ]
-
#include <shellapi.h>
Verursacht bei mir maßig Fehler, was kann da los sein, spinnt der Compiler oder ich? Naja als erstes wird die shellapi.h aufgerufen und dann die vcl wenn ich rumdrehe kommt ein Exception Fehler.Was mache ich falsch, fehlt mir ne .lib oder sowas
[ Dieser Beitrag wurde am 31.03.2003 um 08:32 Uhr von mosta editiert. ]
-
@Jansen, sieht aus wie Lagerfett (stinkt auch so), Rauch giftgrün, schmeckt wie Havanna. Wirkung: Keine, aber ich hab dann 3 Tastaturen.
Kurzform:
void __fastcall TPixi::WmDropFiles(TWMDropFiles& Message) { char buff[MAX_PATH]; HDROP hDrop = (HDROP)Message.Drop; int numFiles = DragQueryFile(hDrop,-1, NULL, NULL); for (int i=0;i<numFiles;i++) { DragQueryFile(hDrop, i, buff, sizeof(buff)); // HIER kannst du jede "gedropte" Datei mit // einem eigenen Algorithmus verarbeiten. Zum Beispiel // die Dateien öffnen oder die Namen mal vormerken. FormShow(Sender); } DragFinish(hDrop); }
FormShow(Sender) wertet den ParamString aus und gibt weiter an Open(Sender). Dieses Vorgehen ist nutzlos, da FormShow keinen ParamString empfängt. Fehler registrier ich hier keine, aber ich kann die Datei nicht via Drop öffnen lassen. Peinlich, hab keinen Plan, wie das gehen könnte.
@mosta, ich muß zuerst die VCL includieren, sonst bekomm ich Fehler (in der Auswertung der Shellapi.h).
#include <vcl.h> #include <math.h> #include <dos.h> // "DragAcceptFiles" & Co erkennen #include <shellapi.h> #pragma hdrstop #include "PixMain.h" #include "NeuDlg.h" #include "About.h"
Wobei dos.h und math.h nichts mit dem Thema zu tun haben. Schließ ggf.das Projekt und feuer alle .obj und die .tds raus, dann laß alles frisch aufbauen. - Das ist bei mir schon fast eine Rotineübung.
PS: Wie ich den BCB eben geöffnet hab, seh ich im Objectinspector blaue!!! Trennlinien. Die waren bisher immer orangelich. --- Nein, hab das Kraut nicht geraucht, das ist die "grundsolide" Plattform!
(IDE geschlossen, Farbtiefe auf 32bit, dann wieder auf 16bit gesetzt, IDE geöffnet, die Linienfarbe stimmt wieder. --- Nur als Beispiel.
-
@Omega-X das ist bei mir auch so nur ach ich zeig denn Code mal kurz
#include <vcl.h> #include <stdio.h> #include <shellapi.h>
Exception Fehler Zugriffsverletzung
#include <shellapi.h> #include <vcl.h> #include <stdio.h>
Fehler in der shellapi.h undzwar immer irgendtwelche multible declarations?
Help Help Help
-
trage mal in projekt-optionen -> verzeichniss/bedingungen -> bedingungen (definitionen) NO_WIN32_LEAN_AND_MEAN ein.
-
nachdem ich alle temp Dateien gelöscht habe sowie .obj funktioniert es wieder scheiß builder produziert mehr fehler alls ich
-
Original erstellt von <Omega-X>:
FormShow(Sender) wertet den ParamString aus und gibt weiter an Open(Sender). Dieses Vorgehen ist nutzlos, da FormShow keinen ParamString empfängt. Fehler registrier ich hier keine, aber ich kann die Datei nicht via Drop öffnen lassen. Peinlich, hab keinen Plan, wie das gehen könnte.Wie gesagt, ich kann dir nicht folgen. Ich verstehe nicht was du mit FormShow, Sender und Parameterstring willst: Name und Pfad der auf die Form "gedropten" Datei stehen in buff, und mehr wird doch nicht gebraucht!?
-
Aaah, dann muß ich hier aussteigen. buff enthält einen int. Hab keinen Plan, wie ich den String auslesen soll. Wichtig ist erst mal, daß @mostas Prob gelöst wird. Ich kann ja die Ohren spitzen. :p
-
Oh oh,Thema schon geklärt, gibt's nix mehr zum Spicken?
Wollte kein Durcheinander reinbringen. Aber interessieren würde mich, wie man nun an den gedropten FileName rankommt. Ich bekomm nur int, hab verschiedenes versucht. Wie muß ich denn richtig drangehen?
-
Mit "StrPas" kannst du den buffer wieder in einen String umwandeln!
FormShow(StrPas(buff));
-
Na, t-bone, hat's wieder nicht für einen Blick in die Hilfe gereicht?
StrPas ist nur aus Gründen der Abwärtskompatibilität vorhanden. Um einen nullterminierten String in einen AnsiString zu konvertieren, verwenden Sie eine Typumwandlung oder eine Zuweisung.