Seite 1 von 1

open ChildWindow in Parent Window

Verfasst: 11.06.2025 08:42
von udg
Hallo und Guten Morgen,

ich habe mir ein Tool geschrieben welches ein 2tes Window öffnet, wenn ich einen entsprechenden Button dafür mit linker Maustaste drücke.

Ich starte das Main und das zweite als "HideWindow(#WND_MailClient, #True)"

Drücke ich den Button, dass es das 2ter Fenster anzeigen soll, rufe ich den Befehl "HideWindow(#WND_MailClient, #False)" auf.

Soweit so gut.

Ich möchte jedoch, dass das 2te Fenster immer mittig im Main Fenster erscheint, das tut es jedoch nicht.

Hilfe ist willkommen ;)

im Code nach allem Zeichnen rufe ich auf:

[b]WND_MailClient() - soll mittig im Main aufgezeigt werden
Main()[/b]

um das 2te Fester anzuzeigen rufe ich die Procedure auf:


;:==================================================
;:
;: Button - Zeige E-Mail Kontakt:
;:
;:

Procedure.i OnGadget_Btn_Report()

HideWindow(#WND_MailClient, #False)

EndProcedure


Der Email Klient wird so aufgebaut:
Procedure.i WND_MailClient()

OpenWindow(#WND_MailClient, #PB_Window_ScreenCentered, #PB_Window_ScreenCentered, 400, 450, "", #PB_Window_Invisible|#PB_Window_ScreenCentered|#PB_Window_BorderLess)

.....
HideWindow(#WND_MailClient, #True)

Die PB Konstante: #PB_Window_WindowCentered tut leider nix ;(

Kann mir jemand einen Tipp geben wie ich meine Email Form im Main Fenster immer zentriert im Main angezeigt bekomme?

Ich zeichne beide Proceduren wie folgt:

MAIN: - Hauptfenster

If OpenWindow(#Main, App\WindowX, App\WindowY, App\WindowW, App\WindowH, #APP_FULLNAME, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar|#PB_Window_Invisible)

und E-Mail Kontakt Fenster über Button mit: WND_MailClient()

OpenWindow(#WND_MailClient, #PB_Window_ScreenCentered, #PB_Window_ScreenCentered, 400, 450, "", #PB_Window_Invisible|#PB_Window_WindowCentered|#PB_Window_BorderLess)



Vielen Dank für Hilfe und Grüße

Re: open ChildWindow in Parent Window

Verfasst: 11.06.2025 09:25
von Kiffi
schau Dir mal den Parameter ParentID an:
Result = OpenWindow(#Window, x, y, InnerWidth, InnerHeight, Title$ [, Flags [, ParentID]])
https://www.purebasic.com/german/docume ... indow.html

Re: open ChildWindow in Parent Window

Verfasst: 11.06.2025 12:47
von Axolotl
Woher soll dein #WND_MainClient wissen was das Eltern-Fenster ist?

Mach mal diese Änderungen:

Code: Alles auswählen

OpenWindow(#WND_MailClient, 0, 0, 400, 450, "", #PB_Window_Invisible|#PB_Window_WindowCentered|#PB_Window_BorderLess, WindowID(#Main))
Oder anstelle von

Code: Alles auswählen

WindowID(#Main)
geht auch

Code: Alles auswählen

WindowID(GetActiveWindow())
Dann noch so aufrufen:

Code: Alles auswählen

HideWindow(#WND_MailClient, #False, #PB_Window_WindowCentered) 

Re: open ChildWindow in Parent Window

Verfasst: 11.06.2025 12:57
von Axolotl
Oder Du baust dir einfach deine eigene Funktion dafür. (Z.B. wenn das zweite Fenster nicht Kind vom Ersten sein soll)
Der Code dazu sähe in etwa so aus:

Code: Alles auswählen


Procedure CenterWindowOnWindow(Window, Parent)  
  Protected x, y 

  If (GetWindowState(Window) <> #PB_Window_Normal) 
    SetWindowState(Window, #PB_Window_Normal)  
  EndIf 
  
  x = WindowX(Parent) + (WindowWidth(Parent)  - WindowWidth(Window))  / 2
  y = WindowY(Parent) + (WindowHeight(Parent) - WindowHeight(Window)) / 2 

  ResizeWindow(Window, x, y, #PB_Ignore, #PB_Ignore) 
EndProcedure 

Re: open ChildWindow in Parent Window

Verfasst: 12.06.2025 06:55
von udg
morgen,

danke für deine Tipps. aber nichts davon funktioniert.


Ich schaue selber mal wie ich das umbaue

Re: open ChildWindow in Parent Window

Verfasst: 12.06.2025 12:00
von HeX0R
Natürlich geht das:

Code: Alles auswählen

Procedure OnClick_Button()
	Protected Width, Height
	
	Width = WindowWidth(1)
	Height = WindowHeight(1)
	ResizeWindow(1, WindowX(0) + (WindowWidth(0) - Width) / 2, WindowY(0) + (WindowHeight(0) - Height) / 2, #PB_Ignore, #PB_Ignore)
	HideWindow(1, 0)
	SetActiveWindow(1)
EndProcedure

OpenWindow(0, 0, 0, 400, 300, "Main", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_Invisible)
ButtonGadget(0, 40, 40, 100, 22, "Open 2. Window")
OpenWindow(1, 0, 0, 200, 200, "", #PB_Window_Invisible | #PB_Window_ScreenCentered | #PB_Window_SystemMenu)

HideWindow(0, 0)
BindGadgetEvent(0, @OnClick_Button())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Vielleicht solltest Du nächstes mal einen Beispielcode in code-tags posten, dann hätte man Dir ganz einfach darin die Änderungen machen können.
Aber mit diesen bunten Texten kann keiner was anfangen.

Re: open ChildWindow in Parent Window

Verfasst: 19.06.2025 02:45
von udg
Guten frühen Morgen HeX0R,

danke für deine Antwort im Weiteren.

natürtlich weiß ich, dass es zu schreiben geht. Aber an manchen Stellen hört "brain.exe" auch mal auf zu funktionieren. Ein gesamt-Code ist noch unübersichtlicher als meine, " wie du schreibst, bunten Snipests"

Danke für dein Beispiel und ja ich bekomme Eure,Deine und auch meine eigenen Zeilen Codes zum laufen, aber eben nicht so wie ich es mir vorstelle.

Trotzdem danke auch für deinen "Reply"
Ich schreibe mir den Code selber und bekomme das auch hin. Mein Code ist nur immer an manchen Ecken falsch bis er funzt.



Viele Grüße

Re: open ChildWindow in Parent Window

Verfasst: 19.06.2025 03:46
von jacdelad
udg hat geschrieben: 19.06.2025 02:45 Seinicht immer so stren mit mir ;)
Das hat nichts mit streng zu tun, sondern mit Lesbarkeit und Praktikabilität.

Re: open ChildWindow in Parent Window

Verfasst: 19.06.2025 10:52
von Axolotl
udg hat geschrieben: 12.06.2025 06:55 ......
danke für deine Tipps. aber nichts davon funktioniert.
Ich schaue selber mal wie ich das umbaue
Nun ja, bei mir funktionieren die Vorschläge (Habe sie aus meiner Sammlung, die in vielen Tools mitmachen).
Idee zu deinen Beispiel-Zeilen im ersten Post:
Du sprichst von

Code: Alles auswählen

#PB_Window_WindowCentered
aber verwendest

Code: Alles auswählen

#PB_Window_ScreenCentered


Ohne weiteren Code, der (nicht (so)) funktioniert können wir nicht helfen.
Viel Erfolg.

Re: open ChildWindow in Parent Window

Verfasst: 19.06.2025 21:34
von udg
Alles gut. Ich weiß wie es gemeint ist.


Danke für die Hilfen und Infos.