Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Öffnen mit... (https://www.delphipraxis.net/57636-oeffnen-mit.html)

robinWie 24. Nov 2005 13:31


Ö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

dataspider 24. Nov 2005 13:36

Re: Öffnen mit...
 
Es sollte eigentlich reichen, wenn man den ParamStr auswertet.
Hab es aber nicht probiert.
In etwa:
Delphi-Quellcode:
if ParamCount > 1 then
  if FileExists(ParamStr(1) then
    OpenFile(ParamStr(1));
Frank

Matze 24. Nov 2005 13:41

Re: Öffnen mit...
 
Ergänzend dazu: Manchmal geht es dennoch nicht, fragt mich aber nicht wieso.

robinWie 24. Nov 2005 13:43

Re: Öffnen mit...
 
Ne funzt nicht. :cry: Es kommt zwar keine Fehlermeldung, aber passieren tut auch nichts

igel457 24. Nov 2005 13:49

Re: Öffnen mit...
 
Bei einem leerzeichen werden die weitere Parameter hinzugefügt. Du musst es also so machen:

Delphi-Quellcode:
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;
mit dem "for i := 1..." bin ich mir nicht so sicher, könnte auch sein das du 0 schreiben musst.

dataspider 24. Nov 2005 14:11

Re: Öffnen mit...
 
Wenn du im OnCreate des MainForms reinschreibst:
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  if ParamCount > 1 then
    ShowMessage(ParamStr(1));
end;
Zeigt er dann was an?
Frank

robinWie 24. Nov 2005 14:18

Re: Öffnen mit...
 
Zitat:

Wenn du im OnCreate des MainForms reinschreibst:
[...]
Zeigt er dann was an?
Frank
Nein, nix wir angezeigt.

ich habe dan mal das vom "IGEL" mit 1 und O bei "FormCreate" ausprobiert
Delphi-Quellcode:
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;
funzt aber nicht.

dataspider 24. Nov 2005 14:26

Re: Öffnen mit...
 
Folgendes Beispiel funktioniert bei mir (Form mit einem TRichEdit...
Delphi-Quellcode:
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.
Ich hatte das mit ParamCount verhauen. ParamStr(0) ist zwar der Exename, aber ParamCount zählt den nicht mit.
Frank

robinWie 24. Nov 2005 14:54

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;

dataspider 24. Nov 2005 15:14

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:
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.
Cu, Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 Uhr.
Seite 1 von 2  1 2      

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