Fenster optimal öffnen egal, wo die Taskleiste ist .
> Was ist die beste Methode hierfür?
ich weiss nicht... Hast Du schon mal ein Programm gesehen, dass ein
ähnliches Verhalten zeigt? Ich persönlich wäre jedenfalls etwas irritiert, wenn
ein Programm drei voneinander unabhängige Fenster öffnet, die dann doch
irgendwie zusammenhängen.
eine Alternative wäre ein Panelgadget. Pro Panel hast Du dann eine Sprache.
Grüße ... Kiffi
ich weiss nicht... Hast Du schon mal ein Programm gesehen, dass ein
ähnliches Verhalten zeigt? Ich persönlich wäre jedenfalls etwas irritiert, wenn
ein Programm drei voneinander unabhängige Fenster öffnet, die dann doch
irgendwie zusammenhängen.
eine Alternative wäre ein Panelgadget. Pro Panel hast Du dann eine Sprache.
Grüße ... Kiffi
a²+b²=mc²
TotalCommander finde ich auch klasse.
Ich denke, für meine Anwendung sind drei völlig freie Fenster am günstigsten, damit der Anwender sie frei verschieben und wegminimieren kann, was er nicht braucht.
Zurück zur eigentlichen Frage:
Nehmen wir an, die Taskleiste ist links und ich möchte ein Fenster der Größe 100x100 öffnen, das am oberen Rand und am linken Rand an der Taskleiste klebt. Wie geht das?
Ich denke, für meine Anwendung sind drei völlig freie Fenster am günstigsten, damit der Anwender sie frei verschieben und wegminimieren kann, was er nicht braucht.
Zurück zur eigentlichen Frage:
Nehmen wir an, die Taskleiste ist links und ich möchte ein Fenster der Größe 100x100 öffnen, das am oberen Rand und am linken Rand an der Taskleiste klebt. Wie geht das?
Viele Grüße aus dem Sauerland
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world

Hiermal die MDI-Version :
Beispiel :
Beispiel :
Code: Alles auswählen
Enumeration
#window
#window_edit1
#window_edit2
EndEnumeration
Enumeration
#Menu
#tile
EndEnumeration
Enumeration
#mdi
#edit1
#edit2
#Frame
EndEnumeration
hwnd = OpenWindow(0,0,0,800,600,"")
If CreateMenu(#Menu,hwnd)
MenuTitle("Mdi")
MenuItem(#tile, "Tile")
MenuTitle("Fenster")
EndIf
CreateGadgetList(hwnd)
Frame3DGadget(#Frame,0,0,190,595-MenuHeight(),"")
If MDIGadget(#mdi,200,0,800-200,600-MenuHeight(),1,0)
hEdit1 = AddGadgetItem(#mdi, #window_edit1 , "Editor 1")
CreateGadgetList(hEdit1)
EditorGadget(#edit1,0,0,WindowWidth(#window_edit1),WindowHeight(#window_edit1))
hEdit2 = AddGadgetItem(#mdi, #window_edit2 , "Editor 2")
CreateGadgetList(hEdit2)
EditorGadget(#edit2,0,0,WindowWidth(#window_edit2),WindowHeight(#window_edit2))
SendMessage_(GadgetID(#mdi),#WM_MDITILE,#MDITILE_HORIZONTAL,0)
EndIf
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Menu
If EventMenu() = #tile
SendMessage_(GadgetID(#mdi),#WM_MDITILE,#MDITILE_HORIZONTAL,0)
EndIf
EndIf
If EventWindow() = #window_edit1
If event = #WM_SIZE
ResizeGadget(#edit1,0,0,WindowWidth(#window_edit1),WindowHeight(#window_edit1))
EndIf
EndIf
If EventWindow() = #window_edit2
If event = #WM_SIZE
ResizeGadget(#edit2,0,0,WindowWidth(#window_edit2),WindowHeight(#window_edit2))
EndIf
EndIf
Until event = #WM_CLOSE
Danke Edel! Das ist ein prima Vorschlag.
Mit MDI habe ich auch schon mal experimentiert.
Unschön ist folgendes, vielleicht kann man es aber abstellen:
1) Verschiebe mal ein Editorfenster ein wenig nach rechts. Dann gibt es einen Scrollbalken, der nicht so toll ist, weil er nicht wieder verschwindet. Kann man das Verschieben verhindern (Minimieren und Maximieren soll man aber können)
2) Minimiere das obere Editor-Fenster. Es verschwindet hinter dem unteren. Damit könnte man zur Not ja leben, aber besser wäre natürlich eine Art "Taskleiste" von wo aus man wieder vergrößern kann.
3) Maximiere Editor 1 und minimiere es. Dann maximiere Editor2 und minimiere es. Mit "Tile" bekommt man nicht mehr den geteilten Bildschirm hin.
Ein Editorfenster kann zwar nicht auf volle Bildschirmbreite gefahren werden, aber damit könnte ich gut leben, wenn an der 1) bis 3) noch was machen kann.

Mit MDI habe ich auch schon mal experimentiert.
Unschön ist folgendes, vielleicht kann man es aber abstellen:
1) Verschiebe mal ein Editorfenster ein wenig nach rechts. Dann gibt es einen Scrollbalken, der nicht so toll ist, weil er nicht wieder verschwindet. Kann man das Verschieben verhindern (Minimieren und Maximieren soll man aber können)
2) Minimiere das obere Editor-Fenster. Es verschwindet hinter dem unteren. Damit könnte man zur Not ja leben, aber besser wäre natürlich eine Art "Taskleiste" von wo aus man wieder vergrößern kann.
3) Maximiere Editor 1 und minimiere es. Dann maximiere Editor2 und minimiere es. Mit "Tile" bekommt man nicht mehr den geteilten Bildschirm hin.
Ein Editorfenster kann zwar nicht auf volle Bildschirmbreite gefahren werden, aber damit könnte ich gut leben, wenn an der 1) bis 3) noch was machen kann.
Viele Grüße aus dem Sauerland
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world

Eckhard.S hat geschrieben: 1) Verschiebe mal ein Editorfenster ein wenig nach rechts. Dann gibt es einen Scrollbalken, der nicht so toll ist, weil er nicht wieder verschwindet. Kann man das Verschieben verhindern (Minimieren und Maximieren soll man aber können)
Code: Alles auswählen
MDIGadget(#mdi,200,0,800-200,600-MenuHeight(),1,0,#PB_MDI_NoScrollBars)
Dafuer ist das Menu da , steht dir aber frei die Fenster wo anders noch aufzulisten.Eckhard.S hat geschrieben: 2) Minimiere das obere Editor-Fenster. Es verschwindet hinter dem unteren. Damit könnte man zur Not ja leben, aber besser wäre natürlich eine Art "Taskleiste" von wo aus man wieder vergrößern kann.
Eckhard.S hat geschrieben: 3) Maximiere Editor 1 und minimiere es. Dann maximiere Editor2 und minimiere es. Mit "Tile" bekommt man nicht mehr den geteilten Bildschirm hin.
Code: Alles auswählen
If event = #PB_Event_Menu
If EventMenu() = #tile
SetWindowState(#window_edit1 ,#PB_Window_Normal)
SetWindowState(#window_edit2 ,#PB_Window_Normal)
SendMessage_(GadgetID(#mdi),#WM_MDITILE,#MDITILE_HORIZONTAL,0)
EndIf
EndIf

Eckhard.S hat geschrieben:P.S.
Mit #PB_Window_Maximize oder ShowWindow_(WindowID(0), #SW_MAXIMIZE)
bleibt bei mir die Taskleiste nicht sichtbar, sondern das Fenster maximiert sich auf volle Bildschirmgröße
Code: Alles auswählen
hwnd = OpenWindow(0,0,0,800,600,"",#PB_Window_SystemMenu|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
Zuletzt geändert von edel am 24.08.2006 17:44, insgesamt 1-mal geändert.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Da fehlt ja auch: #PB_Window_MaximizeGadgetEckhard.S hat geschrieben:P.S.
Mit #PB_Window_Maximize oder ShowWindow_(WindowID(0), #SW_MAXIMIZE)
bleibt bei mir die Taskleiste nicht sichtbar, sondern das Fenster maximiert sich auf volle Bildschirmgröße
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Super Leute! Hat sich alles geklärt. Ihr habt mich überzeugt! Das ist die beste Lösung!!
@Edel
Beim Programmstart ist Editor 1 oben und Editor 2 unten. Im Menü "Fenster" steht es leider verkehrt herum. Nach "Tile" ist dann Editor 2 oben und Editor 1 unten. Kann man das noch richtig stellen (immer 1 oben und 2 unten.
Noch eine Bitte: Wenn man das Hauptfenster dynamisch macht:
wäre es schick, wenn Editor 1 und Editor 2 in der Breite nach rechts sich anpassen würden. Die 200 für links sind prima.
@Edel
Beim Programmstart ist Editor 1 oben und Editor 2 unten. Im Menü "Fenster" steht es leider verkehrt herum. Nach "Tile" ist dann Editor 2 oben und Editor 1 unten. Kann man das noch richtig stellen (immer 1 oben und 2 unten.
Noch eine Bitte: Wenn man das Hauptfenster dynamisch macht:
Code: Alles auswählen
hwnd = OpenWindow(0,0,0,800,600,"Main", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_Maximize)
Viele Grüße aus dem Sauerland
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world
Eckhard
PureBasic 4.0 Vollversion, WinXP
Make a better world

- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Hi, ...
hier mal edels MDI-Version umgeschrieben als SplitterGadget-Variante:
(Mein persönlicher Favorit für solche Zweck, da dadurch immer ein sauber strukturierter Fensteraufbau vorhanden ist.)
Grüße, PL.
hier mal edels MDI-Version umgeschrieben als SplitterGadget-Variante:
(Mein persönlicher Favorit für solche Zweck, da dadurch immer ein sauber strukturierter Fensteraufbau vorhanden ist.)
Code: Alles auswählen
Enumeration
#window
#Menu
#tile
#Splitter
#edit1
#edit2
#Frame
#Button1
#Button2
#ButtonBoth
EndEnumeration
hwnd = OpenWindow(#window,0,0,800,600,"",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
CreateGadgetList(hwnd)
Frame3DGadget(#Frame,5,0,190,595-MenuHeight(),"")
ButtonGadget(#Button1 ,WindowWidth(#Window)-90,2,25,18,"1")
ButtonGadget(#Button2 ,WindowWidth(#Window)-60,2,25,18,"2")
ButtonGadget(#ButtonBoth,WindowWidth(#Window)-30,2,25,18,"1/2")
EditorGadget(#edit1,0,0,0,0)
EditorGadget(#edit2,0,0,0,0)
SplitterGadget(#Splitter, 200, 22, WindowWidth(#Window)-205, WindowHeight(#Window)-27,#edit1, #edit2)
AddGadgetItem(#edit1,0,"Esperanto-Textfield (1)")
AddGadgetItem(#edit2,0,"German-Textfield (2)")
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_SizeWindow
ResizeGadget(#Frame , #PB_Ignore, #PB_Ignore, #PB_Ignore, WindowHeight(#Window)-5)
ResizeGadget(#Splitter , #PB_Ignore, #PB_Ignore, WindowWidth(#Window)-205, WindowHeight(#Window)-27)
ResizeGadget(#Button1 , WindowWidth(#Window)-90, #PB_Ignore, #PB_Ignore, #PB_Ignore)
ResizeGadget(#Button2 , WindowWidth(#Window)-30, #PB_Ignore, #PB_Ignore, #PB_Ignore)
ResizeGadget(#ButtonBoth , WindowWidth(#Window)-60, #PB_Ignore, #PB_Ignore, #PB_Ignore)
Case #PB_Event_Gadget
Select EventGadget()
Case #Button1
SetGadgetState(#Splitter, GadgetHeight(#Splitter))
Case #Button2
SetGadgetState(#Splitter, 0)
Case #ButtonBoth
SetGadgetState(#Splitter, GadgetHeight(#Splitter)/2)
EndSelect
EndSelect
Until event = #WM_CLOSE
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Naja ein wenig solltest du schon selber machenEckhard.S hat geschrieben:Super Leute! Hat sich alles geklärt. Ihr habt mich überzeugt! Das ist die beste Lösung!!
@Edel
Beim Programmstart ist Editor 1 oben und Editor 2 unten. Im Menü "Fenster" steht es leider verkehrt herum. Nach "Tile" ist dann Editor 2 oben und Editor 1 unten. Kann man das noch richtig stellen (immer 1 oben und 2 unten.
Noch eine Bitte: Wenn man das Hauptfenster dynamisch macht:wäre es schick, wenn Editor 1 und Editor 2 in der Breite nach rechts sich anpassen würden. Die 200 für links sind prima.Code: Alles auswählen
hwnd = OpenWindow(0,0,0,800,600,"Main", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_Maximize)

http://windowssdk.msdn.microsoft.com/en ... 32591.aspx
@PureLust
Schoenes Beispiel aber deine Enumeration ist Mist.