So wie es momentan ist finde ich es auch blöd.
Allerdings weis ich nicht wie man das richtig macht.
Hier mal der Code der das momentan macht.
Delphi-Quellcode:
Function GetFolder(Root: Integer; Caption: String): String;
Var
bi: TBrowseInfo;
lpBuffer: PChar;
pidlPrograms,
pidlBrowse: PItemIDList;
Begin
result := '';
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;
// Und zum aufrufen.
Procedure TForm1.Button3Click(Sender: TObject);
Var
s: String;
Begin
s := GetFolder(CSIDL_DRIVES, 'Select Path from Levels');
If length(s) <> 0 Then Begin
s := sysutils.includeTrailingbackslash(s);
form1.label3.caption := s;
form1.label3.hint := s;
End;
End;
Wenn jemand eine Elegantere Lösung hat nur her damit.
Übrigens hat die Aktuelle Version eine Farbige anzeige ( die bereits geschafften Levels werden grün )welche levels bereits gespielt wurden und welche nicht.
Wer also diesen Effect in seiner version nicht hat sollte das Spiel lieber nochmal neu laden.
Die Datei Standard.lpk dürft ihr dann aber nicht überschreiben, sonst werden eure Spielstände zurückgesetzt.