Autor Beitrag
ZSKing
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

Win XP SP 2
Delphi 2005 PE, Delphi, Pascal, PHP, HTML
BeitragVerfasst: So 23.03.08 21:54 
Moin Moin!
Ich habe einen gaaanz einfach HTML-Editor geschrieben und am Anfang wird ein HTML-Standard-Code aus einer *.txt-Datei geladen. Nun habe ich das Problem, dass bei einem Start über eine Verknüpfung nur auf dem Desktop (oder wo die Verknüpfung auch immer liegt) nach der *.txt-Datei gesucht wird... Natürlich könnte man ja einfach schreiben, dass C:\Programme\ .... verwendet werden soll, aber die Volumenbezeichnung kann ja von Anwender zu Anwender verschieden sein und das Installations-Verzeichnis kann man auch ändern.

Ich brauche also irgend etwas, das meinem Editor sagt wo die .exe liegt, damit er an der richtigen Stelle nach der Datei sucht! :) Wäre super wenn ihr mir weiterhelfen könntet!


ZSKing


Zuletzt bearbeitet von ZSKing am Mo 24.03.08 17:48, insgesamt 1-mal bearbeitet
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: So 23.03.08 21:58 
Moin!

Dafür gibts Application.ExeName oder ParamStr(0). Für den Pfad verwendest du einfach ExtractFilePath(Application.ExeName). :wink:

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
ZSKing Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

Win XP SP 2
Delphi 2005 PE, Delphi, Pascal, PHP, HTML
BeitragVerfasst: So 23.03.08 22:00 
thx
ZSKing Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33

Win XP SP 2
Delphi 2005 PE, Delphi, Pascal, PHP, HTML
BeitragVerfasst: Mo 24.03.08 20:12 
Titel: Neue Frage [Titel geändert]
Also die Fragestellung aus dem ersten Post habe ich wie folgt:

Nach der Erstellung einer String-Variable mit dem Namen Pfad ff. Code:
ausblenden Delphi-Quelltext
1:
2:
pfad := ExtractFilePath(Application.ExeName);
Memo1.Lines.LoadFromFile(pfad+'Start.txt');


------------------------------------------------------------------------------------------------------------------

So und jetzt ein neues Problem. Ich bekomme bei einem anderen Teil meines Programms folgende Fehlermeldung beim Compilieren:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt HTMLsimple.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 004188A7 in Modul 'HTMLsimple.exe'. Lesen von Adresse 445C3A5B' aufgetreten.
---------------------------
Anhalten   Fortsetzen   Hilfe   
---------------------------



Bei Anhalten wird folgender Code hervorgehoben:
ausblenden Delphi-Quelltext
1:
responseStream.free;					



Der komplette Code der Prozedur lautet:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure Tsimpleupdater.FormCreate(Sender: TObject);
var responseStream: TFileStream;
begin
datei := ExtractFilePath(Application.ExeName)+'HTMLUpdater.exe';
dateichar := PChar(datei);
//Download Updater Anfang
responseStream := TFileStream(datei);
IdHTTP1.Get('http://www.sascha-st.de/simple/HTMLUpdater.exe', responseStream);
responseStream.free;
//Download Updater Anfang Ende
ShellExecute(Application.Handle,'open',dateichar,nil,nil,SW_SHOW);
mainform.close;
end;



Ich denke mehr Code wird nicht benötigt, aber zur Sicherheit der komplette Code:
ausblenden volle Höhe 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:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
unit Updater;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, IdBaseComponent, IdComponent,
   IdTCPClient, IdHTTP, Shellapi, IdTCPConnection, ComCtrls;

type
  Tsimpleupdater = class(TForm)
    IdHTTP1: TIdHTTP;
    Memo1: TMemo;
    StatusBar1: TStatusBar;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  simpleupdater: Tsimpleupdater; datei: string; dateichar: Pchar;

implementation

uses Main;

{$R *.dfm}


procedure Tsimpleupdater.FormCreate(Sender: TObject);
var responseStream: TFileStream;
begin
datei := ExtractFilePath(Application.ExeName)+'HTMLUpdater.exe';
dateichar := PChar(datei);
//Download Updater Anfang
responseStream := TFileStream(datei);
IdHTTP1.Get('http://www.sascha-st.de/simple/HTMLUpdater.exe', responseStream);
responseStream.free;
//Download Updater Anfang Ende
ShellExecute(Application.Handle,'open',dateichar,nil,nil,SW_SHOW);
mainform.close;
end;

END.




Ich hoffe ihr könnt helfen die Fehlermeldung zu beheben!
ZSKing


PS:
Sollte man bei der Fehlermeldung der Compilierung auf Fortsetzen klicken, kommt eine Programm-Fehlermeldung:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
---------------------------
HTML simple // Pre-Alpha
---------------------------
Zugriffsverletzung bei Adresse 004188A7 in Modul 'HTMLsimple.exe'. Lesen von Adresse 445C3A5B.
---------------------------
OK   
---------------------------
Silas
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Mo 24.03.08 22:46 
Titel: Re: Neue Frage [Titel geändert]
user profile iconZSKing hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure Tsimpleupdater.FormCreate(Sender: TObject);
var responseStream: TFileStream;
begin
datei := ExtractFilePath(Application.ExeName)+'HTMLUpdater.exe';
dateichar := PChar(datei);
//Download Updater Anfang
responseStream := TFileStream(datei);
IdHTTP1.Get('http://www.sascha-st.de/simple/HTMLUpdater.exe', responseStream);
responseStream.free;
//Download Updater Anfang Ende
ShellExecute(Application.Handle,'open',dateichar,nil,nil,SW_SHOW);
mainform.close;
end;

An der markierten Stelle castest du einen String in eine Klasse. Das kann nicht funktionieren (wundert mich, dass sich hier der Compiler gar nicht beschwert). Was du eigentlich haben wolltest, ist denke ich ein Konstruktor. Der hätte hier folgendermaßen auszusehen:
ausblenden Delphi-Quelltext
1:
responseStream := TFileStream.Create(datei, fmOpenWrite or fmShareDenyRead or fmShareDenyWrite);					

fmOpenWrite öffnet die Datei zum Schreiben, und fmShareDenyRead or fmShareDenyWrite verbietet gemeinsamen Zugriff auf die Datei. Je nach dem, wie weit du diesen erlauben möchtest, kannst du einen oder beide Werte weglassen.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)