Autor Beitrag
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Di 22.04.03 23:24 
....von meinem programm und alden der datei


wie ist das möglich?


gr€€tz
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 23.04.03 09:02 
Hallo,

kannst Du bitte Dein Problem in mehr als einem kurzen Satz beschreiben.

Gruß
Tino
Luncustaf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 360

WinXP
D3 Prof, D6 Pers
BeitragVerfasst: Mi 23.04.03 09:25 
hi, so müßte das gehen:

ausblenden volle Höhe Quelltext
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 23.04.03 09:42 
Hallo,

hast Du die übergebenen Parameter ausgewertet? Wie das funktioniert steht auch in der FAQ!

Gruß
Tino
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: 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:
ausblenden Quelltext
1:
2:
3:
4:
procedure TForm1.FormCreate(Sender: TObject)
begin
  ShowMessage(ParamStr(1));
end;

_________________
Ist Zeit wirklich Geld?
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 23.04.03 12:12 
Also bei meiner Konsolenanwendung funktioniert es:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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. :wink:

Gruß
Tino
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Do 24.04.03 16:11 
Das funktionierte bereits unter TurboPascal.

_________________
Ist Zeit wirklich Geld?
ShadowCaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 312



BeitragVerfasst: 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! :wink: