Entwickler-Ecke
Windows API - Ordnerauswahl -> Edit oder "neuer ordner"-butto
LonghornUser - Sa 07.08.04 23:29
Titel: Ordnerauswahl -> Edit oder "neuer ordner"-butto
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 - 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
Delete - 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 - 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 :D
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 ?
Delete - 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 [
http://www.delphi-forum.de/topic_27628.html], hier im DF, die du bei Bedarf eigentlich nur noch anpassen musst.
Wenn diese Anpassung gut und sinnvoll ist (und funktionstüchtig :mrgreen:), dann kann man mit den Autoren von TFolderBrowser (und das sind ja einige ;)) sicher über eine Integration reden. ;)
LonghornUser - 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 ?
Delete - 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!