| Autor |
Beitrag |
Thunderwave
      
Beiträge: 35
|
Verfasst: Mo 29.05.06 12:34
Also: Ich habe ein Programm geschrieben, das eine tabelle als record abspeichert. Der abgespeicherten Datei habe ich einem eigenen dateityp zugewiesen (*.fid). In windows habe ich jetzt eingestellt, das er diesen Dateityp immer mit meinem Programm öffnet. Das problem ist nun, das er zwar mein Programm öffnet, wenn ich auf die datei doppelklicke, aber meine datei nicht im Programm geöffnet wird.
Wie kann ich das machen?
|
|
digi_c
      
Beiträge: 1905
W98, XP
D7 PE, Lazarus, WinAVR
|
Verfasst: Mo 29.05.06 12:50
Der/Die Dateinamen werden dir als Aufrufparameter übergeben. Genauso als wenn du in der Eingabeaufforderung "meinprogramm.exe C:\test.fid" ausführen würdest.
Um an diese ranzukommen benötigst du ParamStr(n) und PramCount. ParamStr(0) enthält aber immer den Pfad zu deinem Programm, also müsstest du mit 1 anfangen.
|
|
fidionael
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: Mo 29.05.06 12:50
Wenn Windows eine Datei mit deinem Programm öffnen will, startet es einfach dein Programm und übergibt als Parameter den entsprechenden Dateinamen.
Es ist also deine Aufgabe diesen Parameter abzufangen und zu verarbeiten. Parameter auslesen kannst du wie folgt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| var i: Integer;
if ParamCount > 0 then for i:=1 to ParamCount do case ParamStr(i) of '/?': MessageBox(Handle,'Hilfe wurde als Parameter übergeben!', pChar(Caption),MB_ICONINFORMATION); end; |
Hoffe das hilft dir.
//Edit: Da war digi_c wohl schneller 
|
|
Thunderwave 
      
Beiträge: 35
|
Verfasst: Mo 29.05.06 13:07
ohweih... ich checks net...
also wenn ich das richtig verstanden habe:
wenn ich doppelklick auf die datei mache, dann wird das Programm geöffnet und die parameter der datei werden an das programm gegeben. Und mein problem ist jetzt also das das programm nicht weiß was es mit den parametern anfangen soll. Richtig?
Nun zum code: was muss an die stelle '/?'?
Und wo landet dann mein record?
|
|
fidionael
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: Mo 29.05.06 13:38
Ich mach es mal mit einer Beispielanwendung. Zur Vereinfachung mit einer Textdatei und ich horche auch nur den ersten Parameter ab, es funktioniert aber mit deinem Record und mehreren Dateien genau so:
Delphi-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:
| function TForm1.OpenMyFile(Filename: String) : Boolean; var f: Textfile; line: String; begin Result:=True; if not FileExists(Filename) then Result:=False else begin AssignFile(f,Filename); {$I-} Reset(f); {$I+} if ioResult <> 0 then Result:=False else while not eof(f) do begin Readln(f,line); Memo1.Lines.Add(line); end; CloseFile(f); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin if ParamCount > 0 then if not OpenMyFile(ParamStr(1)) then begin MessageBox(Handle,'Es ist ein Fehler beim Öffnen der Datei aufgetreten!', pChar(Caption),MB_ICONERROR); Application.Terminate; end; end; |
|
|
Thunderwave 
      
Beiträge: 35
|
Verfasst: Mo 29.05.06 13:52
das gefällt ihm nicht
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| [Fehler] Unit1.pas(26): Undefinierter Bezeichner: 'OpenMyFile' [Fehler] Unit1.pas(30): Undefinierter Bezeichner: 'Result' [Fehler] Unit1.pas(31): Undefinierter Bezeichner: 'Filename' [Fehler] Unit1.pas(34): Inkompatible Typen [Fehler] Unit1.pas(51): Undefinierter Bezeichner: 'OpenMyFile' [Fataler Fehler] Project2.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden |
ich will erstmal genau dein programm schreiben, dann kann ichs ja abwandeln, wenn ichs verstanden hab. Ich hab jetzt also ne memo in dem programm, was brauch ich noch?
|
|
fidionael
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: Mo 29.05.06 14:04
Ich habe in mein Formular an Komponenten nur ein Memo-Feld eingefügt.
Dann habe ich per Hand im Private-Bereich meines Formulars die Funktion OpenMyFile(Filename: String) mit dem Rückgabewert Boolean deklariert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| type TForm1 = class(TForm) Memo1: TMemo; private function OpenMyFile(Filename: String) : Boolean; public end; |
Die Funktion OpenMyFile siehst du dann ja oben.
Dann mache ich im Object Manager meines Formulars einen Doppelklick auf das OnCreate-Event und lasse ihn dort, wenn ein Parameter existiert, die Funktion aufrufen. Gibt die Funktion den Wert False zurück, ist irgendetwas schief gegangen, dann geben wir eine Fehlermeldung raus.
Die Prozedur FormCreate ist oben auch angegeben.
Mfg
|
|
Thunderwave 
      
Beiträge: 35
|
Verfasst: Mo 29.05.06 14:29
THX! das funktioniert! es sollte jetzt nicht mehr so schwer sein das auf mein programm anzuwenden...(hoffe ich)^^
|
|
Thunderwave 
      
Beiträge: 35
|
Verfasst: Mo 29.05.06 15:26
also an sich funktionierts jetzt super, aber wenn ich nach dem öffnen weiter in den Record schreiben will, kommt eine fehlermeldung. nach längerer untersuchung hab ich dann rausgefunden, das es an der variablen 'f' liegt.
Die frage is nur warum und wie kann ich das ändern?
|
|
fidionael
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: Mo 29.05.06 19:58
Öhm das ist ein bisschen vage um dir zu helfen, ich würde einfach mal grob mutmaßen, dass du vielleicht f immer noch als Textfile deklariert hast, wenn du deinen Record allerdings als typisierte Datei abgespeichert hast, musst du sie natürlich auch als solche wieder laden
Delphi-Quelltext 1:
| var f: File of Irgendwas |
Ansonsten hilft es bestimmt, wenn du etwas deiner Source offen legst
//Edit: Das Lesen von typisierten funktioniert natürlich auch nicht via Readln (das ist ja Textfile-spezifisch) sondern dann über Read...
|
|