Fenster optimal öffnen egal, wo die Taskleiste ist .

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> 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
a²+b²=mc²
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag von Eckhard.S »

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?
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Hiermal die MDI-Version :

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
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag von Eckhard.S »

Danke Edel! Das ist ein prima Vorschlag. :allright:

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 :D
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag von Eckhard.S »

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 :cry:
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

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)
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.
Dafuer ist das Menu da , steht dir aber frei die Fenster wo anders noch aufzulisten.
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
Edit : Vermeide Doppelpost ;-)
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 :cry:

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.
Benutzeravatar
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

Beitrag von ts-soft »

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 :cry:
Da fehlt ja auch: #PB_Window_MaximizeGadget
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.
Bild
Benutzeravatar
Eckhard.S
Beiträge: 136
Registriert: 22.07.2006 17:19
Wohnort: Meschede/Sauerland

Beitrag von Eckhard.S »

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:

Code: Alles auswählen

hwnd = OpenWindow(0,0,0,800,600,"Main", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_Maximize) 
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.
Viele Grüße aus dem Sauerland
Eckhard

PureBasic 4.0 Vollversion, WinXP
Make a better world :D
Benutzeravatar
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

Beitrag von PureLust »

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.)

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
Grüße, PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Eckhard.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:

Code: Alles auswählen

hwnd = OpenWindow(0,0,0,800,600,"Main", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_Maximize) 
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.
Naja ein wenig solltest du schon selber machen ;-)
http://windowssdk.msdn.microsoft.com/en ... 32591.aspx

@PureLust
Schoenes Beispiel aber deine Enumeration ist Mist.
Antworten