AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Fensterposition anhand von Handle ändern.
Thema durchsuchen
Ansicht
Themen-Optionen

Fensterposition anhand von Handle ändern.

Ein Thema von mandumoal · begonnen am 23. Okt 2003 · letzter Beitrag vom 23. Okt 2003
Antwort Antwort
mandumoal

Registriert seit: 20. Feb 2003
124 Beiträge
 
Delphi 5 Professional
 
#1

Fensterposition anhand von Handle ändern.

  Alt 23. Okt 2003, 20:00
Hi!
[gesucht habe ich schon geht trotzdem nicht]

Mit 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
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: Fensterposition anhand von Handle ändern.

  Alt 23. Okt 2003, 20:05
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.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Fensterposition anhand von Handle ändern.

  Alt 23. Okt 2003, 20:06
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#4

Re: Fensterposition anhand von Handle ändern.

  Alt 23. Okt 2003, 20:08
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 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.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
mandumoal

Registriert seit: 20. Feb 2003
124 Beiträge
 
Delphi 5 Professional
 
#5

Re: Fensterposition anhand von Handle ändern.

  Alt 23. Okt 2003, 20:13
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
  Mit Zitat antworten Zitat
mandumoal

Registriert seit: 20. Feb 2003
124 Beiträge
 
Delphi 5 Professional
 
#6

Re: Fensterposition anhand von Handle ändern.

  Alt 23. Okt 2003, 20:21
Das was du als Source gepostet hast ist ja genau die Funktion aus FileCtrl!

Wo kann ich da die Position bestimmen??
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#7

Re: Fensterposition anhand von Handle ändern.

  Alt 23. Okt 2003, 20:29
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.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
mandumoal

Registriert seit: 20. Feb 2003
124 Beiträge
 
Delphi 5 Professional
 
#8

Re: Fensterposition anhand von Handle ändern.

  Alt 23. Okt 2003, 20:36
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!


Sagts mir jemand?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 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