AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Autom. Dateiöffnen scheitert an Leerzeichen trotz "%1"
Thema durchsuchen
Ansicht
Themen-Optionen

Autom. Dateiöffnen scheitert an Leerzeichen trotz "%1"

Ein Thema von JayRZay · begonnen am 26. Mär 2007 · letzter Beitrag vom 27. Mär 2007
Antwort Antwort
JayRZay

Registriert seit: 4. Mär 2007
23 Beiträge
 
Delphi 7 Personal
 
#1

Autom. Dateiöffnen scheitert an Leerzeichen trotz "%1&q

  Alt 26. Mär 2007, 21:10
Hi, sorry dass ich schon wieder was frage, aber beim letzten Überarbeiten des Programms fallen mir lauter Schwächen auf, mit denen ich gar nicht gerechnet habe.

Ich hoffe allerdings, das war erstmal die letzte dumme Frage.

Mein Problem ist folgendes. Ich möchte per Windows meinen eigenen Dateityp automatisch per ParamStr(1) öffnen lassen. Klappt auch normalerweise aber gerade bemerke ich, dass es nicht klappt, wenn Leerzeichen im Dateinamen (oder den Ordnernamen, wie in meinem akuten Fall) sind.

Schon klar, Parameter gehen nur bis zum Leerzeichen. Aber ich habe meine Dateiendung korrekt mit "%1" statt nur %1 registriert. Sämtliche Foren geben, soweit ich sehen konnte, immer nur die fehlenden Anführungszeichen als Fehlerquelle an. Ich stehe vor einem Rätsel.

Die Registrierungszeile lautet:

InstallExt('bst', 'BLE', 'Bestellliste', ParamStr(0), '"%1"',1) Ich verwende XP, wenn das irgendeinen Unterschied machen sollte.

Danke für die Hilfe!

EDIT: Interessante Bemerkung: Wenn ich per "Ausführen" den Namen meines Programms angebe und in "..." den Dateinamen anhänge (also so, wie es eigentlich sein sollte!), funktioniert es trotz Leerzeichen. Also muss wohl irgendwas mit dem Registrieren falsch laufen. Ich sehe aber trotzdem nich, was.

EDIT2: Folgende Überlegung: Da mein Programm-Ordner ebenfalls Leerzeichen enthält, wird er beim Öffnen dann selbst in Anführungszeichen gesetzt? So dass sich z.B.:

"C:\Programm Ordner\Programm Name.exe *"

wenn man an die Position des Sternchens den ebenfalls eingehakten Dateinamen setzt, folgendes rauskommt:

"C:\Programm Ordner\Programm Name.exe "C:\Datei Ordner\Datei Name.bst"" ergibt, so dass die Aufteilung ergibt:

1. "C:\Programm Ordner\Programm Name.exe "
2. C:\Datei Ordner\Datei Name.bst
3. ""

Also durch die doppelten Anführungszeichen der Dateiname ausgeklammert, statt eingeklammert, wird? Wenn ja, gibt es Auswege oder eine Möglichkeit, zu testen obs daran überhaupt liegt?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "

  Alt 26. Mär 2007, 21:47
Moin JayRZay,

wie sieht denn InstallExt aus?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
JayRZay

Registriert seit: 4. Mär 2007
23 Beiträge
 
Delphi 7 Personal
 
#3

Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "

  Alt 26. Mär 2007, 22:00
Ich Depp. Entschuldigung. Das hätte ich vielleicht mal erwähnen sollen.

Delphi-Quellcode:
function InstallExt(Extension, ExtDescription, FileDescription,
OpenWith, ParamString: string; IconIndex: Integer = 0): Boolean;
var
  Reg: TRegistry;
begin
  Result := False;
  if Extension <> 'then
  begin
    if Extension[1] <> '.then
      Extension := '.' + Extension;

    Reg := TRegistry.Create;
    try
      Reg.RootKey := HKEY_CLASSES_ROOT;
      if Reg.OpenKey(Extension, True) then
      begin
       Reg.WriteString('', ExtDescription);
       if Reg.OpenKey('\' + ExtDescription, True) then
       begin
         Reg.WriteString('', FileDescription);
         if Reg.OpenKey('DefaultIcon', True) then
         begin
           Reg.WriteString('', Format('%s,%d', [OpenWith, IconIndex]));
           if Reg.OpenKey('\' + ExtDescription + '\Shell\Open\Command', True) then
           begin
             Reg.WriteString('', Format('"%s" "%s"', [OpenWith, ParamString]));
             Result:=True;
           end;
         end;
       end;
     end;
  finally
    Reg.Free;
  end;
  end;
end;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "

  Alt 26. Mär 2007, 22:13
Moin JayRZay,

da ParamString schon von der Funktion in "" eingeschlossen werden, solltest Du das beim Aufruf der Funktion weglassen.

BTW:
TRegistry.Free führt zwar auch ein Close aus, aber eben nur eines.
Es werden aber mehrere Keys geöffnet...
Ausserdem fehlen, deshalb, dort noch so einige try/finally-Blöcke, um das Schliessen der Keys sicherzustellen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "

  Alt 26. Mär 2007, 22:27
durch openkey wird automatisch ein CloseKey durchgeführt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
JayRZay

Registriert seit: 4. Mär 2007
23 Beiträge
 
Delphi 7 Personal
 
#6

Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "

  Alt 26. Mär 2007, 22:39
Peinlich, die Lösung ist vollkommen richtig. Ich danke dir, Seehase. Hat mir sehr geholfen!

Was das Schließen von Keys beim Öffnen eines Anderen angeht, hat SirThornberry allerdings recht.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "

  Alt 27. Mär 2007, 19:22
Moin Jens,

Zitat von SirThornberry:
durch openkey wird automatisch ein CloseKey durchgeführt.
bei welcher Delphi-Version?
Ich habe das vorher bei D7 nachgesehen, da wird bei OpenKey kein CloseKey durchgeführt.
Da D2006 die gleiche Routine verwendet gehe ich mal davon aus, dass es bei den dazwischenliegenden Versionen auch nicht gemacht wird.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "

  Alt 27. Mär 2007, 19:37
Hallo,

die D7 Online-Hilfe ist da wie so oft etwas missverständlich. Das regelmäßige automatische Schließen offener Schlüssel betrifft nur TRegIniFile, nicht TRegistry. Bei den Methoden von TRegistry wird ein CloseKey nur dann ausgeführt, wenn es der VCL-Code erfordert oder sinnvoll erscheinen lässt, nicht als Komfortmerkmal für den Programmierer. Deshalb gehört hinter jedes WriteString() ein CloseKey(). Besser ist das.

Freundliche Grüße
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "

  Alt 27. Mär 2007, 19:42
Moin Marabu,

Zitat von marabu:
Das regelmäßige automatische Schließen offener Schlüssel betrifft nur TRegIniFile,
was bitte steht denn da in der deutschen Hilfe?
In der englischen Fassung ist bei OpenKey nicht die Rede davon, dass ein geöffneter Key geschlossen wird...
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Autom. Dateiöffnen scheitert an Leerzeichen trotz "

  Alt 27. Mär 2007, 19:46
Moin Chris,

im Topic "TRegistry.CloseKey" findet sich folgende Beschreibung:

Zitat:
... Viele Methoden von TRegistry rufen CloseKey routinemäßig nach Lese- oder Schreibvorgängen auf. ...
Freundliche Grüße
  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 09:30 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