Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Reload (https://www.delphipraxis.net/136044-reload.html)

Mithrandir 22. Jun 2009 20:12

Re: Reload
 
@himi: Bei Turbo Delphi ist das schon der Fall. Dort kann ich mir auch die Erklärungen der WinAPI - Funktionen ansehen, natürlich in Englisch. ;)

Fussel9 22. Jun 2009 20:12

Re: Reload
 
...Ich habe leider nur Delphi 2006 (auch als TurboDelphi bekannt)

aber mein Fachspezifisches English ist nicht sehr gut... ;)

mkinzler 22. Jun 2009 20:13

Re: Reload
 
Zitat:

Zitat von Fussel9
...Ich habe leider nur Delphi 2006 (auch als TurboDelphi bekannt)

Dort sollte es aber dabei sein

Fussel9 22. Jun 2009 20:20

Re: Reload
 
Zitat:

Zudem ist es gefährlich einen relativen datenpfad (zum Arbeitsverzeichnis != Anwendungsverzeichnis) zu verwenden
Was zur Hölle habt ihr gegen relative Pfadangaben???

mit ''.\'' sag ich Delphi das sich die Datei in dem Ordner befindet in dem die exe ist...

und mit ''.\Save\Save.ini'' ,dass sich die Datei im von der exe gesehen in einem Unterordner namens Save befindet und das die datei Save.ini heißt...

WO Soll DA DIE GEFAHR SEIN??? :gruebel:

Popov 22. Jun 2009 20:21

Re: Reload
 
Zitat:

Zitat von himitsu
nur noch mal kurz zum Hier im Forum suchenShellExecute und da es eine WinAPI ist, noch MSDN-Library durchsuchenShellExecute

oder einfach mal Strg+Shift+F Verzeichnis "C:\Programme\CodeGear\" und Suchwort "ShellExecute"

Bei solchen Tipps sollte man immer vorsichtig sein, denn bei vielen Begriffen bestehen die meisten Treffer wirklich nur aus der Empfehlung die Suche zu bemühen. Denn ob ein Beispiel oder die Empfehlung Hier im Forum suchenShellExecute, für die Suche sind es beides Treffer. Ok, heute hätte er Glück gehabt, aber nicht selten muß man erst paar Seiten 50 Seiten durchgehen bis man was vernünftiges findet.

Und auch mit MSDN-Library durchsuchenShellExecute kann nicht jeder etwas anfangen, vor allen Anfänger nicht. Das

Code:
HINSTANCE ShellExecute(     
    HWND hwnd,
    LPCTSTR lpOperation,
    LPCTSTR lpFile,
    LPCTSTR lpParameters,
    LPCTSTR lpDirectory,
    INT nShowCmd
);
muß man als Anfänger auch verstehen.

DeddyH 22. Jun 2009 20:21

Re: Reload
 
Zitat:

mit ''.\'' sag ich Delphi das sich die Datei in dem Ordner befindet in dem die exe ist...
Falsch! '.' bezeichnet den aktuellen Pfad, das muss nicht der sein, in dem das Programm liegt.

[edit] Vertippsler [/edit]

[edit2]
Zitat:

Zitat von Popov
Und auch mit MSDN-Library durchsuchenShellExecute kann nicht jeder etwas anfangen, vor allen Anfänger nicht. Das

Code:
HINSTANCE ShellExecute(     
    HWND hwnd,
    LPCTSTR lpOperation,
    LPCTSTR lpFile,
    LPCTSTR lpParameters,
    LPCTSTR lpDirectory,
    INT nShowCmd
);
muß man als Anfänger auch verstehen.

Direkt eine Zeile tiefer werden sämtliche Parameter erklärt, man muss auch mal bis zum Ende lesen ;) [/edit2]

Mithrandir 22. Jun 2009 20:24

Re: Reload
 
Zitat:

WO Soll DA DIE GEFAHR SEIN???
Naja,

während dein Programm läuft, kann sich, durch ein anderes Programm, das aktuelle Arbeitsverzeichnis ändern. Nix anderes macht man nämlich mit relativen Pfadangaben: Man schreibt ins aktuelle Arbeitsverzeichnis. Im Regelfall ist dass das der Anwendung, u.U. ist das aber auch ein völlig anderes.

Deswegen ist

Delphi-Quellcode:
IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'irgendeine.datei'
die beste Lösung, wenn du was ins eigene Verzeichnis packen willst. Wenn du nur den Pfad zur Exe brauchst, dann steht der komplett in ParamStr(0). ;)

Fussel9 22. Jun 2009 20:25

Re: Reload
 
Zitat:

Das

Code: markieren
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);


muß man als Anfänger auch verstehen.
Das war ja wohl ein ganz schlechter Scherz oder?

mkinzler 22. Jun 2009 20:27

Re: Reload
 
Zitat:

während dein Programm läuft, kann sich, durch ein anderes Programm, das aktuelle Arbeitsverzeichnis ändern.
Noch schlimmer, er kann schon bei Programmstart anders sein, z.B. beim Aufruf in einer Verknüpfung mit abweichenden Pfad

DeddyH 22. Jun 2009 20:28

Re: Reload
 
Zitat:

Zitat von Daniel G
während dein Programm läuft, kann sich, durch ein anderes Programm, das aktuelle Arbeitsverzeichnis ändern.

Ist noch nicht einmal nötig. Wenn man das Programm z.B. aus einer Batchdatei heraus startet, ist es bereits ein Unterschied, ob erst zum Programmpfad gewechselt oder direkt das Programm mit komplettem Pfad aufgerufen wird.

Mithrandir 22. Jun 2009 20:28

Re: Reload
 
Zitat:

Zitat von Fussel9
Das war ja wohl ein ganz schlechter Scherz oder?

Ich denke, das war genau anders gemeint. ;)

Fussel9 22. Jun 2009 20:29

Re: Reload
 
Zitat:

Naja,

während dein Programm läuft, kann sich, durch ein anderes Programm, das aktuelle Arbeitsverzeichnis ändern. Nix anderes macht man nämlich mit relativen Pfadangaben: Man schreibt ins aktuelle Arbeitsverzeichnis. Im Regelfall ist dass das der Anwendung, u.U. ist das aber auch ein völlig anderes.

Deswegen ist

Delphi-Quellcode: markieren
IncludeTrailingPathDelimiter(ExtractFilePath(Param Str(0))) + 'irgendeine.datei'


die beste Lösung, wenn du was ins eigene Verzeichnis packen willst. Wenn du nur den Pfad zur Exe brauchst, dann steht der komplett in ParamStr(0). Wink
Sorry, aber das hab ich jetzt nicht ganz verstanden...

Fussel9 22. Jun 2009 20:30

Re: Reload
 
Was zur Hölle ist eine Batch-Datei?

Mithrandir 22. Jun 2009 20:31

Re: Reload
 
Was genau hast du daran jetzt nicht verstanden?

http://de.wikipedia.org/wiki/Batch-Datei

Fussel9 22. Jun 2009 20:37

Re: Reload
 
IncludeTrailingPathDelimiter(ExtractFilePath(Param Str(0))) + 'irgendeine.datei'
.................................................. ....................
.................................................. ....................
(______ ______)....(___ ___).(__ __)............................(_____ _____)
.......'...............'........'................. ....................'
Was ist der.........Delimiter..Extract.................... ........z.B. Save.ini?
Trailing Path?.........???.......Wieso ein
..................................Auszug?

DeddyH 22. Jun 2009 20:39

Re: Reload
 
Sorry, aber:
-ParamStr -> F1
-ExtractFilePath -> F1
-IncludeTrailingPathDelimiter -> F1

Soviel kann man erwarten.

mkinzler 22. Jun 2009 20:40

Re: Reload
 
IncludeTrailingPathDelimiter() fügt einen BackSlash ans Ende an, falls dieser noch nicht da ist (was aber eigentlich bei ExtractFilePath() der Fall ist)

Fussel9 22. Jun 2009 20:50

Re: Reload
 
hab den realtiven Pfad gerade mal mit dem Befehl ersetzt und schon...FUNKTIONIERTS NICHT MEHR

...naja wie auch immer mit relativen Pfaden klappts ja...

mkinzler 22. Jun 2009 20:51

Re: Reload
 
Und wie sieht der Pfad nun aus?

DeddyH 22. Jun 2009 20:51

Re: Reload
 
Zitat:

...naja wie auch immer mit relativen Pfaden klappts ja...
Fragt sich nur, wie lange.

[edit] Markus: wie bitte? [/edit]

Popov 22. Jun 2009 20:51

Re: Reload
 
Zitat:

Zitat von Fussel9
Sorry, aber das hab ich jetzt nicht ganz verstanden...

Also ich weiß nicht wie dein Code aussieht, und vielleicht machst du etwas richtig, aber nur mit .\ oder .\ordner kommst du so ohne weiteres nicht ans Ziel. Denn bei Delphi mußt du deinen Pfad schon richtig, d.h. komplett, angeben. Eine kleine Ausnahme gibt es. Es gibt, ich glaube noch aus der DOS Zeit, den aktuellen Pfad. Der kann zufällig der Pfad zu dem Ordner sein in dem sich dein Programm befindet, er kann sich aber auch ändern. Also Finger weg vom aktuellen Pfad. Dein Programm kann damit funktionieren, aber dann nur zufällig.

Hier paar nützliche Funktionen:

ParamStr(0) gibt dem kompletten Pfad deines Exe-Programms
ExtractFilePath(ParamStr(0)) gibt nur den Ordner an in dem sich dein Exe-Programm befindet.

Popov 22. Jun 2009 20:57

Re: Reload
 
Zitat:

Zitat von Daniel G
Delphi-Quellcode:
IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'irgendeine.datei'

Nur mal so, weil ich es immer wieder sehen, IncludeTrailingPathDelimiter ist hier nicht nötig. ExtractFilePath gibt den Pfad immer mit dem Backslash "\" zurück. Also braucht man auch keine Funktion die es bei Bedarf anheftet. ExtractFileDir gibt dagegen den Pfad immer ohne Backslash "\" zurück.

DeddyH 22. Jun 2009 20:58

Re: Reload
 
Nicht pushen :warn:

Mithrandir 22. Jun 2009 20:59

Re: Reload
 
Und genau deshalb, um mir nicht immer merken zu müssen, welche Funktion den Pfad wie zurück gibt, knall ich die Funktion da drumherum. ;)

mkinzler 22. Jun 2009 21:01

Re: Reload
 
@Popov: Liest du eigentlich auch die Antworten von anderen Benutzern?

Popov 22. Jun 2009 21:18

Re: Reload
 
Zitat:

Zitat von mkinzler
@Popov: Liest du eigentlich auch die Antworten von anderen Benutzern?

Schon, aber wenn ich in einem Forum die Beiträge lese und der Meinung bin, daß ich auf etwas antworten sollte, dann klicke ich auf den Antworten oder Zitat Button, schreibe meinen Text und schicke den ab. Erst danach gehe ich zurück und lesen die weiteren Beiträge.

Ich weiß auf was du hinaus willst. Es ist jetzt zwei oder drei mal vorgekommen, daß ich einen Tipp abgegeben habe der schon abgegeben wurde. Aber verlangst du wirklich von mir, daß ich, wenn ich das Gefühl habe, daß ich antworten sollte, mir erst alle Beiträge bis Ende durchlesen soll und zu prüfen ob einer bereits etwas geschrieben hat, bevor ich selbst antworte? Das nimmt die ganze Spontanität weg. Entweder will ich zu dem Zeitpunkt antworten oder nicht. Ich lese garantiert nicht erst 10 Minuten weiter und gehe dann alles noch mal durch. Aber auch wenn ich es machen würde, in der Zeit in der ich dann schrieben, kann einer mit seiner Antwort schneller sein. Und schon wieder haben wir das Problem. Also entschuldige, daß ich paar Mal gleiche Ideen hatte wie du. Und komm nicht mit dem Hinweis, daß so eine rote Schrift mich drauf hinweist, daß zwischendurch neue Antworten hinzugekommen sind. Glaubst du ich schrieben fünf Minuten an einem Text um denn dann nicht abzuschicken?

Also, entweder du akzeptierst, daß manche Tipps doppelt kommen und du löscht bei Bedarf meine Beiträge.

mkinzler 22. Jun 2009 21:28

Re: Reload
 
Zitat:

und du löscht bei Bedarf meine Beiträge.
Das werde ich garantiert nicht machen.

Popov 22. Jun 2009 21:31

Re: Reload
 
Ähm... sorry, das sollte ein "oder" sein, nicht "und". Man sollte nicht eine Reportage über die Mafia mit dem einem Auge gucken, mit dem anderen Texte schreiben.

quendolineDD 22. Jun 2009 22:52

Re: Reload
 
[OT]Ich habe hier lange nicht mehr einen Thread gesehen, wo so viele Sachen doppelt und dreifach hintereinander von verschiedenen Usern genannt werden. Entweder wir werden senil oder ich bin heute nur sensibel.[/OT]
Gibt es zum eigentlichen Problem, weswegen der Thread eröffnet wurde noch Fragen?

Fussel9 24. Jun 2009 12:52

Re: Reload
 
nicht direckt, aber:

Ich habe mal aus Spaß eine Verküpfung zum Desktop gemacht von meiner Exe und ich habe auch mal parallel zu meinem Programm ein anderes laufen lassen.

Keine Error Meldung, kein nicht gefundener Pfad und alle Ini-Dateien wurden richtig angelegt....

Ich finde einfach nichts was meine relativen Pfade erschüttert...

Woher glaubt ihr den zu wissen das sich der Pfad da ändert?

Der Pfad wird ja auch immer nur ausgelesen, in einem Moment in dem das Programm aktiv ist...

Mithrandir 24. Jun 2009 13:04

Re: Reload
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe dir mal was zusammengestrickt:

Zuerst auf "LoadFile" klicken
Dann auf "OpenDialog" klicken - dabei eine x-beliebige Datei in einem fremden Verzeichnis auswählen.
Dann wieder auf "LoadFile" klicken - Und jetzt kann die Datei nicht gefunden werden... ;)

Und deshalb soll man absolute Pfadangaben benutzen... ;)

DeddyH 24. Jun 2009 13:05

Re: Reload
 
Mach mal eine Konsole auf (angenommen, Dein Programm steht unter "C:\Programme\Test\Test.exe"). In der Konsole gibst Du nun ein:
Code:
c:
cd "\programme\test"
test.exe
Alles super, funktioniert, wozu Sorgen machen? Neue Konsole:
Code:
c:
cd \
"programme\test\test.exe"
Nanu? Was ist nun aktuelles Verzeichnis?

Fussel9 24. Jun 2009 13:25

Re: Reload
 
Zitat:

Ich habe dir mal was zusammengestrickt:
das war ja echt nett, aber im gesamten Quelltext steht nirgendwo etwas das

Delphi-Quellcode:
save:=TIniFile.Create('.\Save\Save.ini');
ähnlich ist,

es gibt nur

Delphi-Quellcode:
Memo1.Lines.LoadFromFile('test.txt')
und da gibt es ja kein .\

himitsu 24. Jun 2009 13:26

Re: Reload
 
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:

Zitat von Fussel9
Ich habe mal aus Spaß eine Verküpfung zum Desktop gemacht von meiner Exe und ich habe auch mal parallel zu meinem Programm ein anderes laufen lassen.

hast du auch den Ausführungspfad geändert?
(siehe Anhang > Bild)

Zitat:

Zitat von Fussel9
Ich finde einfach nichts was meine relativen Pfade erschüttert...

Woher glaubt ihr den zu wissen das sich der Pfad da ändert?

ich schon und woher ... langjährige und vorallem teils schlechte Erfahrungen


und das mit den mehreren Programmen, sei froh, daß du nicht mehr unter DOS arbeitets, da gab es nur einen aktiven Pfad je Laufwerk und alle Programme mußten sich diesen Teilen (OK, war kein Problem, da dort eh fast nur immer ein Programm gleichzeitig lief :nerd: ) ... in Windows hat jedes Programm seinen "eigenen" aktiven Pfad und dann nochmal eines je Laufwerk (irgendwas mssen wir ja für DOS übriglassen :angel2: )

mkinzler 24. Jun 2009 13:31

Re: Reload
 
@Farnk, vielleicht sollte man zur Verdeutlichung einen abweichenden Pfad nehmen

Mithrandir 24. Jun 2009 13:33

Re: Reload
 
Zitat:

Zitat von Fussel9
Delphi-Quellcode:
Memo1.Lines.LoadFromFile('test.txt')
und da gibt es ja kein .\

Dann fügs doch mal zu, und guck', was passiert. ;)

Fussel9 24. Jun 2009 13:36

Re: Reload
 
.7z ?

Was isn das fürn Datei-Typ?

Das is aber nicht sevenzip?

falls doch, kannst du's bitte nochmal als normale zip hochladen, längst nicht jeder nutzt sevenzip

himitsu 24. Jun 2009 13:37

Re: Reload
 
@Daniel G: mit oder ohne .\ am Anfang, sollte da schon das Gleiche rauskommen

@mkinzler: wieso ich? er sollte da doch mal was Anderes ausprobieren ... ich weiß was passiert und wollt mir die Arbeit sparen :mrgreen:


Tschuldschung: 7z = 7zip ... ich lag's gleich noch mal als .ZIP hoch

Mithrandir 24. Jun 2009 13:39

Re: Reload
 
Zitat:

Zitat von himitsu
@Daniel G: mit oder ohne .\ am Anfang, sollte da schon das Gleiche rauskommen

Jenau darauf wollte ich hinaus. Das ist völlig wurscht, ob da nun '.\', '\' oder '' steht. Und deshalb sollte man absolute Pfade benutzen.

himitsu 24. Jun 2009 13:41

Re: Reload
 
so, hab's in dem entsprechendem Beitrag durch .ZIP ersetzt

Zitat:

Zitat von Daniel G
Jenau darauf wollte ich hinaus. Das ist völlig wurscht, ob da nun '.\', '\' oder '' steht.

neee, '\datei' ist im Hauptverzeichnis des aktiven Laufwerks :zwinker:
jaja, relative Pfade und ihre Tücken ... nicht zu vergessen '..\datei' ... und ich laß jetzt mal UNC besser weg


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr.
Seite 2 von 3     12 3      

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