Seite 1 von 4

Fenster optimal öffnen egal, wo die Taskleiste ist .

Verfasst: 24.08.2006 15:10
von Eckhard.S
Habe zum Thema Taskleiste gestöbert aber noch nicht alles vollständig herausgefunden:

Aufgabe: Egal wo die Taskleiste ist und wie groß sie ist, soll ein Fenster optimal auf das ganze Desktop geöffnet werden.
Bei Taskleiste unten klappts bisher, bei Taskleiste oben oder an der Seite noch nicht.

Wer hat einen Tipp, wie man den Ort der Taskleiste herausbekommt und die Breite, wenn sie auf der Seite ist?

Code: Alles auswählen

;PB 4.0 Final


fensterrand = 3           ; jedes Fenster hat links, rechts oben unten je 3 Pixel Umrandung 
titelleistenhoehe = 19
titelleiste$ = "Fenster optimal öffnen"

bildschirmbreite = GetSystemMetrics_(#SM_CXSCREEN)  ; holt die Breite des Bildschirms
bildschirmhoehe  = GetSystemMetrics_(#SM_CYSCREEN)   ; holt die Höhe des Bildschirms

SystemParametersInfo_(#SPI_GETWORKAREA,0,@DesktopWorkArea.RECT,0) ; holt die Höhe des Desktops unter Berücksichtigung der Taskleiste
; Was holt die Breite des Desktops bei Taskleiste seitlich?

desktophoehe = DesktopWorkArea\Bottom 
taskleistenhoehe = GetSystemMetrics_(#SM_CYSCREEN) - DesktopWorkArea\Bottom 

;desktopbreite = ???? 
;was ist wenn Taskleiste oben oder rechts ist. 

OpenWindow(0, 0, 0, bildschirmbreite - 2*fensterrand, desktophoehe - 2*fensterrand - titelleistenhoehe, titelleiste$,  #PB_Window_SystemMenu |  #PB_Window_TitleBar ) ;| #PB_Window_SizeGadget #PB_Window_BorderLess )

SystemParametersInfo_(#SPI_GETWORKAREA,0,@DesktopWorkArea.RECT,0) 
TaskbarHeight = GetSystemMetrics_(#SM_CYSCREEN)-DesktopWorkArea\Bottom 
Debug "BildschirmBreite = " + Str(bildschirmbreite) +" Pixel"
Debug "BildschirmHöhe = " + Str(bildschirmhoehe) +" Pixel"
Debug "DesktopBreite = ???"
Debug "DesktopHöhe = " + Str(desktophoehe) +" Pixel"
Debug "TaskleistenHöhe = " + Str(taskleistenhoehe) +" Pixel"



Repeat 
 Select WaitWindowEvent() 
   Case #PB_Event_CloseWindow 
        Break
   EndSelect 
ForEver
End

Verfasst: 24.08.2006 15:20
von ts-soft
Du brauchst das Fenster doch nur zu Maximieren

Code: Alles auswählen

ShowWindow_(WindowID(0), #SW_MAXIMIZE)
oder dem entsprechenden PB Befehl.
Es gibt ja nicht nur die Taskleiste, sondern Quicklaunch usw. Die können auf
allen 4 Seiten verteilt werden :freak:

Bei normalen Anwendungen sollte man dies dem Anwender überlassen, weil
bei 1600 x 1200 Auflösung sieht ein maximiertes Fenster blöde aus :mrgreen:

Verfasst: 24.08.2006 15:47
von Eckhard.S
Dein Maximieren geht über die Taskleiste hinweg und das ist nicht schön, weil die Taskleiste zu sehen bleiben soll.
Außerdem baue ich gerade ein Kontrukt aus 3 unabhängigen Fenstern, ähnlich eines Framesets, die über dem Desktop optimal aufgehen sollen.

In einem Forenthema habe ich

Code: Alles auswählen

SystemParametersInfo_(#SPI_GETWORKAREA,0,@DesktopWorkArea.RECT,0)
gefunden und jetzt bin ich neugierig, wie man an die Desktopinfos herankommt.

Das Programm purebasic.exe kanns ja auch, egal wo die Taskleiste ist, ist es immer optimal auf dem Desktop zu sehen.

Verfasst: 24.08.2006 16:04
von Kiffi
Eckhard.S hat geschrieben:Dein Maximieren geht über die Taskleiste hinweg
genau das verhinderst Du, wenn Du Thomas' Rat befolgst.

Grüße ... Kiffi

Verfasst: 24.08.2006 16:09
von Ja!
Es ist Windows-Standard, daß die Taskleiste (bei "Always on top") immer zu sehen ist und maximierte Fenster sich automatisch anpassen..

..eben wie ts schon geschrieben hatte..

Verfasst: 24.08.2006 16:16
von Eckhard.S
Ich wollte aber gerne drei Fenster, die so aussehen und optimal auf dem Desktop sind, egal wo die Taskleiste ist.


Code: Alles auswählen

;PB4
; ************* Variablen Deklaration *************

fensterrand = 3
menuebreite=250
titelleistenhoehe = 19

SystemParametersInfo_(#SPI_GETWORKAREA,0,@DesktopWorkArea.RECT,0) ; holt die Höhe des Desktops unter Berücksichtigung der Taskleiste
bildschirmbreite = GetSystemMetrics_(#SM_CXSCREEN)  ; holt die Breite des Bildschirms
bildschirmhoehe = GetSystemMetrics_(#SM_CYSCREEN) -DesktopWorkArea\Bottom 
bildschirmhoehe = DesktopWorkArea\Bottom - 19
SystemParametersInfo_(#SPI_GETWORKAREA,0,@DesktopWorkArea.RECT,0) 
taskleistenhoehe = GetSystemMetrics_(#SM_CYSCREEN)-DesktopWorkArea\Bottom 
desktophoehe = bildschirmhoehe
desktopbreite = bildschirmbreite


;Debug "TaskBarHeight = "+Str(taskleistenhoehe)+" Pixel"
;Debug DesktopWorkArea\Bottom
;Debug bildschirmhoehe
;Debug desktophoehe
;Debug desktophoehe/2



        Fensterueberschrift$ = "Esperantoübersetzer von Eckhard Stoll, Version 1.0"

        Text_1       = 5
           Editor_1     = 11
           Editor_2     = 12
           Editor_3     = 13
              Button_1     = 20
                 Listenfeld_1 = 31
                 Listenfeld_2 = 32

        woerterbuchdatei$ = "eo-deu.txt"              ; aktuelles Wörterbuch
        Dim Wortlistenzeile.s(500000)            ; Anzahl der Wortlisteneinträge
        Dim Wortverbindung.s(1000)
                                 
        maxsaetze = 100                ; Maximum an Sätzen
        maxelemente = 500              ; Maximum an Wörtern pro Satz
        
        offset=13                      ; decode

        Dim eo_satz_wort.s(maxsaetze,maxelemente)     ; Array mit Eo-Sätzen und -Elementen (Wörter, Satzzeichen, Leerzeichen)
        Dim trans_satz_wort.s(maxsaetze,maxelemente)  ; Array mit Übersetzten Sätzen und -Wörtern
                                               
        Global FontID1
        FontID1 = LoadFont(1, "Courier New", 9)    ; Font für die Darstellung 


      
; ************* Hauptprogramm *************


OpenWindow(0, 0, 0, menuebreite, desktophoehe - 2*fensterrand, "Steuerung",  #PB_Window_SystemMenu |  #PB_Window_TitleBar ) ;| #PB_Window_SizeGadget #PB_Window_BorderLess )
SetWindowColor(0,RGB(100, 150, 100)) 
breitex = 70
  CreateGadgetList(WindowID(0))
      StringGadget(Editor_1, 20, 50, breitex, 100, "")
      SetGadgetFont(Editor_1, FontID1)
      EditorGadget(Editor_2, 20, 160, breitex, 110, #PB_Editor_ReadOnly)
      SetGadgetFont(Editor_2, FontID1)
      EditorGadget(Editor_3, 20, 280, breitex, 260,  #PB_Editor_ReadOnly)
      SetGadgetFont(Editor_3, FontID1)
      ListViewGadget(Listenfeld_1, breitex+25, 50, 110, 40)
      ButtonGadget(Button_1, breitex+25, 130, 100, 20, "Übersetzen")
      ListViewGadget(Listenfeld_2, breitex+25, 280, 100, 60)
      
   
      
      SetGadgetState(Listenfeld_1, 0)    ;erstes (nr. 0 ) Listenfelder aktiv
;OpenWindow(1, menuebreite + 2*fensterrand+10, 0, 10, 10,"",#PB_Window_BorderLess )
OpenWindow(1, menuebreite + 2*fensterrand, 0, desktopbreite-menuebreite-4*fensterrand - 2, desktophoehe/2 - 2*fensterrand - titelleistenhoehe - 1, "Esperanto",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
OpenWindow(2, menuebreite + 2*fensterrand, desktophoehe/2 + 1, desktopbreite-menuebreite-4*fensterrand - 2, desktophoehe/2 - 2*fensterrand - titelleistenhoehe - 1, "Deutsch",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )


Repeat 


 Select WaitWindowEvent() 
   Case #PB_Event_CloseWindow 
        Break

       
  EndSelect 
ForEver 
    


End

Verfasst: 24.08.2006 16:20
von Eckhard.S
P.S.

und es sollen drei getrennte Fenster sein, die man dann unabhängig voneinander maximieren kann, also kein Splitting

Verfasst: 24.08.2006 16:26
von ts-soft
Windows ist eine MultiTasking Umgebung, man arbeitet mit mehreren Anwendungen parallel. Die optimale Plazierung mußte dem Anwender überlassen. Wenn 3 Fenster, sollten es 2 Werkzeugfenster und ein Hauptfenster sein, alles andere händelt sich schlecht.

Bei Deinem Vorhaben wäre ein Splitting-Fenster oder ein MDI angebracht.

Verfasst: 24.08.2006 16:41
von Eckhard.S
Genau so stelle ich es mir vor :D
Es gibt ein Hauptfenster, wo man Einstellungen machen kann. Und zwei Werkzeugfenster (Textfenster). In einem bearbeitet man den Esperantotext (während man dies tut, kann man das Fenster maximieren, damit man eine möglichst große Fläche bei langen Texten hat. )

Das andere Fenster gibt dann den deutschen Text, bzw. so etwas aus (hier ein Bespiel in Englisch):

Code: Alles auswählen

This   text is  bilingual    and should break down at the right     place.
Dieser Text ist zweisprachig und soll   umbrechen  an der richtigen Stelle. 
Auch dieses Fenster soll maximiert werden können.


Was ist die beste Methode hierfür?

Verfasst: 24.08.2006 16:50
von ts-soft
Für mich wäre das so nichts :wink:
Erinnert mich an den Explorer, da muß man auch 2 öffnen, wenn man nicht dauernd umständlich mit dem Kontextmenü arbeiten will. Deshalb nutze ich seid Jahren nur TotalCommander, weil die Fenster dort gesplittet sind.

Mit 2 Toolfenstern, meine ich so schmale lange, keine Textfenster zum
Maximieren.

Aber mach mal Dein Design, ich halte mich da lieber raus :wink: