Autor Beitrag
LonghornUser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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:

ausblenden 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<>nilthen 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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
Matthias-K
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: 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



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

Zitat:
Wie geht sowas.

Mit den entsprechenden Flags von Suche im MSDN "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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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 ?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 :mrgreen:), dann kann man mit den Autoren von TFolderBrowser (und das sind ja einige ;)) sicher über eine Integration reden. ;)
LonghornUser Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 796



BeitragVerfasst: 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



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