Autor |
Beitrag |
ZSKing
      
Beiträge: 33
Win XP SP 2
Delphi 2005 PE, Delphi, Pascal, PHP, HTML
|
Verfasst: 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
      
Beiträge: 478
Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
|
Verfasst: 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). 
_________________ Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat
|
|
ZSKing 
      
Beiträge: 33
Win XP SP 2
Delphi 2005 PE, Delphi, Pascal, PHP, HTML
|
Verfasst: So 23.03.08 22:00
|
|
ZSKing 
      
Beiträge: 33
Win XP SP 2
Delphi 2005 PE, Delphi, Pascal, PHP, HTML
|
Verfasst: 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:
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:
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:
Delphi-Quelltext
Der komplette Code der Prozedur lautet:
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); responseStream := TFileStream(datei); IdHTTP1.Get('http://www.sascha-st.de/simple/HTMLUpdater.exe', responseStream); responseStream.free; 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:
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 public 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); responseStream := TFileStream(datei); IdHTTP1.Get('http://www.sascha-st.de/simple/HTMLUpdater.exe', responseStream); responseStream.free; 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:
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
      
Beiträge: 478
Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
|
Verfasst: Mo 24.03.08 22:46
Titel: Re: Neue Frage [Titel geändert]
ZSKing hat folgendes geschrieben: | 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); responseStream := TFileStream(datei); IdHTTP1.Get('http://www.sascha-st.de/simple/HTMLUpdater.exe', responseStream); responseStream.free; 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:
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
|
|
|