// copied from the last "Latium Software - Pascal Newsletter #33"
function BrowseCallbackProc(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer stdcall; var Buffer: array[0..MAX_PATH - 1] of char; begin case uMsg of BFFM_INITIALIZED: if lpData <> 0then SendMessage(Wnd, BFFM_SETSELECTION, 1, lpData); BFFM_SELCHANGED: begin SHGetPathFromIDList(PItemIDList(lParam), Buffer); SendMessage(Wnd, BFFM_SETSTATUSTEXT, 0, Integer(@Buffer)); end; end; Result := 0; end;
// copied from the last "Latium Software - Pascal Newsletter #33"
function BrowseForFolder(Title: string; RootCSIDL: integer = 0; InitialFolder: string = ''): string; var BrowseInfo: TBrowseInfo; Buffer: array[0..MAX_PATH - 1] of char; ResultPItemIDList: PItemIDList; begin with BrowseInfo do begin hwndOwner := Application.Handle; if RootCSIDL = 0then pidlRoot := nil else SHGetSpecialFolderLocation(hwndOwner, RootCSIDL, pidlRoot); pszDisplayName := @Buffer; lpszTitle := PChar(Title); ulFlags := BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT; lpfn := BrowseCallbackProc; lParam := Integer(Pointer(InitialFolder)); iImage := 0; end; Result := ''; ResultPItemIDList := SHBrowseForFolder(BrowseInfo); if ResultPItemIDList <> nilthen begin SHGetPathFromIDList(ResultPItemIDList, Buffer); Result := Buffer; GlobalFreePtr(ResultPItemIDList); end; with BrowseInfo do if pidlRoot <> nilthen GlobalFreePtr(pidlRoot); end;
// clear log file
procedure TfrmServer.btnClearLogClick(Sender: TObject); begin lstLog.Clear; end;
// got http server root folder
procedure TfrmServer.btnGetFolderClick(Sender: TObject); var NewFolder: string; begin NewFolder := BrowseForFolder('Web Root Folder', 0, edtRootFolder.Text); if NewFolder <> ''then if DirectoryExists(NewFolder) then edtRootFolder.Text := NewFolder; end;
// de-activate http server
procedure TfrmServer.chkActiveClick(Sender: TObject); begin if chkActive.Checked then begin // root folder must exists if AnsiLastChar(edtRootFolder.Text)^ = '\'then edtRootFolder.Text := Copy(edtRootFolder.Text, 1, Pred(Length(edtRootFolder.Text))); chkActive.Checked := DirectoryExists(edtRootFolder.Text); ifnot chkActive.Checked then ShowMessage('Root Folder does not exist.'); end; // de-/activate server httpServer.Active := chkActive.Checked; // log to list box LogServerState; // set interactive state for user fields edtRootFolder.Enabled := not chkActive.Checked; edtDefaultDoc.Enabled := not chkActive.Checked; end;
procedure TfrmServer.LogServerState; begin if httpServer.Active then Log(httpServer.ServerSoftware + ' is active') else Log(httpServer.ServerSoftware + ' is not active'); end;