![]() |
Öffnen mit...
Hi,
Ich progge gerade einen Rich-Text Editor. Aber wenn ich bei rtf-Dateien einstelle das sie mit meiem Programm geöffnet werden sollen, funzt das nicht. Meine Frage: Hat einer ne Ahnung wie man das Programmieren muss damit das geht? Danke im Voraus |
Re: Öffnen mit...
Es sollte eigentlich reichen, wenn man den ParamStr auswertet.
Hab es aber nicht probiert. In etwa:
Delphi-Quellcode:
Frank
if ParamCount > 1 then
if FileExists(ParamStr(1) then OpenFile(ParamStr(1)); |
Re: Öffnen mit...
Ergänzend dazu: Manchmal geht es dennoch nicht, fragt mich aber nicht wieso.
|
Re: Öffnen mit...
Ne funzt nicht. :cry: Es kommt zwar keine Fehlermeldung, aber passieren tut auch nichts
|
Re: Öffnen mit...
Bei einem leerzeichen werden die weitere Parameter hinzugefügt. Du musst es also so machen:
Delphi-Quellcode:
mit dem "for i := 1..." bin ich mir nicht so sicher, könnte auch sein das du 0 schreiben musst.
procedure Form1OnCreate(sender:TObject);
var i:integer; s:string; begin if ParamCount > 1 then begin for i := 1 to paramcount-1 do s := s + paramsstr(i) if FileExists(s) then OpenFile(s); end; end; |
Re: Öffnen mit...
Wenn du im OnCreate des MainForms reinschreibst:
Delphi-Quellcode:
Zeigt er dann was an?
procedure TMainForm.FormCreate(Sender: TObject);
begin if ParamCount > 1 then ShowMessage(ParamStr(1)); end; Frank |
Re: Öffnen mit...
Zitat:
ich habe dan mal das vom "IGEL" mit 1 und O bei "FormCreate" ausprobiert
Delphi-Quellcode:
funzt aber nicht.
var i:integer;
s:string; begin if ParamCount > 1 then begin for i := 0 to paramcount-1 do s := s + ParamStr(i); if FileExists(s) then FileOpen(s); //Einge Procedure um Dateien zu öffen end; end; |
Re: Öffnen mit...
Folgendes Beispiel funktioniert bei mir (Form mit einem TRichEdit...
Delphi-Quellcode:
Ich hatte das mit ParamCount verhauen. ParamStr(0) ist zwar der Exename, aber ParamCount zählt den nicht mit.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TFRMMain = class(TForm) EDTRtf: TRichEdit; private { Private-Deklarationen } public procedure AfterConstruction; override; { Public-Deklarationen } end; var FRMMain: TFRMMain; implementation {$R *.dfm} procedure TFRMMain.AfterConstruction; begin inherited; // ShowMessage(IntToStr(ParamCount)); if ParamCount > 0 then if FileExists(ParamStr(1)) then if UpperCase(ExtractFileExt(ParamStr(1))) = '.RTF' then EDTRtf.Lines.LoadFromFile(ParamStr(1)); end; end. Frank |
Re: Öffnen mit...
Es passiert was! Leider nich das was passieren soll. Ich erhalte die Fehlermeldung:
Die Ausnahme "Unbekannter Softwarefehler" 0x0eedfade ist in der Anwendung an der Stelle 0x7c81eb33 aufgetreten. Ich schreibe den Editor dals MDI-Anwendung, demnach habe ich deien Code so modifizierd:
Delphi-Quellcode:
procedure TMainForm.AfterConstruction;
begin inherited; // ShowMessage(IntToStr(ParamCount)); with TTextForm.Create(Self) do begin //MID Formular if ParamCount > 0 then if FileExists(ParamStr(1)) then if UpperCase(ExtractFileExt(ParamStr(1))) = '.RTF' then Editor.Lines.LoadFromFile(ParamStr(1)); end; end; |
Re: Öffnen mit...
Bei MDI kann in AfterConstruction kein Form geöffnet werden.
Ich hab es mal im onIdle der App untergebracht, da hier auf jeden Fall das MainForm vollständig erzeugt ist.
Delphi-Quellcode:
Cu, Frank
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, AppEvnts; type TFRMMain = class(TForm) procedure doAppIdle(Sender: TObject; var Done: Boolean); private procedure OpenParamFile; { Private-Deklarationen } public procedure AfterConstruction; override; { Public-Deklarationen } end; var FRMMain: TFRMMain; implementation uses FRMText; {$R *.dfm} procedure TFRMMain.AfterConstruction; begin inherited; Application.OnIdle := doAppIdle; end; procedure TFRMMain.OpenParamFile; Var f : TTextForm; begin if ParamCount > 0 then if FileExists(ParamStr(1)) then if UpperCase(ExtractFileExt(ParamStr(1))) = '.RTF' then begin f := TTextForm.Create(Self); f.Editor.Lines.LoadFromFile(ParamStr(1)); f.Show; end; end; procedure TFRMMain.doAppIdle(Sender: TObject; var Done: Boolean); begin Application.OnIdle := nil; OpenParamFile; end; end. |
Re: Öffnen mit...
bzw. für mehrere Dateien:
Delphi-Quellcode:
Frank
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, AppEvnts; type TFRMMain = class(TForm) ApplicationEvents1: TApplicationEvents; procedure doAppIdle(Sender: TObject; var Done: Boolean); private procedure OpenRTFFile(const AFileName: String); { Private-Deklarationen } public procedure AfterConstruction; override; { Public-Deklarationen } end; var FRMMain: TFRMMain; implementation uses FRMText; {$R *.dfm} procedure TFRMMain.AfterConstruction; begin inherited; Application.OnIdle := doAppIdle; end; procedure TFRMMain.OpenRTFFile(const AFileName: String); Var f : TTextForm; begin f := TTextForm.Create(Self); f.Editor.Lines.LoadFromFile(AFileName); f.Show; end; procedure TFRMMain.doAppIdle(Sender: TObject; var Done: Boolean); Var i : Integer; begin Application.OnIdle := nil; for i := 1 to ParamCount do if FileExists(ParamStr(i)) then if UpperCase(ExtractFileExt(ParamStr(i))) = '.RTF' then OpenRTFFile(ParamStr(i)); end; end. |
Re: Öffnen mit...
ES KLAPPT :hello:
Jetzt muss ich nur noch das Problem beheben das die Datei so ca. 475 mal geöffnet wird und gut! |
Re: Öffnen mit...
du hast auch ganz sicher das
Application.OnIdle := nil; in der Methode doAppIdle stehen??? Frank |
Re: Öffnen mit...
Ja hab' ich. Was kommt den da hin. Ich habe mich mit den ParamStr noch nie befasst.
|
Re: Öffnen mit...
Also, wenn du das mit den 400 mal Öffnen der Datei nicht findest, poste mal deinen Code.
Das darf ... kann eigentlich nicht sein. Die Funktion ParamStr(Index): String; liefert dir die an deine Exe übergebenen Parameter. Wenn also der Aufruf etwa so erfolgt: MyRTFEditor Hallo Ballo ...liefert ParamStr(1) Hallo und ParamStr(2) Ballo. ParamCount ist 2. ParamStr(0) ist immer der Exename mit komplettem Pfad bei WindowsApps. Ich nutze das Ereignis OnIdle der Applikation als Startzeitpunkt, weil hier mit Sicherheit das MainForm komplett gezeichet ist. Ein besserer Zeitpunkt fällt mir nicht ein. Damit nur einmal das Öffnen der TextForms erfolgt, setze ich in der Methode den Zeiger von Application.OnIdle wieder auf nil (damit eben nicht die Datei 400 mal aufgemacht wird). Wie gesagt, ich kann mir nicht vorstellen, dass es nicht funzt. Gruß, Frank |
Re: Öffnen mit...
@ dataspider: hab die den Code als pn gepostet.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz