| Autor |
Beitrag |
LonghornUser
      
Beiträge: 796
|
Verfasst: Sa 07.08.04 23:29
Hallo.
Ich habe in meinem programm einen ordnerauswahl-dialog von windows mit eingebaut, damit leicht zu einem verzeichnis navigiert werden kann. Das habe ich so gemacht:
Delphi-Quelltext 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:
| function getfolder(root:integer;caption:string):string; var bi:TBROWSEINFO; lpbuffer:pchar; pidlprograms, pidlbrowse:PItemidlist; begin if (not succeeded(SHGETSPECIALFOLDERLOCATION(GETACTIVEWINDOW, root, pidlprograms))) then exit; lpbuffer:=stralloc(max_path); bi.hwndOwner:=getactivewindow; bi.pidlRoot:=pidlprograms; bi.pszDisplayName:=lpbuffer; bi.lpszTitle:=pchar(caption); bi.ulFlags:=BIF_RETURNONLYFSDIRS; bi.lpfn:=nil; bi.lParam:=0; pidlbrowse:=shbrowseforfolder(bi); if (pidlbrowse<>nil) then begin if (shgetpathfromidlist(pidlbrowse, lpbuffer)) then result:=lpbuffer; end; strdispose(lpbuffer); end;
ordnerlabel.Caption:=getfolder(CSIDL_PROGRAM_FILES,'Wählen Sie das Ausgabeverzeichnis aus:'); |
Wenn der User nun aber ein Ausgabe-verzeichnis haben will, das nicht existiert, aber nicht viele klicks investieren will per hand einen neuen ordner zu erstellen, der dann in diesem treeview existiert,
kann ich dann ein edit über diesem dialog einblenden, wo der pfad dasteht, der grade aktiv ist, sodass man einen neuen ordner einfach anfügen kann ? Oder kann man einen button hinzufügen, der einen neuen ordner ertellt ? Wie geht sowas.
Falls es nicht alles verstanden wurde einfach nochmal nachfragen.
Danke im Voraus.
Ciao
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt.
|
|
Matthias-K
      
Beiträge: 271
Win95, Win98, Win2000, WinXP, Linux
D2, D4 Client/Server, D5 Enterprise, D6 Enterprise, D7 Enterprise, Delphi2005, C/C++ 3.0, C/C ++ 5.0, C/C++ 6.0
|
Verfasst: So 08.08.04 02:41
du willst also eine möglichkeit einbauen, um einen neuen ordner zuzufügen!?
oder verstehe ich da jetzt was falsch?
mfg matthias
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 08.08.04 10:15
Titel: Re: Ordnerauswahl -> Edit oder "neuer ordner"-b
| LonghornUser hat folgendes geschrieben: | | kann ich dann ein edit über diesem dialog einblenden, wo der pfad dasteht, der grade aktiv ist, sodass man einen neuen ordner einfach anfügen kann ? |
Ja.
| Zitat: | | Oder kann man einen button hinzufügen, der einen neuen ordner ertellt ? |
Ja.
Mit den entsprechenden Flags von "SHBROWSEFORFOLDER". Ein Flag, das du bereits benutzt, ist BIF_RETURNONLYFSDIRS. Wenn du in Microsofts MSDN bzw. im Platform SDK schaust, dann findest du weitere. U.a. auch die von dir gewünschten. Du solltest aber unbedingt evtl. vorhandene Versionsangaben im Auge behalten. Das Editfeld lässt sich ab Windows 95/98 anzeigen, aber der "Neu"-Button erfordert IMHO eine aktuellere Version. Das steht aber dabei.
| Zitat: | | Falls es nicht alles verstanden wurde einfach nochmal nachfragen. |
Wie wäre es stattdessen, um so etwas zu verhindern, wenn du dir gleich etwas mehr Zeit beim Posten nimmst und deine Fragen nicht bloß "hinschmierst"? Dann bräuchte man nicht nachfragen. Wobei ich es aber auch so verstanden habe. 
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 08.08.04 11:20
Erstmal danke für die Antwort. Ich lese mir das mal durch.
Sorry, wollte es net "hinschmieren". Aber es war um die 0 Uhr und ich kam grade von ner feier  Aber was cool wäre, wäre eine Rechtschreibprüfung vorm Posten
edit: So habs jetzt mal probiert. Funktioniert astrein. Jetzt habe ich einen Neuer Ordner-Button. Ich habe das Flag gelöscht und es durch BIF_USENEWUI ersetzt. Ich nutze XP da dürfte es ja mit NT/2K problemlos funzen oder ? Aber was ist mit Win9x/ME ?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 08.08.04 12:46
Warum löscht du BIF_RETURNONLYFSDIRS? Man kann mehr als ein Flag benutzen und die gewünschten mit Plus bzw. via or verbinden. Ich verweise dich mal an die fertige Klasse TFolderBrowser, hier im DF, die du bei Bedarf eigentlich nur noch anpassen musst.
Wenn diese Anpassung gut und sinnvoll ist (und funktionstüchtig  ), dann kann man mit den Autoren von TFolderBrowser (und das sind ja einige  ) sicher über eine Integration reden. 
|
|
LonghornUser 
      
Beiträge: 796
|
Verfasst: So 08.08.04 13:14
Jo. Das ginge vielleicht auch  Aber warum eine neue Unit nehmen, wenns auch so gut geht ? Ich kann ja die erste flag dran lassen, aber ich wollte wirklich nur noch wissen, ob das auch unter 9x funzt. ich kanns momentan nicht testen weil die winME-CD außer haus ist  Weißt du, ob das unter NT/2K/XP geht ?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 08.08.04 14:29
Zwei Vorteile der genannten Unit: a) Wiederverwertbarkeit (willst du für jedes Projekt, in dem du die Ordnerauswahl brauchen könntest, den Code ständig neu schreiben?), b) Größe (der Code benutzt nur API-Aufrufe und macht sich daher in der Exe so gut wie nicht bemerkbar).
Zu den Versionen: Ich hab´s dir doch gesagt; schau im PSDK/MSDN nach den Versionsangaben. Wenn irgendwo was von Version 4.xx steht, dann kannst du davon ausgehen, dass das entsprechende Flag in 95/98/NT4 bekannt ist. In höheren Versionen natürlich sowieso!
Steht was von Version 5 da, ist meist 2000 notwendig, um dieses Flag zu verwenden. Steht sogar Version 6 da, dann brauchst du min. XP oder höher, wenn du das Flag benutzen willst.
|
|
|