open ChildWindow in Parent Window

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

open ChildWindow in Parent Window

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: open ChildWindow in Parent Window

Beitrag 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
a²+b²=mc²
Axolotl
Beiträge: 265
Registriert: 31.12.2008 16:34

Re: open ChildWindow in Parent Window

Beitrag 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) 
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Axolotl
Beiträge: 265
Registriert: 31.12.2008 16:34

Re: open ChildWindow in Parent Window

Beitrag 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 
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: open ChildWindow in Parent Window

Beitrag von udg »

morgen,

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


Ich schaue selber mal wie ich das umbaue
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: open ChildWindow in Parent Window

Beitrag 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.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: open ChildWindow in Parent Window

Beitrag 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
Zuletzt geändert von udg am 19.06.2025 21:32, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
jacdelad
Beiträge: 404
Registriert: 03.02.2021 13:39
Wohnort: Riesa
Kontaktdaten:

Re: open ChildWindow in Parent Window

Beitrag 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.
Guten Morgen, das ist ein schöner Tnetennba!

PureBasic 6.21/Windows 11 x64/Ryzen 7900X/32GB RAM/3 TB SSD
Synology DS1821+/DX517, 130.9TB+50.8TB+2TB SSD
Axolotl
Beiträge: 265
Registriert: 31.12.2008 16:34

Re: open ChildWindow in Parent Window

Beitrag 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.
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: open ChildWindow in Parent Window

Beitrag von udg »

Alles gut. Ich weiß wie es gemeint ist.


Danke für die Hilfen und Infos.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten