![]() |
Allgemeine Pfadangabe unter Delphi
Hallo Zusammen,
um es gleich zu zugeben: Ich bin ein Newby und habe gleich zwei Probleme: Ich habe ein Berechnungsprogramm geschrieben, mit dem man das Volumen einer Schraube berechnen kann. Das ganze erfordert einen ordentlichen Bericht. Dazu habe ich folgendes Code verwendet, damit ein neues Dokument in Word nach Volage einer Word-Dokumentenvorlage erstellt wird. Die Datenübergabe ist noch nicht implementiert. procedure TForm1.BerichtNeuClick(Sender: TObject); var Template: OleVariant; begin Template:=('D:\Main.dot'); if wordapplication1.Visible=true then WordDocument1.ConnectTo(WordApplication1.ActiveDoc ument) else wordapplication1.Connect; wordapplication1.Visible:=true; wordapplication1.Documents.Add(Template,EmptyParam ,EmptyParam,EmptyParam); end; Nun zu meinen Problemen: 1. Ich möchte den Dateipfad allgemein gestalten. Das heißt, die Template Datei wird im selben Ordner wie die exe Datei sein, vielleicht in einem Unterordner. Ich habe es in einem anderen Programm mit folgendem Code erreicht: ".\Unterordner\Datei.dat" Das funktioniert aber leider in dem oben beschrieben Code nicht. 2. Wenn die ButtonClick Prozedur das erste Mal ausgeführt, klappt alles wunderbar. Schließe ich Word dann und klicke nocheinmal auf den Button, bricht alles ab mit der Info, Dieser Befehl sei nicht verfügbar, weil keine Dokument geöffnet sei... Könnt ihr mir helfen? Vielen Dank schon mal. :?: |
Re: Allgemeine Pfadangabe unter Delphi
Also den Pfad deiner Anwendung holst du dir mit ExtractFilePath(ParamStr(0)). ;)
|
Re: Allgemeine Pfadangabe unter Delphi
Hallo 3_of_8
erst einmal danke für Deine schnelle Antwort. Aber ich glaube, dass sie nicht zu meinem Problem passt, daher versuche ich es verständlicher zu erklären. Wenn Das Programm fertig ist, dann soll es weitergegeben werden. Und da ich nicht weiß, wo der Anwender es dann speichert, weiß ich auch nicht den Pfad der Main.dot und kann ihn somit nicht im Programm hinterlegen. Also möchte ich ihn allgemein gestalten, wie zum Beispiel: Die Datei ist im gleichen Verzeichnis wie die Programm exe Datei meines Programms. So habe ich es in einem anderen Programm gemacht, in dem Zeichnungen angezeigt werden, die in dem gleichen Ordner wie meine exe Datei ist - im Unterordner Images:
Delphi-Quellcode:
Vielen Dank
procedure TVolumensberechnung.KoerperChange(Sender: TObject);
begin if Koerper.Items.Strings[Koerper.ItemIndex]='Zylinder' then Image1.Picture.LoadFromFile('.\images\ZylinderNEU.bmp') else . . . |
Re: Allgemeine Pfadangabe unter Delphi
Ich verstehe dein Problem immer noch nicht ;-) das was 3_of_8 gesagt hat liefert dir doch den Pfad in dem deine Exe liegt was brauchst du denn noch ?!?
|
Re: Allgemeine Pfadangabe unter Delphi
Hi,
vielleicht bin ich auch nur zu doof es zu verstehen. Wenn ich DIr mein Programm geben würde, dann würde ich die Datei Main.dot in dem Progammordner speichern. z.B.: C:\Programme\Test Die Pfadangabe im Programmcode für die Main.dot wäre also: C:\Programme\Tets\Main.dot Wenn Du das Programm aber woanders speicherst z.B.: D:\Anwendungen\Test dann funktioniert mein Programm ja nicht mehr, denn die Pfadangabe müsste lauten D:\Anwendungen\Test\Main.dot Und deshalb kann ich den Dateipfad nicht so angeben. Habe hier mal den kompletten Code der Procedure kopiert...
Delphi-Quellcode:
Aber an dieser Stelle nochmal: Ich bin ein Newby und vielleicht nur zu doof die Antwort zu verstehen!
procedure TForm1.BerichtNeuClick(Sender: TObject);
var Template: OleVariant; begin Template:=('D:\Privat\Software Entwicklung\Main.dot'); if wordapplication1.Visible=true then WordDocument1.ConnectTo(WordApplication1.ActiveDocument) else wordapplication1.Connect; wordapplication1.Visible:=true; wordapplication1.Documents.Add(Template,EmptyParam,EmptyParam,EmptyParam); end; Vielen Dank |
Re: Allgemeine Pfadangabe unter Delphi
ahh...
du müsstest den pfad der Main.dot z.b. in der Registry speichern und eben einmal zuweisen - sobald dein Programm sie nicht mehr findet sagst du dem benutzer das er (via Opendialog) den Pfad der Main.dot angeben soll - dann speicherst du ihn wieder und hast ihn so als variable |
Re: Allgemeine Pfadangabe unter Delphi
Danke für die Antwort! Aber bis ich die verstanden habe, muss ich mich erst mal drei Tage mit dem, was dafür nötig beschäftigen...
Ich hatte gehofft, dass es einfacher ginge, so, wie ich es oben mit den Images gemacht habe. Da hatte ich das gleiche Problem und habe es mit ./ in den Griff bekommen, dass das Programm im eigenen Ordner die Datei sucht... Gibt es soetwas nicht auch für andere Pfads. Habe die Procedur meiner vorherigen Antwort noch zugefügt. Danke |
Re: Allgemeine Pfadangabe unter Delphi
Zitat:
|
Re: Allgemeine Pfadangabe unter Delphi
Okay, okay, ich habe es geschnallt... :wall:
Ich hätte doch mal 5 Minuten länger über die Antwort von 3_of_8 nachdenken sollen. Hier die Lösung:
Delphi-Quellcode:
Vielen Dank für die Hilfe.
procedure TForm1.BerichtNeuClick(Sender: TObject);
var Template: OleVariant; Pfad:string; begin Pfad:=ExtractFilePath(ParamStr(0)); Template:=(Pfad+'Main.dot'); if wordapplication1.Visible=true then WordDocument1.ConnectTo(WordApplication1.ActiveDocument) else wordapplication1.Connect; wordapplication1.Visible:=true; wordapplication1.Documents.Add(Template,EmptyParam,EmptyParam,EmptyParam); end; Ykcim |
Re: Allgemeine Pfadangabe unter Delphi
Moin Ykcim,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS. Zitat:
Legt sich jemand einen Link an, und gibt dort ein anderes Arbeitsverzeichnis an, würde die Datei nicht mehr gefunden werden. In diesem Falle könnte man sagen: Prima, dann kann man durch ein anderes Arbeitsverzeichnis verschiedenen Sätze von Daten verwenden. Leider kann sich das Arbeitsverzeichnis aber auch durch die Verwendung von Open-/Savedialogen ändern, was bei der Verwendung von relativen Pfaden zu recht "interessanten" (;-)) Ergebnissen führen kann. Sobald also die Gefahr besteht, dass sich das Arbeitsverzeichnis während des Programmlaufes ändert, sollte man auf relative Pfad verzichten. (Und da das auch im Nachhinein durch eine Programmänderung geschehen kann, würde ich prinzipiell auf relative Pfade verzichten) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 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-2025 by Thomas Breitkreuz