Fenster anderem Fenster als Subwindow (Popup?) zuweisen?

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

KnorxThieus

Betreff: Fenster anderem Fenster als Subwindow (Popup?) zuweisen?

BeitragMo, Jun 08, 2015 13:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich bin beim Bau einer ProgressWindows-Funktion, mit welcher ich während des Ladens einer Animation o. ä. (sowas dauert ja unter Blitz immer ewig …) in einem separaten Fenster den Fortschritt anzeige. Soweit klappt das auch schon, aber ich würde dieses Fortschritt-Fenster gerne auf dem Grafikfenster platzieren und dieses sperren (etwa wie im Eigenschaften-Dialog im Explorer, wenn man z. B. auf "Anderes Symbol …" geht).

Mein Ansatz war der Befehl api_SetParentuser posted image aus der user32.dll, doch wenn ich diesen auf das Hauptfenster (ermittelt mit sowohl api_GetActiveWindow als auch api_GetForegroundWindow, den Unterschied verstehe ich nicht) anwende, wird das Fortschrittsfenster zum Client-Window: Bild:
user posted image

… anstatt davorzustehen, wie es eigentlich sollte: Bild:
user posted image

Ich habe auch schon versucht, mit dem Befehl api_SetWindowLonguser posted image den Fenster-Style (dort verlinkt) um WS_CHILDWINDOW, WS_DLGFRAME oder WS_POPUP zu erweitern, was aber auch nichts gebracht hat.

Was mache ich also falsch? Wie setze ich dieses Parent-Fenster richtig? Brauche ich einen anderen Befehl?
Ich habe auch schon vergeblich deutsches und englisches Portal durchsucht und würde mich über jede Hilfe(ansätze) freuen. Smile

Mit freundlichen Grüßen,
KnorxThieus
 

Sirrus

BeitragMo, Okt 26, 2015 7:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe nicht, warum du überhaupt ein neues Fenster auf das Grafikfenster platzieren willst. Die einfachste Möglichkeit wäre, das neue Fenster auf ein Image zu zeichnen, das du dann auf dem Grafikfenster anzeigen kannst. (oder bei Blitz3D ein CameraViewport mit CameraProjMode=2)
Wenn es aber unbedingt ein Fenster sein soll, fällt mir als erstes api_WaitForSingleObject ein, hab die Funktion aber noch nicht unter Blitzbasic verwendet.

zum Unterschied zwischen api_GetActiveWindow und api_GetForegroundWindow:
Das aktive Fenster muss nicht unbedingt im Fordergrund sein, es kann auch hinter einem Topmost-Fenster liegen.

Jan_

Ehemaliger Admin

BeitragMo, Okt 26, 2015 9:10
Antworten mit Zitat
Benutzer-Profile anzeigen
?
warum zeigst du überhaupt das Hauptfenster an?
Wenn du eine Lade-Animation willst, kann die auch im Hauptfenster sein.
Laden dauert unter BB nicht ewig, Drehst du ein Bild 360 mal?

entweder, Ladebildschirm mit ins Hauptfenster, oder einfach statt ein Hauptfenster ein Window mit skalierbaren canvas machen und dass dann hiden, vor dem Laden und ein Ladewindow einfach machen.
between angels and insects

Thunder

BeitragMo, Okt 26, 2015 12:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde auch, dass es das beste wäre, die Ladeanimation im Grafikfenster anzuzeigen (kann ja sein, dass du Mal Vollbildmodus einbaust und dann schaut das wieder weniger gut aus, wenn der User einen schwarzen Bildschirm mit einem kleinen Fenster davor hat).

Du hast das aber eh geschafft. Das kleine Fenster ist ja bei dir ein Child vom großen. Sonst würde es in den Hintergrund gehen, wenn du das große anklickst. Du müsstest es halt noch aktivieren, aber du kannst den User nicht daran hindern, das größere wieder anzuklicken und es aktiv zu machen (wäre nicht besonders benutzerfreundlich).
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

DAK

BeitragMo, Okt 26, 2015 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Was du willst nennt sich Modales Fenster (siehe z.B. [url=about:reader?url=http%3A%2F%2Fblogs.msdn.com%2Fb%2Foldnewthing%2Farchive%2F2005%2F02%2F18%2F376080.aspx]dieses[/url] Tutorial) und zählt, soweit nicht unbedingt notwendig, als ziemlich böse.
Gewinner der 6. und der 68. BlitzCodeCompo

Mathias-Kwiatkowski

BeitragMo, Okt 26, 2015 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
nunja ein tipp wäre

ein "fenster als main mit einem canvas" und ein 2. fenster platziert auf das erste zu setzen. ähm blitzplus sollte ähnlich wie blitzmax sein, hoffe ich

Code: [AUSKLAPPEN]
local Window_1:TGadget = CreateWindow ("Mein Prog Graphics",0,0,640,480,Desktop())
local Window_Laden:Tgadget= createwindow ("Gui zick zak",0,0,150,150,Window_1)


die gui elemente habe ich nun nich eingezeichnet, aber denke das bsp sollte helfen.
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

KnorxThieus

BeitragSa, Okt 31, 2015 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo allerseits,

Wow, ich hätte nicht gedacht, dass dieser Thread noch einmal aufblühen würde!
Fast 5 Monate später, und ich hatte das Problem längst aufgegeben und habe inzwischen sogar die Programmiersprache gewechselt: Ich bin jetzt bei C#. Very Happy
Dennoch natürlich an jeden von euch danke für eure Bemühungen!

Um erstmal einige Fragen zu klären:
  • Warum ein neues Fenster? Gut, das hier war nur ein Testbeispiel. In echt würde ich auf dem Grafikfenster natürlich bereits Inhalte anzeigen.
  • Du könntest unter B+ das Graphics-Window auch zu einem normalen Fenster mit Canvas machen. Praktisch ja, aber ich wollte mit diesem Dialog eine Funktion bereitstellen, die überall schnell (!) als Ladeanzeige verwendet werden kann, ohne, dass man erst alles auf GUI-Window umstellen muss.

Sirrus hat Folgendes geschrieben:
zum Unterschied zwischen api_GetActiveWindow und api_GetForegroundWindow:
Das aktive Fenster muss nicht unbedingt im Fordergrund sein, es kann auch hinter einem Topmost-Fenster liegen.
Gut, dementsprechend wäre in diesem Fall GetActiveWindow richtig?

Jan hat Folgendes geschrieben:
Laden dauert unter BB nicht ewig, Drehst du ein Bild 360 mal?
Na ja, ich habe viele komplexe Pixel-Animationen gebaut – vielfarbige Explosionen etc. … mit Debugger aus Bequemlichkeit hat das schon so manches Mal Stunden gedauert. Obwohl mein PC nicht besonders langsam ist: sysProfile

@Thunder & DAK: Mangelnde Benutzerfreundlichkeit, wenn man das Main Window nicht aktivieren kann? Ich hielte es da doch für eher benutzerunfreundlich, wenn dieser ins Main Window wechselt und vergeblich versucht, dort vorhandene Steuerelemente zu bedienen.
DAK, deinen Code verstehe ich nicht: Dort wird (auch) dem Dialogfenster als Owner das MW (Main Window) zugeordnet und das MW disablet. Aber wie soll ich BB als Grouphandle ein hWnd-Handle übergeben? Und via SetParent scheint es ja auch nicht zu klappen.

Mit freundlichen Grüßen,
KnorxThieus
Version: BlitzPlus / Blitz+

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group