Autor |
Beitrag |
Luncustaf
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Di 22.04.03 23:24
....von meinem programm und alden der datei
wie ist das möglich?
gr€€tz
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 23.04.03 09:02
Hallo,
kannst Du bitte Dein Problem in mehr als einem kurzen Satz beschreiben.
Gruß
Tino
|
|
Luncustaf 
      
Beiträge: 324
Win 2k
D7 Ent.
|
Verfasst: Mi 23.04.03 09:10
hi,
also ich hab einen datei typ *.nfo mit meinem programm verknüpft - wenn ich nun einen doppelklick auf eine *.nfo datei mache dann wird zwar mein programm gestartet die datei aber nicht in meinem programm geladen.
ich habe einen OpenDialog wenn ich also dort eine nfo lade dann klappt das abern icht wenn ich eine datei mit einem doppelklick öffnen will.
gr€€tz
|
|
fcg
      
Beiträge: 360
WinXP
D3 Prof, D6 Pers
|
Verfasst: Mi 23.04.03 09:25
hi, so müßte das gehen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64:
| private FFileName: string; procedure SetFileName(const FileName: String); procedure PerformFileOpen(const AFileName: string);
...
procedure TMainForm.SetFileName(const FileName: String); begin FFileName := FileName; Caption := Format('%s - %s', [ExtractFileName(FileName), Application.Title]); end;
procedure TMainForm.FormCreate(Sender: TObject); begin Application.title:='BildDatenbank'; OpenDialog1.InitialDir := ExtractFilePath(ParamStr(0)); SaveDialog1.InitialDir := OpenDialog1.InitialDir; Anwendung := '"' + paramstr(0) + '" "%1"';
try CreateRegKey(Extension,'',Schluessel); CreateRegKey(Schluessel,'',Beschreibung); CreateRegKey(Schluessel + '\shell\open\command','',Anwendung); except on EOleRegistrationError do ShowMessage('Mist! Hat nicht geklappt'); end;
end;
procedure TMainForm.PerformFileOpen(const AFileName: string); begin Editor.Lines.LoadFromFile(AFileName); Opendialog1.filename:=AfileName; Application.title:=AFilename; listbox1.Items.LoadFromFile(afilename); image1.Picture.loadfromfile (listbox1.Items[0]); SetFileName(AFileName); Editor.Modified := False;
end;
procedure TMainForm.FileOpen(Sender: TObject); begin if OpenDialog1.Execute then begin PerformFileOpen(OpenDialog1.FileName); Editor.ReadOnly := ofReadOnly in OpenDialog1.Options; end; end;
procedure TMainForm.FormShow(Sender: TObject); begin
{ Check if we should load a file from the command line } if (ParamCount > 0) and FileExists(ParamStr(1)) then PerformFileOpen(ParamStr(1)); end; |
bei mir hat es gefunzt.
fcg
_________________ .: Wer für alles offen ist, kann nicht ganz dicht sein! :.
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 23.04.03 09:42
Hallo,
hast Du die übergebenen Parameter ausgewertet? Wie das funktioniert steht auch in der FAQ!
Gruß
Tino
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mi 23.04.03 09:42
jap, ist absolut korrekt. gutes Beispiel. Wollte gerade selbst eins machen aber da war einer schneller  Prinzipiell hast du im ParamStr(0) den Namen der Anwendung stehen die gestartet wurde. Damit kriegst du ja auch den Pfad der Anwendung raus wie z.B. mit extractfilepath(ParamStr(0)). Im ParamStr(1) steht dann der Dateiname drinnen mit dem das Programm verknüpft wurde, wenn es gestartet wurde. Du kannst einfach einen Open von ParamStr(1) machen.
Du hast allerdings ein Problem im ParamStr, wenn du eine Konsolenanwendung machst, die mit Parametern aufgerufen werden soll, wie z.B. einem Pfad. Da wird der Pfad nach Leerzeichen auf die ParamStrings verteilt. Das ist etwas doof zum Filtern, aber nur, damit du es weißt
Also die Datei C:\Wir testen.dat wird in den ParamStrings zu
ParamStr(1) C:\Wir
ParamStr(2) testen.dat
Das ist etwas umständlich bei Commandlinetools aber filtern kann mans ja.
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Mi 23.04.03 09:46
Schon mal was von Anführungszeichen gehört? Und was machst du, wenn 2 oder mehrere Leerzeichen hintereinander vorkommen?
Also die Datei "C:\Wir testen.dat" wird in den ParamStrings zu
ParamStr(1) C:\Wir testen.dat
_________________ Ist Zeit wirklich Geld?
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mi 23.04.03 10:05
Zitat: |
Also die Datei "C:\Wir testen.dat" wird in den ParamStrings zu
ParamStr(1) C:\Wir testen.dat
|
Ich habs mal getestet und bei mir hat das so nicht funktioniert. ich hab Anführungszeichen als Erkennung eingebaut aber die werden immer noch auf Paramstrings verteilt nach den Leerzeichen. Aber man kann die Positionen der Anführungszeichen ermitteln und dann weiß man welche Paramstrings zusammengehören und kann diese zu einem String zusammenfügen.
Naja nur ich finds interessant dass der copy-befehl von windows z.B. ohne Anführungszeichen geht und er alles richtig auflistet. Man müsste das wohl anhand der Backslashs (\) und dem : bei der Pfadangabe ermitteln können.
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Mi 23.04.03 11:05
ShadowCaster hat folgendes geschrieben: | Ich habs mal getestet und bei mir hat das so nicht funktioniert. |
Hast du es schon mal so ausprobiert:
Im Menü Start/Parameter gibst du folgendes ein:
"Dies ist ein Test"
Im Programm schreibst du folgendes:
Quelltext 1: 2: 3: 4:
| procedure TForm1.FormCreate(Sender: TObject) begin ShowMessage(ParamStr(1)); end; |
_________________ Ist Zeit wirklich Geld?
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Mi 23.04.03 11:46
Hast du überhaupt gelesen was ich oben geschrieben hab? Mir scheint es nicht so. Ich hab davon geschrieben, dass ich das ganze auf eine Konsolenanwendung beziehe! Genau dabei ist es bei mir aufgetreten, dass es nicht funktioniert. Bei einer VCL-Anwendung hab ich das nur wie oben im Codebeispiel getestet. Da weiß ich nicht ob das auch so ist. Aber oben hab ich von Konsolenanwendung geredet.
Ich verwende auch kein on-Create Ereignis bei einer Konsolenanwendung. Es wird einfach beim Start abgefragt.
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 23.04.03 12:12
Also bei meiner Konsolenanwendung funktioniert es:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| program Project1; var Idx: Integer; begin For Idx := 1 To ParamCount Do WriteLN (ParamStr (Idx));
ReadLN; end. |
Kannst es ja mal ausprobieren!
Gruß
Tino
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Do 24.04.03 09:06
danke, werd ich tun. Hab delphi 5. Kann ja vielleicht daher kommen. Wär aber klasse, wenns gehen würde. 
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Do 24.04.03 10:38
ShadowCaster hat folgendes geschrieben: | Hab delphi 5. Kann ja vielleicht daher kommen. |
Glaube ich nicht... ich hab auch Delphi 5 und bei mir hat es bislang immer funktioniert.
Gruß
Tino
|
|
AndyB
      
Beiträge: 1173
Erhaltene Danke: 14
RAD Studio XE2
|
Verfasst: Do 24.04.03 16:11
Das funktionierte bereits unter TurboPascal.
_________________ Ist Zeit wirklich Geld?
|
|
ShadowCaster
      
Beiträge: 312
|
Verfasst: Fr 25.04.03 09:56
Egal... dann ist es eine optische Täuschung die meine Anwendung anzeigt oder ich hab was falsch gemacht.
Es lebe Delphi! 
|
|