Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Fensterposition anhand von Handle ändern. (https://www.delphipraxis.net/10709-fensterposition-anhand-von-handle-aendern.html)

mandumoal 23. Okt 2003 19:00


Fensterposition anhand von Handle ändern.
 
Hi!
[gesucht habe ich schon geht trotzdem nicht]

Mit
Delphi-Quellcode:
DasHandle:=FindWindow(nil,'Ordner suchen');
müsste man doch eigentlich das Handle eines SelectDirectory-Dialogs bekommen, oder?
Ich möchte diesen nämlich anhand der MoveWindow Funktion mittig positionieren.
Aber leider schaffe ich es nicht mal bis zum Handle des SelectDirectorys.

Was könnte ich denn da falsch gemacht haben?


mfg mandumoal

neolithos 23. Okt 2003 19:05

Re: Fensterposition anhand von Handle ändern.
 
Man kann das Fenster nicht finden da es ein Dialog ist.

Versuche diesen Dialog über die reine Api zu erstellen und dann gibt es auch eine Hook-Funktion. In der man sowas machen kann.

Luckie 23. Okt 2003 19:06

Re: Fensterposition anhand von Handle ändern.
 
Wann rufst du FindWindow auf? Ich nehme aal an nach dem du den Dialog geöffnest hast. Da der aber modal angezeigt wird, sthet dein Programm so lange er angezeigt wird. Lösung: Verschieben von FindWindow und MoveWindow in einen separaten Thread der ständig nach dem fenster sucht. Ist allerdings etwas overkill nur deswegen einen extra Thread zu machen. :roll:

neolithos 23. Okt 2003 19:08

Re: Fensterposition anhand von Handle ändern.
 
Zitat:

Zitat von DelphiSource
Delphi-Quellcode:
function SelectDirectory(const Caption: string; const Root: WideString;
  var Directory: string): Boolean;
var
  WindowList: Pointer;
  BrowseInfo: TBrowseInfo;
  Buffer: PChar;
  OldErrorMode: Cardinal;
  RootItemIDList, ItemIDList: PItemIDList;
  ShellMalloc: IMalloc;
  IDesktopFolder: IShellFolder;
  Eaten, Flags: LongWord;
begin
  Result := False;
  if not DirectoryExists(Directory) then
    Directory := '';
  FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
  if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
  begin
    Buffer := ShellMalloc.Alloc(MAX_PATH);
    try
      RootItemIDList := nil;
      if Root <> '' then
      begin
        SHGetDesktopFolder(IDesktopFolder);
        IDesktopFolder.ParseDisplayName(Application.Handle, nil,
          POleStr(Root), Eaten, RootItemIDList, Flags);
      end;
      with BrowseInfo do
      begin
        hwndOwner := Application.Handle;
        pidlRoot := RootItemIDList;
        pszDisplayName := Buffer;
        lpszTitle := PChar(Caption);
        ulFlags := BIF_RETURNONLYFSDIRS;
        if Directory <> '' then
        begin
          lpfn := SelectDirCB;
          lParam := Integer(PChar(Directory));
        end;
      end;
      WindowList := DisableTaskWindows(0);
      OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
      try
        ItemIDList := ShBrowseForFolder(BrowseInfo);
      finally
        SetErrorMode(OldErrorMode);
        EnableTaskWindows(WindowList);
      end;
      Result := ItemIDList <> nil;
      if Result then
      begin
        ShGetPathFromIDList(ItemIDList, Buffer);
        ShellMalloc.Free(ItemIDList);
        Directory := Buffer;
      end;
    finally
      ShellMalloc.Free(Buffer);
    end;
  end;
end;

BrowserInfo.lpfn

Zitat:

Zitat von MSDN
Address of an application-defined function that the dialog box calls when an event occurs. For more information, see the BrowseCallbackProc function. This member can be NULL.


mandumoal 23. Okt 2003 19:13

Re: Fensterposition anhand von Handle ändern.
 
:wall: :wall: bin ich bl..!!

Ich hab das danach aufgerufen deswegen kann es garnicht gehen!

Grrr.


Zitat:

Versuche diesen Dialog über die reine Api zu erstellen und dann gibt es auch eine Hook-Funktion. In der man sowas machen kann.
Wie kann ich sowas über die reine API machen?
Könnte ich theoretisch in der Deklaration in FileCtrl die Position angeben?

Zitat:

Man kann das Fenster nicht finden da es ein Dialog ist.
? Hab es jetzt doch gefunden(Handle)

mfg mandumoal

mandumoal 23. Okt 2003 19:21

Re: Fensterposition anhand von Handle ändern.
 
Das was du als Source gepostet hast ist ja genau die Funktion aus FileCtrl!

Wo kann ich da die Position bestimmen??

neolithos 23. Okt 2003 19:29

Re: Fensterposition anhand von Handle ändern.
 
Steht ganz unten...

---

Du musst einen MessageHandler definíeren in dem du WM_WINDOWPOSCHANGED manipulierst. Und den an lpfn übergeben.

<- das ist nicht getestet und rein theoretisch -> es kann auch eine andere Nachricht sein.

mandumoal 23. Okt 2003 19:36

Re: Fensterposition anhand von Handle ändern.
 
Zitat:

Zitat von neolithos
Du musst einen MessageHandler definíeren in dem du WM_WINDOWPOSCHANGED manipulierst. Und den an lpfn übergeben.

Leider habe ich keine Ahnung wie ich eine MessaheHandler definiere und auch nicht was der lpfn ist!
:cry:

Sagts mir jemand?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:30 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