Delphi-PRAXiS

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 Datei öffnen (https://www.delphipraxis.net/58319-datei-oeffnen.html)

Headi 5. Dez 2005 15:30


Datei öffnen
 
Hallo leute,

Folgendes, Ich habe ein kleines Programm bei dem man per Klick
mit einem SaveDialog den inhalt von zwei Edit Feldern speichern kann.
Mit einem Klick auf einen OpenDialog kann man diese Datei dann wieder öffnen,
und die Daten werden wieder ins Edit Feld eingetragen.
Das funktioniert auch gut, nur wie mache ich das, wenn der Benutzer die gespeicherte
Datei in mein Programm zieht, über "öffnen mit" öffnet, oder doppelklick?
Bei "öffnen mit" wird mein Programm zwar geöffnet, aber es geschieht nichts.

Hier mein code:
Sry wenn das hier schon öfters gefragt wurde, aber ich konnte bisher noch nichts finden was mir geholfen hat.


Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, StdCtrls;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
var
    Ini: TIniFile;
begin
if SaveDialog1.Execute then begin
 Ini:=TIniFile.Create(SaveDialog1.FileName);
 Ini.WriteString('edtxt','name',edit1.Text);
 Ini.WriteString('edtxt','nick',edit2.Text);
 Ini.Free;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var   Ini: TIniFile;
begin
if OpenDialog1.Execute then begin
  Ini:=TIniFile.Create(OpenDialog1.FileName);
  Edit1.Text:=Ini.ReadString('edtxt','name','');
  Edit2.Text:=Ini.ReadString('edtxt','nick','');
  Ini.Free;
  end;
end;

end.
Ich hoffe ihr könnt mir helfen :thumb:

mfg headi

Rastaman 5. Dez 2005 15:36

Re: Datei öffnen
 
Beim Doppelklick wird der Dateiname der geklickten Datei als Parameter an deine exe übergeben.
Versuchs mal so:

On Create (oder OnShow :gruebel: )

Delphi-Quellcode:
var
  Ini: TIniFile;
begin
  ini := TIniFile.Create(ParamStr(0));
  Edit1.Text:=Ini.ReadString('edtxt','name','');
  Edit2.Text:=Ini.ReadString('edtxt','nick','');
  Ini.Free;
end;
Edit: Delphi Tags vergessen

ichbins 5. Dez 2005 16:12

Re: Datei öffnen
 
Das geht aber nur wenn im Dateinamen keine Leerzeichen angegeben werden.

Um den kompletten Parameter zu erhalten, musst du das so machen:
Delphi-Quellcode:
var
  i:integer;
  filename:string;
begin
  filename:='';
  i:=1;
  while paramstr(i)<>'' do
  begin
    filename:=filename+paramstr(i)+' ';
    i:=i+1;
  end;

robinWie 5. Dez 2005 16:14

Re: Datei öffnen
 
Ich habe mir mal ne Procedure geschrieben. Du musst noch oben bei uses "ShellApi" eintragen!

Delphi-Quellcode:
procedure TMainForm.ExecuteProgramm(const PFileName: string);
var
  SEInfo: TShellExecuteInfo;
  ExitCode: DWORD;
  ExecuteFile, ParamString, StartInString: string;
begin
  ExecuteFile:=PFileName;
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  with SEInfo do begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := Application.Handle;
    lpFile := PChar(ExecuteFile);
    nShow := SW_SHOWNORMAL;
  end;
  if ShellExecuteEx(@SEInfo) then begin
    repeat
      Application.ProcessMessages;
      GetExitCodeProcess(SEInfo.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE) or
      Application.Terminated;
  end
  else begin
  Application.MessageBox('Fehler beim Starten des Programms',
  'Programm Starten',
  mb_OK+mb_IconError);
  end;
end;

Headi 5. Dez 2005 16:29

Re: Datei öffnen
 
@Rastaman:

erst einmal danke, aber leider funktioniert das
weder bei "on create" noch bei "on show"!

Ich hab auch nochmals alles überprüft und es sollte so stimmen.
Aber irgendwie gehts halt einfach nicht :lol:

So hab jetzt alles wirklich nochmals durchgecheckt,
der Fehler bei deinem Code ist ganz einfach,
Es heisst:

Delphi-Quellcode:
ParamStr(1)
und nicht

Delphi-Quellcode:
ParamStr(0)
vielen dank!!

@Ichbins:

vielen dank, ich denke mal das ist genau das was ich gesucht habe!! :thumb:

@robinWie:

auch dir vielen dank!
Aber wo kommt da mein code dann hin?
Also was passieren soll damit?
Schau da bei deinem code irgendwie nicht so durch... :cry:


mfg headi

EDIT:
@ichbins:

Ich habe den code von Rastaman nochmals auf herz und nieren getested, und muss sagen,
der geht sowohl auch mit leerzeichen im dateinamen :P

Interessant wäre nur mal zu wissen wies geht wenn man die datei auf die Form zieht,
also während der laufzeit... :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:06 Uhr.

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