Das nur mit etwas mehr Aufwand möglich:
Nehmen wir an du hast diesen FAQ Beitrag benutzt:
...einen Verzeichnisauswahl-Dialog anzeigen?. In Zeile 26 des ersten geposteten Sourcecodes beginnen die Zuweisungen der benötigten Eigenschaften (
TBrowseInfo) um den Dialog anzeigen zu können. Um das Fenster jetzt zentriert darzustellen musst du eine Callback-Funktion definieren. Diese Callback-Funktion musst du als erstes dem TBrowseInfo-Rekord bekannt geben:
Geänderter Sourcecode aus FAQ
22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| { ... } FillChar (BrowseInfo, SizeOf (BrowseInfo), 0); With BrowseInfo Do Begin hwndOwner := 0; pszDisplayName := @DisplayName; lpszTitle := PChar (aCaption) ; ulFlags := 0 ; lpfn := BrowseDialogCallBack; End; |
Jetzt werden einige (alle?) Messages an die Callback-funktion weitergeleitet und du kannst in dieser funktion das Fenster zentrieren:
BrowseDialogCallBack()
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:
| function BrowseDialogCallBack (Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): integer stdcall; var wa, rect : TRect; dialogPT : TPoint; begin if uMsg = BFFM_INITIALIZED then begin wa := Screen.WorkAreaRect; GetWindowRect(Wnd, Rect); dialogPT.X := ((wa.Right-wa.Left) div 2) - ((rect.Right-rect.Left) div 2); dialogPT.Y := ((wa.Bottom-wa.Top) div 2) - ((rect.Bottom-rect.Top) div 2); MoveWindow(Wnd, dialogPT.X, dialogPT.Y, Rect.Right - Rect.Left, Rect.Bottom - Rect.Top, True); end;
Result := 0; end; |
Das ganze ist
hier in englisch beschrieben.
Lg Martin