Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Allgemeine Pfadangabe unter Delphi (https://www.delphipraxis.net/83252-allgemeine-pfadangabe-unter-delphi.html)

Ykcim 29. Dez 2006 23:31


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. :?:

3_of_8 29. Dez 2006 23:40

Re: Allgemeine Pfadangabe unter Delphi
 
Also den Pfad deiner Anwendung holst du dir mit ExtractFilePath(ParamStr(0)). ;)

Ykcim 30. Dez 2006 00:10

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:
procedure TVolumensberechnung.KoerperChange(Sender: TObject);
begin
if Koerper.Items.Strings[Koerper.ItemIndex]='Zylinder' then
Image1.Picture.LoadFromFile('.\images\ZylinderNEU.bmp')
else
.
.
.
Vielen Dank

EDatabaseError 30. Dez 2006 00:13

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 ?!?

Ykcim 30. Dez 2006 00:22

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:
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;
Aber an dieser Stelle nochmal: Ich bin ein Newby und vielleicht nur zu doof die Antwort zu verstehen!

Vielen Dank

EDatabaseError 30. Dez 2006 00:25

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

Ykcim 30. Dez 2006 00:32

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

EDatabaseError 30. Dez 2006 00:33

Re: Allgemeine Pfadangabe unter Delphi
 
Zitat:

Zitat von Ykcim
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

schau dich hier ein bisschen im forum um da wirst du alles was nötig ist finden... ;-)

Ykcim 30. Dez 2006 00:48

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:
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;
Vielen Dank für die Hilfe.

Ykcim

Christian Seehase 30. Dez 2006 01:14

Re: Allgemeine Pfadangabe unter Delphi
 
Moin Ykcim,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Zitat:

Zitat von Ykcim
dass es einfacher ginge, so, wie ich es oben mit den Images gemacht habe.

mit dem relativen Pfad ('.\images\ZylinderNEU.bmp') hast Du aber einen sehr gefährlichen Weg beschritten, denn dieser wird relativ zum Arbeitsverzeichnis gesehen.
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.
Seite 1 von 2  1 2      

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