Seite 2 von 4

Verfasst: 24.08.2006 16:52
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

Verfasst: 24.08.2006 17:04
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?

Verfasst: 24.08.2006 17:05
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

Verfasst: 24.08.2006 17:21
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.

Verfasst: 24.08.2006 17:36
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:

Verfasst: 24.08.2006 17:40
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)

Verfasst: 24.08.2006 17:42
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

Verfasst: 24.08.2006 17:49
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.

Verfasst: 24.08.2006 18:00
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.

Verfasst: 24.08.2006 18:09
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.