Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Domain / Arbeitsgruppen Auswahl-Dialog (https://www.delphipraxis.net/94609-domain-arbeitsgruppen-auswahl-dialog.html)

Luckie 24. Jun 2007 03:00


Domain / Arbeitsgruppen Auswahl-Dialog
 
Liste der Anhänge anzeigen (Anzahl: 1)
Gibt es auch so einen hübschen Dialog zum auswählen einer Domain, wie den "Computer auswählen"-Dialog im Anhang?

Delphi-Quellcode:
function FindComputer(hWnd: THandle; Prompt: String; csidl: word; var Computer: String): boolean;
const
  BIF_NEWDIALOGSTYLE = $0040;
  BIF_USENEWUI     = BIF_NEWDIALOGSTYLE or BIF_EDITBOX;
  BIF_BROWSEINCLUDEURLS = $0080;
  BIF_UAHINT       = $0100;
  BIF_NONEWFOLDERBUTTON = $0200;
  BIF_NOTRANSLATETARGETS = $0400;
  BIF_SHAREABLE    = $8000;

  BFFM_IUNKNOWN    = 5;
  BFFM_SETOKTEXT   = WM_USER + 105; // Unicode only
  BFFM_SETEXPANDED = WM_USER + 106; // Unicode only
var
  bi               : TBrowseInfo;
  ca               : array[0..MAX_PATH] of char;
  pidl, pidlSelected: PItemIDList;
  m                : IMalloc;
begin
  if Failed(SHGetSpecialFolderLocation(hWnd, CSIDL_NETWORK, pidl)) then
  begin
    result := False;
    exit;
  end;
  try
    FillChar(bi, SizeOf(bi), 0);
    with bi do
    begin
      hwndOwner := hWnd;
      pidlRoot := pidl;
      pszDisplayName := ca;
      lpszTitle := PChar(Prompt);
      ulFlags := BIF_BROWSEFORCOMPUTER;
    end;
    pidlSelected := SHBrowseForFolder(bi);
    Result := Assigned(pidlSelected);
    if Result then
      Computer := '\\' + string(ca);
  finally
    if Succeeded(SHGetMalloc(m)) then
      m.Free(pidl);
  end;
end;

Dezipaitor 24. Jun 2007 09:25

Re: Domain / Arbeitsgruppen Auswahl-Dialog
 
Man könnte doch einfach, den Ok-Button nur für die Domains verfügbar machen?

Delphi-Quellcode:
function BrowseCallbackProc(hwnd : THandle; uMsg, lParam, lpData: Cardinal) : Integer; stdcall;
var s : String;
    pidlSelected: PItemIDList;
begin
  if uMsg = BFFM_SELCHANGED then
  begin
    SendMEssage(hwnd, BFFM_ENABLEOK, 0, 1);
  end;
end;

...
bi.lpfn := @BrowseCallbackProc;

marabu 24. Jun 2007 09:33

Re: Domain / Arbeitsgruppen Auswahl-Dialog
 
Hallo,

vor allem anderen würde ich das Flag BIF_DONTGOBELOWDOMAINS verwenden.

Freundliche Grüße

Luckie 24. Jun 2007 12:41

Re: Domain / Arbeitsgruppen Auswahl-Dialog
 
Den Wert der Konstanten BIF_DONTGOBELOWDOMAINS kann ich leider nicht finden. Es muss aber auch unter Windows 2000 funktionieren!

Das "s" war zu viel:
Delphi-Quellcode:
BIF_DONTGOBELOWDOMAIN = $0002;
Funtioniert. Nur wie kann ich Windows dazu bringen, den Dialog richtig zu beschriften? Rufe ich die Funktion mit CSIDL_NETWORK auf, setht im Fenstertitel "Computer suchen". Und das passt ja nicht.

marabu 24. Jun 2007 13:57

Re: Domain / Arbeitsgruppen Auswahl-Dialog
 
Hallo Michael,

sorry für das extra S - ich hatte gerade eins übrig.

Ich kann mit meiner Funktion FindComputer(), auch wenn CSIDL_NETWORK als Einstieg verwendet wird, einen eigenen Titel mit SHBrowseForFolder() ausgeben. Zumindest unter XP scheint da kein Zusammenhang zu sein.

Freundliche Grüße

Luckie 24. Jun 2007 22:07

Re: Domain / Arbeitsgruppen Auswahl-Dialog
 
Selber setzten wollte ich ihn nicht. Meine Texte sind zwar auf Englisch aber wenn ich jetzt noch die Systemdialoge selber beschrifte dann stimmt das ja auf anderen System nicht mehr. Zum Beispiel auf einem Französischen: Programm auf englisch, Systemdialoge auf Französisch und der eine Dialog ist dann auf Deutsch beschriftet. :mrgreen: Bei mir steht da jetzt erstmal "Ordner suchen":

Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Procedure : FindDomain
// Comment  :
function FindDomain(hWnd: THandle; Prompt: String; var Domain: String): boolean;
const
  BIF_NEWDIALOGSTYLE = $0040;
  BIF_USENEWUI     = BIF_NEWDIALOGSTYLE or BIF_EDITBOX;
  BIF_BROWSEINCLUDEURLS = $0080;
  BIF_UAHINT       = $0100;
  BIF_NONEWFOLDERBUTTON = $0200;
  BIF_NOTRANSLATETARGETS = $0400;
  BIF_SHAREABLE    = $8000;

  BFFM_IUNKNOWN    = 5;
  BFFM_SETOKTEXT   = WM_USER + 105; // Unicode only
  BFFM_SETEXPANDED = WM_USER + 106; // Unicode only
var
  bi               : TBrowseInfo;
  ca               : array[0..MAX_PATH] of char;
  pidl, pidlSelected: PItemIDList;
  m                : IMalloc;
begin
  if Failed(SHGetSpecialFolderLocation(hWnd, CSIDL_NETWORK, pidl)) then
  begin
    result := False;
    exit;
  end;
  try
    FillChar(bi, SizeOf(bi), 0);
    with bi do
    begin
      hwndOwner := hWnd;
      pidlRoot := pidl;
      pszDisplayName := ca;
      lpszTitle := PChar(Prompt);
      ulFlags := BIF_DONTGOBELOWDOMAIN;
    end;
    pidlSelected := SHBrowseForFolder(bi);
    Result := Assigned(pidlSelected);
    if Result then
      Domain := string(ca);
  finally
    if Succeeded(SHGetMalloc(m)) then
      m.Free(pidl);
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz