RAD
-
Das ist Microsaft Windoof!
In Deiner Pfadangabe sind blanc's enthalten!(..\Eigene Dadeien\...
-> Die wreden als Parametertrenner erkannt!
Wenn Du eine Datei auf das Programmsymbol fallen laesst, muesste es klappen!
in Denen Code bei
pReg->WriteString("", slExeFile + " %1");
muessen "" in Parameteruebergabe eingefuegt werden!
Probier 'mal
pReg->WriteString("", slExeFile + " \"%1\"");// mit \" die Dinger einbauen.
-
wie kann ich aber die übergebene dateien auch falls der path mit leerzeichen ist an einen ansistring als inhalt übergeben?=
AnsiString test = ParamStr( 1 );
geht ja nicht, ich kann aber auch nicht schreiben:
AnsiString test = ""ParamStr( 1 )""; (nicht lachen, ich weiß wirklich nicht, wie test die übergebene datei bekommt)
-
Die 'Gaensefuesschen' muessen BEIM PROGRAMMAUFRUF (durch Windows) drankommen.
Das macht Windoof automatisch, wenn die Daten- Datei auf das Programm- Icon gezogen wird (nicht Doppelcklick!!!)
Wenn das mit Doppelklick klappen soll, muss das bei der Registrierung deiner Verknuepfung erfolgen!
pReg->WriteString("", slExeFile + " %1"); // hier wird nur der 'Text' ohne "" uebergeben!
pReg->WriteString("", slExeFile + " \"%1\"");
oder
pReg->WriteString("", slExeFile + " \"" + "%1" + "\"");So etwa muesste die Registrierung gemacht werden (addiert vor und nach 1. Parameter die noetigen " dazu)
-
du schreibst hier immer was mit writeregistry. das nützt mir beim problem überhaupt nichts. ich nutze das beispiel von bytesandmore.de/rad (dateitypen mit programm assozieren heißt der artikel), und die DATEIEN SIND SCHON MIT MEINEM PROGRAMM VERKNÜPFT; ALSO AUCH MIT DER REGISTRY!
Da nützt mir doch deine writeregistry sache nicht. mir hilft wirklich nur, wie ich den dateinamen, der durch doppelklick oder rechtsklick->öffnen aus dem explorer mein programm gestartet hat, in einen ansistring schreiben kann
-
Was kommt denn 'raus, wenn Du die Datei auf das Programmsymbol 'ziehst'???
NICHT Doppelklick und NICHT ueber Kontextmenue!!!
Probier das mal!
-
na das gleiche problem passiert
-
Dann 'spinnt' Dein Windows???
Bei mir geht das immer!!!(?) (Win2K + BCB 4.0)
Da faellt mir nur noch was ganz brutales ein:
Ruf 'mal Deine Daten- Datei mit Kontextmenue auf 'OEFFNEN MIT'- Menue punkt!!!
-> waehle in Dialog deine Programm- Datei aus!!!
-> Option Immer mit diesem Programm oeffnen aktivieren!!!Das zwingt Windoof den Registry- Eintrag neu zu machen!
Das geht bei mir danach in JEDEM Ordner!
-
tja, windows98 (Second Edition) scheint solche explorer-öffnen-sachen leider nur bei nicht-leerzeichen pfaden öffnen. Das problem kommt nämlich wirklich nur bei allen pfaden, die irgendwo ein leerzeichen haben *schnief*
(ach und ja: die optionen zum programm, mit dem geöffnet werden soll, etc. sind alle korrekt)
-
Wenn du immer nur eine Datei übergibst ist das doch einfach: per ParamCount die Anzahle der "Bruchstücke" ermitteln und dann in einer Schleife aus den jeweiligen ParamStr(i) zusammensetzen, unter Einfügen entsprechender Leerzeichen.
-
@Jansen: für solche Vorschläge könnt ich dich niederschlagen (-;
Original erstellt von <Gunther>:
du schreibst hier immer was mit writeregistry. das nützt mir beim problem überhaupt nichts.Ein Komiker... hast du das Beispiel von RAD überhaupt mal angeschaut oder einfach nur rum ge copy-pasted? Zurück auf Start. Mit den Informationen vom Altenburger und dem Snippet von RAD solltest du dein Problem. lösen. Aber du müsstest dir hald schon die Mühe machen, das Snippet zu verstehen.
-junix
-
das wäre ja super, nur ist jetzt problematisch, dass zum beispiel auch funktionen im programm wie das angucken einer html-datei im externen browser so umgelegt, dass diese datei jetzt als gültiger paramstr an die entsprechende fkt. geschickt wird und so diese ausgelöst wird und nicht der browser mit der datei geöffnet wird.
bis jetzt dachte ich reicht die abfrage FileExists() bei der paramstr sache, um zu wissen, dass mein prg. aus dem explorer durch doppelklick, oder sonstwas auf eine assozierte datei geöffnet wurde. aber eben bei shellexecute anweisungen bei mir, wird dann ein dateiname gesendet und anscheinend auch als paramstr(1) übergeben und so die fkt. mit den paramstr-sachen aufgerufen und nicht das shellexecute.
hach herje, ist das alles kompliziert
-
Geht es im Endeffekt um die Meldung oder um das öffnen jeder denkbaren Datei, egal, ob lokal oder im Netz, auch mit ggf. enthaltenen Leer- und Fragezeichen?
ShowMessage(GetCommandLine());
zeigt den kompletten Pfad, auch mit Leerzeichen, aber in Anführungszeichen eingeschlossen.
Ich hatte mal eine Funktion für meinen den MDI-Notepad geschrieben, die auf Doppelklick einwandfrei reagierte, aber auf "öffnen mit..." nicht. Bis ich dann endlich drauf kam, daß bei "öffnen mit..." noch ein nachstehendes '"' vorhanden war, beim Doppelklick-Öffnen aber nicht. Also mußte die Funktion entsprechend erweitert werden. Nun kann sie - soweit bisher bekannt - mit jeder Situation klarkommen:
void __fastcall TEditor::FormShow(TObject *Sender) { String CommandLine = GetCommandLine(), ClickedFileName, FE; int len = CommandLine.Length(); String next = CommandLine.SubString(CommandLine.Pos(":") + 1, len - CommandLine.Pos(":")); //Prüfen, auf Command Line FileName if(next.Pos(":") != 0) { ClickedFileName = next.SubString(next.Pos(":") - 1, next.Length() - next.Pos(":")+2); // ggf. vorhandenes '"' bei "öffnen mit" entfernen if (*ClickedFileName.AnsiLastChar() == '"') ClickedFileName.SetLength(ClickedFileName.Length()-1); // Vorbereitungen für das Öffnen und // dem OpenDialog prophylaktisch die Daten übergeben FE = ExtractFileExt(ClickedFileName).LowerCase(); OpenDialog->FileName = ClickedFileName; OpenDialog->DefaultExt = FE; OpenDialog->InitialDir = OpenDialog->FileName; // ohne OpenDialog Open(Sender); } // wurde kein File geklickt, ein neues Fenster öffnen else FileNewClick(Sender); }
HTH. Mit ParamStr() wird es ähnlich gehen, nur muß man dort wie ober erwähnt, die Parameter usw. noch zusammensetzen. So oder so, die Datei wird geöffnet, ob sie sich nun wiedersetzt oder nicht. :p
-
Hmmm..., ich sprech leider kein Delphi. Aber Thomas Weinert (Autor des genialen Weaverslave
) interessiert sich für die Function, müßte sich dafür aber extra in den BCB-Code einlesen. Kann/will/mag jemand die Funktion nach delphi transferieren? Wär echt super. Wer ein derart geniales Tool frei verbreitet, hat etwas Dank sicher allemal verdient.