![]() |
Pfadangaben automatisch anpassen
Hi,
In meinem Installationsprogramm muss man Pfad angeben: c:\programme\firma\test oder: c:\programme\firma\test \ Wie kann ich weitere Pfadangaben (editfelder) automatisch umstellen: c:\programme\firma\hilfe c:\programme\firma\graphic c:\programme\firma\sonstige Mit freundlichen Grüßen Jonson |
Hi Jonson,
du könntest ja anstatt eine Setup-Routine selbst zu verfassen ein Setup von ![]() |
Was meinst du jetzt damit?
Willst du erkennen ob ein \ vorhanden ist und wenn icht eins ergänzen? |
@thomasdrewermann: Danke
Ich muss 4 Verzeichnisse anlegen: Test, Hilfe, Graphic, Sonstige Die erste User Angabe wäre: c:\programme\firma\test oder: c:\programme\firma\test\ Damit User keine weitere Angaben machen muss, müssten sich jetzt weitere Pfadangaben (editfelder) automatisch umstellen: c:\programme\firma\hilfe c:\programme\firma\graphic c:\programme\firma\sonstige Wie mache ich das? Mit freundlichen Grüßen Jonson |
Gehe richtig in der Annahme das Du du einfach nicht weisst ob die in deinem Quellcode angegebenen Ordner erkannt werden?
Oder meinst Du das Setup-Programm (InstallShield,His-Install) die Angaben für weitere Ordner? Grüsse |
Zitat:
Man gibt ein Verzeichnis an (egal ob er da ist oder nicht). Weitere Angaben (Pfads) sollten sich automatisch ergänzen. Ist das so schwierig zu verstehen? Setupprogramm ist von mir. Kein InstallShield usw. |
Wie wäre es damit:
Code:
An Dir kannst du jetzt die relativen Verzeichnisse anhängen
var Dir: string;
begin Dir := ExtractFilePath(ExcludeTrailingPathDelimiter(UserAngabe)); end; |
Test mal:
Code:
Bei dieser Lösung ist Vorraussetzung, dass edit1-edit4 vorhanden sind. Wenn man jetzt in Edit1 etwas einsetzt, werden die anderen 3 Feldern angepasst. einfach diese Funktion in den Quelltext kopieren und in den Ereignissen bei Edit1.Change auswählen.
procedure TForm1.Edit1Change(Sender: TObject);
begin if edit1.text<>'' then if edit1.Text[length(edit1.text)]='\' then begin edit2.text:=edit1.text+'hilfe'; edit3.text:=edit1.text+'graphic'; edit4.text:=edit1.Text+'sonstige'; end else begin edit2.text:=edit1.text+'\hilfe'; edit3.text:=edit1.text+'\graphic'; edit4.text:=edit1.text+'\sonstige'; end; end; MFG Thomas |
@thomasdrewermann: Danke
@ibq: Danke Jonson |
Zusammen mit meinem Dialog zum Auswähölen eines Ordner sollte das ganz gut funktionieren. Am besetn packst du den Code in OnExist vom Edit.
|
@Luckie: bin schon dabei, Danke !!!
|
Eine weitere Möglichkeit, welche ich noch schnell zum Besten geben möchte wäre
Code:
Damit würdest Du garantiert immer einen Backslash am Ende haben und könntest so die UNterverzeichnisse einfach "dranhängen".
if AnsiLastChar(PfadName)^ <> '\' then
PfadName := PfadName + '\'; P.S. Ich würde mich nicht darauf verlassen, dass SHBrowseForFolder den Pfad immer auf die gleiche Art und Weise zurückliefert. |
Moin Sakura,
wenn ich nicht sehr irre, liefert SHBrowseForFolder nur den ausgewählten Folder zurück, aber nicht den gesamten Pfad. Oder kennst Du dafür eine entsprechende Parametrisierung? |
Hi Christian,
in (zumindest) diesem Beispiel wird der komplette Pfad (UNC für Netzwerke) zurückgeliefert.
Code:
procedure TForm1.Button1Click(Sender: TObject);
var TitleName : string; lpItemID : PItemIDList; BrowseInfo : TBrowseInfo; DisplayName : array[0..MAX_PATH] of char; TempPath : array[0..MAX_PATH] of char; begin FillChar(BrowseInfo, sizeof(TBrowseInfo), #0); BrowseInfo.hwndOwner := Form1.Handle; BrowseInfo.pszDisplayName := @DisplayName; TitleName := 'Please specify a directory'; BrowseInfo.lpszTitle := PChar(TitleName); BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS; lpItemID := SHBrowseForFolder(BrowseInfo); if lpItemId <> nil then begin SHGetPathFromIDList(lpItemID, TempPath); ShowMessage(TempPath); GlobalFreePtr(lpItemID); end; end; |
Moin sakura,
danke für die prompte Antwort. Allerdings: Mit SHGetPathFromIDList mach ich das für die Rückgabe des Pfades auch. Ich hatte gedacht, Du wüsstest Paramter für SHBrowseForFolder, die einem das ersparen. ;-) |
MS wird uns da wohl keine andere Möglichkeit geben, da alle neueren Funktionen im Hintergrund mit diesen PIDLs arbeiten :( Aber immerhin gibt es ja SHGetPathFromIDList, damit uns das Leben etwas leichter fällt. :lol:
|
@Sakura: Danke!!!
Jonson |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 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