Fenster anderem Fenster als Subwindow (Popup?) zuweisen?
Übersicht BlitzBasic BlitzPlus
KnorxThieusBetreff: Fenster anderem Fenster als Subwindow (Popup?) zuweisen? |
Mo, Jun 08, 2015 13:12 Antworten mit Zitat |
|
---|---|---|
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_SetParent 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: … anstatt davorzustehen, wie es eigentlich sollte: Bild: Ich habe auch schon versucht, mit dem Befehl api_SetWindowLong 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. Mit freundlichen Grüßen, KnorxThieus |
||
Sirrus |
Mo, Okt 26, 2015 7:20 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Okt 26, 2015 9:10 Antworten mit Zitat |
|
---|---|---|
?
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 |
Mo, Okt 26, 2015 12:14 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Okt 26, 2015 13:32 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Okt 26, 2015 19:12 Antworten mit Zitat |
|
---|---|---|
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 |
Sa, Okt 31, 2015 19:36 Antworten mit Zitat |
|
---|---|---|
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#. Dennoch natürlich an jeden von euch danke für eure Bemühungen! Um erstmal einige Fragen zu klären:
Sirrus hat Folgendes geschrieben: zum Unterschied zwischen api_GetActiveWindow und api_GetForegroundWindow:
Gut, dementsprechend wäre in diesem Fall GetActiveWindow richtig?
Das aktive Fenster muss nicht unbedingt im Fordergrund sein, es kann auch hinter einem Topmost-Fenster liegen. 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+ |
Übersicht BlitzBasic BlitzPlus
Powered by phpBB © 2001 - 2006, phpBB Group