AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Childfenster im Parentfenster an der rechten Seite ausrichten
Thema durchsuchen
Ansicht
Themen-Optionen

Childfenster im Parentfenster an der rechten Seite ausrichten

Ein Thema von Siegl · begonnen am 18. Mai 2014 · letzter Beitrag vom 19. Mai 2014
Antwort Antwort
Siegl

Registriert seit: 8. Apr 2010
18 Beiträge
 
#1

Childfenster im Parentfenster an der rechten Seite ausrichten

  Alt 18. Mai 2014, 17:09
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.343 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Childfenster im Parentfenster an der rechten Seite ausrichten

  Alt 18. Mai 2014, 17:38
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Siegl

Registriert seit: 8. Apr 2010
18 Beiträge
 
#3

AW: Childfenster im Parentfenster an der rechten Seite ausrichten

  Alt 18. Mai 2014, 21:38
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.343 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Childfenster im Parentfenster an der rechten Seite ausrichten

  Alt 18. Mai 2014, 22:15
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Siegl

Registriert seit: 8. Apr 2010
18 Beiträge
 
#5

AW: Childfenster im Parentfenster an der rechten Seite ausrichten

  Alt 19. Mai 2014, 21:35
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
  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 11:24 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