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/)
-   -   Childfenster im Parentfenster an der rechten Seite ausrichten (https://www.delphipraxis.net/180406-childfenster-im-parentfenster-der-rechten-seite-ausrichten.html)

Siegl 18. Mai 2014 18:09

Childfenster im Parentfenster an der rechten Seite ausrichten
 
Hallo,

weiß jemand, wie ich ein eingefügtes (Child-)Fenster am rechten Rand eines Parentfensters verankern kann?
Wäre in Delphi Anchors := [akTop,akRight]


Siegl

jaenicke 18. Mai 2014 18:38

AW: Childfenster im Parentfenster an der rechten Seite ausrichten
 
Ein paar Details wären interessant...

Meinst du ein Fenster, das du mit SetParent in ein anderes eingebettet hast?
Dann kannst du es in eine andere Komponente einbetten und die entsprechend positionieren, anders wird das nicht gehen.

Siegl 18. Mai 2014 22:38

AW: Childfenster im Parentfenster an der rechten Seite ausrichten
 
Frage: Ist die "Verankerung" Sache der Windows-API oder der Anwendung???


Hinweis zum Code:
ParentForm bzw. ParentWindow ist eine ControlBar einer fremden Windowsanwendung.
FormX ist hier eine ToolBar, welche am rechten Rand der ControlBar eingefügt/verankert werden soll.
UpdateWindowPos wird z.Z. durch eine allg. Updatemethode aufgerufen. Ich denke aber, WinProc wäre ggf. geeigneter.

Code:

FParentForm: HWnd;

TFormX.CreateParented(AParentForm);

...

constructor TFormX.CreateParented(ParentWindow: HWnd);
begin
  inherited CreateParented(ParentWindow);
  FParentForm := ParentWindow;
  SetWindowLong(ParentWindow,GWL_STYLE,GetWindowLong(ParentWindow,GWL_STYLE) or WS_CLIPCHILDREN or WS_CLIPSIBLINGS);
end;

...

procedure TFormX.UpdateWindowPos;
var R: TRect;
begin
  GetClientRect(FParentForm,R);
  SetWindowPos(Handle,HWND_TOP,R.Right - Width + 8,0,0,0,SWP_NOSIZE or SWP_NOACTIVATE);
end;
Siegl

jaenicke 18. Mai 2014 23:15

AW: Childfenster im Parentfenster an der rechten Seite ausrichten
 
Die Anchors setzt Delphi um, d.h. wenn du dein Fenster in ein fremdes einblendest, kannst du diese dafür nicht nutzen. Da bleibt nur auf WM_RESIZE usw. zu reagieren (dafür musst du dich vermutlich in die fremde Anwendung einklinken) und dich selbst darum zu kümmern.

Siegl 19. Mai 2014 22:35

AW: Childfenster im Parentfenster an der rechten Seite ausrichten
 
Hallo,

WM_RESIZE ist schwierig. Ich habe ShellMessage und HSHELL_REDRAW verwendet. Das ist relativ einfach und das Ergebnis ok.

Beispielcode:
Code:
procedure TForm.ShellMessage(Sender: TObject; var Msg: TMessage);
begin
  if (GetClassName(Msg.LParam) = 'Applikation_ClassName')
    and ((Msg.WParam = HSHELL_WINDOWCREATED) or (Msg.WParam = HSHELL_REDRAW)) then
      UpdateWindowPos;
end;
Danke für Deine Antwort Jaenicke

Gruß Siegl


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